diff --git a/packages/NodeTypeResolver/tests/PerNodeTypeResolver/PropertyAccessTypeResolver/NestedPropertyTest.php b/packages/NodeTypeResolver/tests/PerNodeTypeResolver/PropertyAccessTypeResolver/NestedPropertyTest.php deleted file mode 100644 index c2de86d5dc2..00000000000 --- a/packages/NodeTypeResolver/tests/PerNodeTypeResolver/PropertyAccessTypeResolver/NestedPropertyTest.php +++ /dev/null @@ -1,21 +0,0 @@ -getNodesForFileOfType(__DIR__ . '/Source/DocBlockDefinedProperty.inc', Property::class); - - $this->assertSame( - ['SomeNamespace\PropertyType'], - $propertyNodes[0]->getAttribute(Attribute::TYPES) - ); - } -} - diff --git a/packages/NodeTypeResolver/tests/PerNodeTypeResolver/PropertyAccessTypeResolver/Source/NestedProperty.php.inc b/packages/NodeTypeResolver/tests/PerNodeTypeResolver/PropertyFetchTypeResolver/Source/NestedProperty.php.inc similarity index 100% rename from packages/NodeTypeResolver/tests/PerNodeTypeResolver/PropertyAccessTypeResolver/Source/NestedProperty.php.inc rename to packages/NodeTypeResolver/tests/PerNodeTypeResolver/PropertyFetchTypeResolver/Source/NestedProperty.php.inc diff --git a/packages/NodeTypeResolver/tests/PerNodeTypeResolver/PropertyFetchTypeResolver/Test.php b/packages/NodeTypeResolver/tests/PerNodeTypeResolver/PropertyFetchTypeResolver/Test.php new file mode 100644 index 00000000000..993289c385a --- /dev/null +++ b/packages/NodeTypeResolver/tests/PerNodeTypeResolver/PropertyFetchTypeResolver/Test.php @@ -0,0 +1,44 @@ +getNodesForFileOfType( + __DIR__ . '/Source/NestedProperty.php.inc', + PropertyFetch::class + ); + + $this->assertCount(4, $propertyFetchNodes); + + $this->assertSame('name', $propertyFetchNodes[0]->name->toString()); + $this->assertSame( + null, // should be nothing, is string + $propertyFetchNodes[0]->getAttribute(Attribute::TYPES) + ); + + $this->assertSame('props', $propertyFetchNodes[1]->name->toString()); + $this->assertSame( + null, // should be something + $propertyFetchNodes[1]->getAttribute(Attribute::TYPES) + ); + + $this->assertSame('node', $propertyFetchNodes[2]->name->toString()); + $this->assertSame( + ['PhpParser\Node\Stmt\Property'], + $propertyFetchNodes[2]->getAttribute(Attribute::TYPES) + ); + + $this->assertSame('positionInNode', $propertyFetchNodes[3]->name->toString()); + $this->assertSame( + null, // should be null + $propertyFetchNodes[3]->getAttribute(Attribute::TYPES) + ); + } +} diff --git a/packages/NodeTypeResolver/tests/PerNodeTypeResolver/PropertyTypeResolver/Test.php b/packages/NodeTypeResolver/tests/PerNodeTypeResolver/PropertyTypeResolver/Test.php index 7f8a53c0102..a95007b2d34 100644 --- a/packages/NodeTypeResolver/tests/PerNodeTypeResolver/PropertyTypeResolver/Test.php +++ b/packages/NodeTypeResolver/tests/PerNodeTypeResolver/PropertyTypeResolver/Test.php @@ -10,7 +10,10 @@ final class Test extends AbstractNodeTypeResolverTest { public function testDocBlock(): void { - $propertyNodes = $this->getNodesForFileOfType(__DIR__ . '/Source/DocBlockDefinedProperty.php.inc', Property::class); + $propertyNodes = $this->getNodesForFileOfType( + __DIR__ . '/Source/DocBlockDefinedProperty.php.inc', + Property::class + ); $this->assertSame( ['SomeNamespace\PropertyType'], @@ -25,7 +28,6 @@ final class Test extends AbstractNodeTypeResolverTest Property::class ); - // @todo: add propertyFetch test $this->assertSame( ['SomeNamespace\PropertyType'], $propertyNodes[0]->getAttribute(Attribute::TYPES) diff --git a/packages/ReflectionDocBlock/src/NodeAnalyzer/NamespaceAnalyzer.php b/packages/ReflectionDocBlock/src/NodeAnalyzer/NamespaceAnalyzer.php index da3ffdd7431..78bf8d8b3b0 100644 --- a/packages/ReflectionDocBlock/src/NodeAnalyzer/NamespaceAnalyzer.php +++ b/packages/ReflectionDocBlock/src/NodeAnalyzer/NamespaceAnalyzer.php @@ -38,12 +38,18 @@ final class NamespaceAnalyzer /** @var Use_[] $useNodes */ $useNodes = (array) $node->getAttribute(Attribute::USE_NODES); foreach ($useNodes as $useNode) { - $nodeUseName = $useNode->uses[0]->name->toString(); + $useUseNode = $useNode->uses[0]; + $nodeUseName = $useUseNode->name->toString(); foreach ($types as $type) { if (Strings::endsWith($nodeUseName, '\\' . $type)) { return $nodeUseName; } + + // alias + if ($useUseNode->getAlias() && $type === $useUseNode->getAlias()->toString()) { + return $nodeUseName; + } } }