Class RDoc::TopLevel
In: code_objects.rb
Parent: Context

A TopLevel context is a source file

Methods

Attributes

diagram  [RW] 
file_absolute_name  [RW] 
file_relative_name  [RW] 
file_stat  [RW] 

Public Class methods

[Source]

     # File code_objects.rb, line 591
591:     def TopLevel.all_classes_and_modules
592:       @@all_classes.values + @@all_modules.values
593:     end

[Source]

     # File code_objects.rb, line 595
595:     def TopLevel.all_files
596:       @@all_files
597:     end

[Source]

     # File code_objects.rb, line 599
599:     def TopLevel.find_class_named(name)
600:      @@all_classes.each_value do |c|
601:         res = c.find_class_named(name) 
602:         return res if res
603:       end
604:       nil
605:     end

[Source]

     # File code_objects.rb, line 549
549:     def initialize(file_name)
550:       super()
551:       @name = "TopLevel"
552:       @file_relative_name = file_name
553:       @file_absolute_name = file_name
554:       @file_stat          = File.stat(file_name)
555:       @diagram            = nil
556:       @@all_files[file_name] = self
557:     end

[Source]

     # File code_objects.rb, line 543
543:     def TopLevel::reset
544:       @@all_classes = {}
545:       @@all_modules = {}
546:       @@all_files   = {}
547:     end

Public Instance methods

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.

[Source]

     # File code_objects.rb, line 569
569:     def add_class_or_module(collection, class_type, name, superclass)
570:       cls = collection[name]
571:       if cls
572:         puts "Reusing class/module #{name}" if $DEBUG
573:       else
574:         if class_type == NormalModule
575:           all = @@all_modules
576:         else
577:           all = @@all_classes
578:         end
579:         cls = all[name]
580:         if !cls
581:           cls = class_type.new(name, superclass)
582:           all[name] = cls  unless @done_documenting
583:         end
584:         puts "Adding class/module #{name} to #@name" if $DEBUG
585:         collection[name] = cls unless @done_documenting
586:         cls.parent = self
587:       end
588:       cls
589:     end

[Source]

     # File code_objects.rb, line 611
611:     def find_class_or_module_named(symbol, ignore_case=nil)
612:       if !ignore_case
613:         @@all_classes.each_value {|c| return c if c.name == symbol}
614:         @@all_modules.each_value {|m| return m if m.name == symbol}
615:       else
616:         @@all_classes.each_value {|c| return c if c.name.upcase == symbol.upcase}
617:         @@all_modules.each_value {|m| return m if m.name.upcase == symbol.upcase}
618:       end
619:       nil
620:     end

Find a named file

[Source]

     # File code_objects.rb, line 628
628:     def find_file_named(name, method=nil, ignore_case=nil)
629:       return nil unless name
630:       result = nil
631:       @@all_files.each{|file_name, toplevel|
632:         result = toplevel if file_name == name
633:       }
634:       dir = File.dirname(@file_relative_name)
635:       @@all_files.each{|file_name, toplevel|
636:         if /^#{dir}\/(.*)/ =~ file_name
637:           result = toplevel if $1 == name
638:         end
639:       }
640:       if result
641:         if method
642:           result_method = result.find_local_symbol(method, ignore_case)
643:           return result_method
644:         else
645:           return result
646:         end
647:       else
648:         return nil
649:       end
650:     end

[Source]

     # File code_objects.rb, line 607
607:     def find_local_symbol(symbol, ignore_case=nil)
608:       find_class_or_module_named(symbol, ignore_case) || super
609:     end

Find a named module

[Source]

     # File code_objects.rb, line 623
623:     def find_module_named(name, ignore_case=nil)
624:       find_class_or_module_named(name, ignore_case) || find_enclosing_module_named(name, ignore_case)
625:     end

[Source]

     # File code_objects.rb, line 559
559:     def full_name
560:       nil
561:     end

[Validate]