mirror of
https://github.com/phabelio/PHP-Parser.git
synced 2025-01-22 05:11:39 +01:00
Make NameResolver add namespacedName subnodes
This commit is contained in:
parent
c44f6375ef
commit
2ec6ae4b03
@ -41,10 +41,20 @@ class PHPParser_NodeVisitor_NameResolver extends PHPParser_NodeVisitorAbstract
|
||||
foreach ($node->implements as &$interface) {
|
||||
$interface = $this->resolveClassName($interface);
|
||||
}
|
||||
|
||||
$this->addNamespacedName($node);
|
||||
} elseif ($node instanceof PHPParser_Node_Stmt_Interface) {
|
||||
foreach ($node->extends as &$interface) {
|
||||
$interface = $this->resolveClassName($interface);
|
||||
}
|
||||
|
||||
$this->addNamespacedName($node);
|
||||
} elseif ($node instanceof PHPParser_Node_Stmt_Function) {
|
||||
$this->addNamespacedName($node);
|
||||
} elseif ($node instanceof PHPParser_Node_Stmt_Const) {
|
||||
foreach ($node->consts as $const) {
|
||||
$this->addNamespacedName($const);
|
||||
}
|
||||
} elseif ($node instanceof PHPParser_Node_Expr_StaticCall
|
||||
|| $node instanceof PHPParser_Node_Expr_StaticPropertyFetch
|
||||
|| $node instanceof PHPParser_Node_Expr_ClassConstFetch
|
||||
@ -106,4 +116,13 @@ class PHPParser_NodeVisitor_NameResolver extends PHPParser_NodeVisitorAbstract
|
||||
|
||||
return new PHPParser_Node_Name_FullyQualified($name->parts);
|
||||
}
|
||||
|
||||
protected function addNamespacedName(PHPParser_Node $node) {
|
||||
if (null !== $this->namespace) {
|
||||
$node->namespacedName = clone $this->namespace;
|
||||
$node->namespacedName->append($node->name);
|
||||
} else {
|
||||
$node->namespacedName = new PHPParser_Node_Name($node->name);
|
||||
}
|
||||
}
|
||||
}
|
@ -2,7 +2,7 @@
|
||||
|
||||
class PHPParser_Tests_NodeVisitor_NameResolverTest extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
public function testResolve() {
|
||||
public function testResolveNames() {
|
||||
$code = <<<EOC
|
||||
<?php
|
||||
|
||||
@ -80,4 +80,35 @@ EOC;
|
||||
|
||||
$this->assertEquals($expectedCode, $prettyPrinter->prettyPrint($stmts));
|
||||
}
|
||||
|
||||
public function testAddNamespacedName() {
|
||||
$code = <<<EOC
|
||||
<?php
|
||||
|
||||
namespace Foo {
|
||||
class A {}
|
||||
function B() {}
|
||||
const C = 'D';
|
||||
}
|
||||
namespace {
|
||||
class A {}
|
||||
function B() {}
|
||||
const C = 'D';
|
||||
}
|
||||
EOC;
|
||||
|
||||
$parser = new PHPParser_Parser;
|
||||
$traverser = new PHPParser_NodeTraverser;
|
||||
$traverser->addVisitor(new PHPParser_NodeVisitor_NameResolver);
|
||||
|
||||
$stmts = $parser->parse(new PHPParser_Lexer($code));
|
||||
$stmts = $traverser->traverse($stmts);
|
||||
|
||||
$this->assertEquals('Foo\\A', (string) $stmts[0]->stmts[0]->namespacedName);
|
||||
$this->assertEquals('Foo\\B', (string) $stmts[0]->stmts[1]->namespacedName);
|
||||
$this->assertEquals('Foo\\C', (string) $stmts[0]->stmts[2]->consts[0]->namespacedName);
|
||||
$this->assertEquals('A', (string) $stmts[1]->stmts[0]->namespacedName);
|
||||
$this->assertEquals('B', (string) $stmts[1]->stmts[1]->namespacedName);
|
||||
$this->assertEquals('C', (string) $stmts[1]->stmts[2]->consts[0]->namespacedName);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user