|
31 | 31 | use Rector\Core\ValueObject\Application\File; |
32 | 32 | use Rector\Core\ValueObject\MethodName; |
33 | 33 | use Rector\NodeNameResolver\NodeNameResolver; |
| 34 | +use Rector\NodeTypeResolver\Node\AttributeKey; |
34 | 35 | use Rector\NodeTypeResolver\NodeScopeAndMetadataDecorator; |
35 | 36 | use Rector\NodeTypeResolver\NodeTypeResolver; |
36 | 37 | use Rector\PhpDocParser\PhpParser\SmartPhpParser; |
@@ -123,14 +124,21 @@ public function resolveClassMethodFromMethodReflection(MethodReflection $methodR |
123 | 124 | if ($nodes === null) { |
124 | 125 | return null; |
125 | 126 | } |
126 | | - /** @var ClassLike|null $classLike */ |
127 | | - $classLike = $this->betterNodeFinder->findFirst($nodes, function (Node $node) use($classLikeName, $methodName) : bool { |
128 | | - return $node instanceof ClassLike && $this->nodeNameResolver->isName($node, $classLikeName) && $node->getMethod($methodName) instanceof ClassMethod; |
| 127 | + /** @var ClassMethod|null $classMethod */ |
| 128 | + $classMethod = $this->betterNodeFinder->findFirst($nodes, function (Node $node) use($classLikeName, $methodName) : bool { |
| 129 | + if (!$node instanceof ClassMethod) { |
| 130 | + return \false; |
| 131 | + } |
| 132 | + $parentNode = $node->getAttribute(AttributeKey::PARENT_NODE); |
| 133 | + if (!$parentNode instanceof ClassLike) { |
| 134 | + return \false; |
| 135 | + } |
| 136 | + if (!$this->nodeNameResolver->isName($parentNode, $classLikeName)) { |
| 137 | + return \false; |
| 138 | + } |
| 139 | + return $parentNode->getMethod($methodName) === $node; |
129 | 140 | }); |
130 | | - if ($classLike instanceof ClassLike && ($method = $classLike->getMethod($methodName)) instanceof ClassMethod) { |
131 | | - return $method; |
132 | | - } |
133 | | - return null; |
| 141 | + return $classMethod; |
134 | 142 | } |
135 | 143 | /** |
136 | 144 | * @param \PhpParser\Node\Expr\FuncCall|\PhpParser\Node\Expr\StaticCall|\PhpParser\Node\Expr\MethodCall $call |
@@ -244,10 +252,21 @@ public function resolvePropertyFromPropertyReflection(PhpPropertyReflection $php |
244 | 252 | return null; |
245 | 253 | } |
246 | 254 | $nativeReflectionProperty = $phpPropertyReflection->getNativeReflection(); |
| 255 | + $desiredClassName = $classReflection->getName(); |
247 | 256 | $desiredPropertyName = $nativeReflectionProperty->getName(); |
248 | 257 | /** @var Property|null $property */ |
249 | | - $property = $this->betterNodeFinder->findFirst($nodes, function (Node $node) use($desiredPropertyName) : bool { |
250 | | - return $node instanceof Property && $this->nodeNameResolver->isName($node, $desiredPropertyName); |
| 258 | + $property = $this->betterNodeFinder->findFirst($nodes, function (Node $node) use($desiredClassName, $desiredPropertyName) : bool { |
| 259 | + if (!$node instanceof Property) { |
| 260 | + return \false; |
| 261 | + } |
| 262 | + $parentNode = $node->getAttribute(AttributeKey::PARENT_NODE); |
| 263 | + if (!$parentNode instanceof ClassLike) { |
| 264 | + return \false; |
| 265 | + } |
| 266 | + if (!$this->nodeNameResolver->isName($parentNode, $desiredClassName)) { |
| 267 | + return \false; |
| 268 | + } |
| 269 | + return $parentNode->getProperty($desiredPropertyName) === $node; |
251 | 270 | }); |
252 | 271 | if ($property instanceof Property) { |
253 | 272 | return $property; |
|
0 commit comments