code: def full_name(self):
          
          if self._full_name is None:
              ancestors = [ self.name ]
              current = self.parent
              while current is not None and type(current).__name__ != "CodeParser":
                  ancestors.append(current.name)
                  current = current.parent
  
              self._full_name = ".".join(reversed(ancestors))
          
          return self._full_name
docs: Returns the full name of this element by visiting every
          non-None parent in its ancestor chain.