Chris@0: name) === strtolower($this->lastNamespace)) { Chris@0: $this->aliases = $this->lastAliases; Chris@0: } Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * If this statement is a namespace, forget all the aliases we had. Chris@0: * Chris@0: * If it's a use statement, remember the alias for later. Otherwise, apply Chris@0: * remembered aliases to the code. Chris@0: * Chris@0: * @param Node $node Chris@0: */ Chris@0: public function leaveNode(Node $node) Chris@0: { Chris@0: if ($node instanceof Use_) { Chris@0: // Store a reference to every "use" statement, because we'll need Chris@0: // them in a bit. Chris@0: foreach ($node->uses as $use) { Chris@0: $this->aliases[strtolower($use->alias)] = $use->name; Chris@0: } Chris@0: Chris@0: return false; Chris@0: } elseif ($node instanceof GroupUse) { Chris@0: // Expand every "use" statement in the group into a full, standalone Chris@0: // "use" and store 'em with the others. Chris@0: foreach ($node->uses as $use) { Chris@0: $this->aliases[strtolower($use->alias)] = Name::concat($node->prefix, $use->name, array( Chris@0: 'startLine' => $node->prefix->getAttribute('startLine'), Chris@0: 'endLine' => $use->name->getAttribute('endLine'), Chris@0: )); Chris@0: } Chris@0: Chris@0: return false; Chris@0: } elseif ($node instanceof Namespace_) { Chris@0: // Start fresh, since we're done with this namespace. Chris@0: $this->lastNamespace = $node->name; Chris@0: $this->lastAliases = $this->aliases; Chris@0: $this->aliases = array(); Chris@0: } else { Chris@0: foreach ($node as $name => $subNode) { Chris@0: if ($subNode instanceof Name) { Chris@0: // Implicitly thunk all aliases. Chris@0: if ($replacement = $this->findAlias($subNode)) { Chris@0: $node->$name = $replacement; Chris@0: } Chris@0: } Chris@0: } Chris@0: Chris@0: return $node; Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * Find class/namespace aliases. Chris@0: * Chris@0: * @param Name $name Chris@0: * Chris@0: * @return FullyQualifiedName|null Chris@0: */ Chris@0: private function findAlias(Name $name) Chris@0: { Chris@0: $that = strtolower($name); Chris@0: foreach ($this->aliases as $alias => $prefix) { Chris@0: if ($that === $alias) { Chris@0: return new FullyQualifiedName($prefix->toString()); Chris@0: } elseif (substr($that, 0, strlen($alias) + 1) === $alias . '\\') { Chris@0: return new FullyQualifiedName($prefix->toString() . substr($name, strlen($alias))); Chris@0: } Chris@0: } Chris@0: } Chris@0: }