Skip to content

Commit 346f28f

Browse files
authored
Merge pull request #102 from marcosh/bug/anonymous-classes
expose invalid Fqsen bug and fix it
2 parents 079ed49 + da7bc6c commit 346f28f

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

src/phpDocumentor/Reflection/NodeVisitor/ElementNameResolver.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use PhpParser\Node\Stmt\Namespace_;
2626
use PhpParser\Node\Stmt\PropertyProperty;
2727
use PhpParser\Node\Stmt\Trait_;
28+
use PhpParser\NodeTraverser;
2829
use PhpParser\NodeVisitorAbstract;
2930

3031
final class ElementNameResolver extends NodeVisitorAbstract
@@ -81,6 +82,10 @@ public function enterNode(Node $node)
8182
case Class_::class:
8283
case Trait_::class:
8384
case Interface_::class:
85+
if (is_null($node->name)) {
86+
return NodeTraverser::DONT_TRAVERSE_CHILDREN;
87+
}
88+
8489
$this->parts->push((string)$node->name);
8590
$node->fqsen = new Fqsen($this->buildName());
8691
break;

tests/unit/phpDocumentor/Reflection/NodeVisitor/ElementNameResolverTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use PhpParser\Node\Stmt\ClassConst;
2121
use PhpParser\Node\Stmt\Function_;
2222
use PhpParser\Node\Stmt\Namespace_;
23+
use PhpParser\NodeTraverser;
2324

2425
/**
2526
* Testcase for FqsenResolver
@@ -61,6 +62,21 @@ public function testWithClass()
6162
$this->assertEquals('\myClass', (string)$class->fqsen);
6263
}
6364

65+
/**
66+
* If anonymous classes were processed, we would obtain a
67+
* InvalidArgumentException for an invalid Fqsen.
68+
*
69+
* @covers ::enterNode
70+
*/
71+
public function testDoesNotEnterAnonymousClass()
72+
{
73+
$class = new Class_(null);
74+
$this->assertEquals(
75+
NodeTraverser::DONT_TRAVERSE_CHILDREN,
76+
$this->fixture->enterNode($class)
77+
);
78+
}
79+
6480
/**
6581
* @covers ::enterNode
6682
*/

0 commit comments

Comments
 (0)