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