/** * @param \PhpParser\Node $node */ public function leaveNode(\PhpParser\Node $node) { array_pop($this->contextStack); if ($this->isContainerNode(end($this->contextStack)) || count($this->contextStack) === 0) { // we are on the first level if ($node instanceof Node\Stmt\Class_) { if (count($this->contextStack) > 0) { if (end($this->contextStack)->getType() == 'Stmt_Namespace') { $currentNamespaceName = NodeConverter::getValueFromNode(end($this->contextStack)); $this->currentClassObject->setNamespaceName($currentNamespaceName); $this->currentNamespace->addClass($this->currentClassObject); } } else { $this->fileObject->addClass($this->currentClassObject); $this->currentClassObject = null; $this->currentContainer = $this->fileObject; } } elseif ($node instanceof Node\Stmt\Namespace_) { if (null !== $this->currentNamespace) { $this->fileObject->addNamespace($this->currentNamespace); $this->currentNamespace = null; $this->currentContainer = $this->fileObject; } else { //TODO: find how this could happen } } elseif ($node instanceof Node\Stmt\TraitUse) { if ($this->currentClassObject) { $this->currentClassObject->addUseTraitStatement($node); } } elseif ($node instanceof Node\Stmt\Use_) { $this->currentContainer->addAliasDeclaration(NodeConverter::convertUseAliasStatementNodeToArray($node)); } elseif ($node instanceof Node\Stmt\ClassConst) { $constants = NodeConverter::convertClassConstantNodeToArray($node); foreach ($constants as $constant) { $this->currentContainer->setConstant($constant['name'], $constant['value']); } } elseif ($node instanceof Node\Stmt\ClassMethod) { $this->onFirstLevel = true; $method = $this->classFactory->buildClassMethodObject($node); $this->currentClassObject->addMethod($method); } elseif ($node instanceof Node\Stmt\Property) { $property = $this->classFactory->buildPropertyObject($node); $this->currentClassObject->addProperty($property); } elseif ($node instanceof Node\Stmt\Function_) { $this->onFirstLevel = true; $function = $this->classFactory->buildFunctionObject($node); $this->currentContainer->addFunction($function); } elseif (!$node instanceof Node\Name) { // any other nodes (except the name node of the current container node) // go into statements container if ($this->currentContainer->getFirstClass() === false) { $this->currentContainer->addPreClassStatements($node); } else { $this->currentContainer->addPostClassStatements($node); } } } }
/** * @param \EBT\ExtensionBuilder\Domain\Model\NamespaceObject $nameSpace */ public function buildNamespaceNode(\EBT\ExtensionBuilder\Domain\Model\NamespaceObject $nameSpace) { return new \PhpParser\Node\Stmt\Namespace_(new \PhpParser\Node\Name($nameSpace->getName())); }
/** * @param \EBT\ExtensionBuilder\Domain\Model\NamespaceObject $nameSpace */ public function buildNamespaceNode(\EBT\ExtensionBuilder\Domain\Model\NamespaceObject $nameSpace) { return new \PHPParser_Node_Stmt_Namespace(new \PHPParser_Node_Name($nameSpace->getName())); }