| Class | RDoc::TopLevel |
| In: |
lib/rdoc/code_objects.rb
|
| Parent: | Context |
A TopLevel context is a source file
| diagram | [RW] | |
| file_absolute_name | [RW] | |
| file_relative_name | [RW] | |
| file_stat | [RW] |
# File lib/rdoc/code_objects.rb, line 518
518: def TopLevel.all_classes_and_modules
519: @@all_classes.values + @@all_modules.values
520: end
# File lib/rdoc/code_objects.rb, line 522
522: def TopLevel.find_class_named(name)
523: @@all_classes.each_value do |c|
524: res = c.find_class_named(name)
525: return res if res
526: end
527: nil
528: end
# File lib/rdoc/code_objects.rb, line 477
477: def initialize(file_name)
478: super()
479: @name = "TopLevel"
480: @file_relative_name = file_name
481: @file_absolute_name = file_name
482: @file_stat = File.stat(file_name)
483: @diagram = nil
484: end
# File lib/rdoc/code_objects.rb, line 472
472: def TopLevel::reset
473: @@all_classes = {}
474: @@all_modules = {}
475: end
Adding a class or module to a TopLevel is special, as we only want one copy of a particular top-level class. For example, if both file A and file B implement class C, we only want one ClassModule object for C. This code arranges to share classes and modules between files.
# File lib/rdoc/code_objects.rb, line 496
496: def add_class_or_module(collection, class_type, name, superclass)
497: cls = collection[name]
498: if cls
499: puts "Reusing class/module #{name}" if $DEBUG
500: else
501: if class_type == NormalModule
502: all = @@all_modules
503: else
504: all = @@all_classes
505: end
506: cls = all[name]
507: if !cls
508: cls = class_type.new(name, superclass)
509: all[name] = cls unless @done_documenting
510: end
511: puts "Adding class/module #{name} to #@name" if $DEBUG
512: collection[name] = cls unless @done_documenting
513: cls.parent = self
514: end
515: cls
516: end
# File lib/rdoc/code_objects.rb, line 534
534: def find_class_or_module_named(symbol)
535: @@all_classes.each_value {|c| return c if c.name == symbol}
536: @@all_modules.each_value {|m| return m if m.name == symbol}
537: nil
538: end
# File lib/rdoc/code_objects.rb, line 530
530: def find_local_symbol(symbol)
531: find_class_or_module_named(symbol) || super
532: end