code: def tree_find(self, symbol, origin, attribute):
          
          #The symbol must be accessible to the origin module, otherwise
          #it wouldn't compile. Start there, first looking at the origin
          #itself and then the other modules that it depends on.
  
          #Since we will be referring to this multiple times, might as 
          #well get a pointer to it.
          oattr = origin.collection(attribute)
          base = None
          lorigin = None
          if symbol in oattr:
              base = oattr[symbol]
              lorigin = origin
          else:
              for module in origin.dependencies:
                  usespec = module.split(".")
                  if len(usespec) > 1:
                      if usespec[1] == symbol:
                          #The dependency is to a specific element in the module,
                          #and it matches.
                          lorigin = self.get(usespec[0])
                      else:
                          lorigin = None
                  else:
                      #The dependency is to the entire module!
                      lorigin = self.get(usespec[0])
              
                  #If we have code for the origin, we can search for the
                  #actual base object that we are interested in
                  if lorigin is not None:
                      lattr = lorigin.collection(attribute)
                      if symbol in lattr:
                          base = lattr[symbol]
                          break
  
          #By now, we either have the item we were after or we don't have
          #code for the module it needs
          return (base, lorigin)
docs: Finds the code element corresponding to specified symbol
          by searching all modules in the parser.
  
          :arg symbol: the name of the code element to find.
          :arg origin: an instance of a Module element who owns the text
            that is generate the find search.
          :arg attribute: one of ['dependencies', 'publics', 'members',
            'types', 'executables', 'interfaces'] that specifies which collection
            in the module should house the symbol's element.