diff --git a/src/PhpParser/AstResolver.php b/src/PhpParser/AstResolver.php index 5c4cf0e4dab..b6d2a03eb01 100644 --- a/src/PhpParser/AstResolver.php +++ b/src/PhpParser/AstResolver.php @@ -246,16 +246,16 @@ function (Node $node) use ($desiredClassName, $desiredPropertyName, &$propertyNo return true; } - return false; + if (! $node instanceof Class_) { + return false; + } + + $propertyNode = $this->findPromotedPropertyByName($node, $desiredPropertyName); + return $propertyNode instanceof Param; } ); - if ($propertyNode instanceof Property) { - return $propertyNode; - } - - // promoted property - return $this->findPromotedPropertyByName($nodes, $desiredClassName, $desiredPropertyName); + return $propertyNode; } /** @@ -315,48 +315,25 @@ function (Node $node) use ($methodName): bool { return $classMethod; } - /** - * @param Stmt[] $stmts - */ private function findPromotedPropertyByName( - array $stmts, - string $desiredClassName, + Class_ $class, string $desiredPropertyName ): ?Param { - /** @var Param|null $paramNode */ - $paramNode = null; - - $this->betterNodeFinder->findFirst( - $stmts, - function (Node $node) use ($desiredClassName, $desiredPropertyName, &$paramNode): bool { - if (! $node instanceof Class_) { - return false; - } - - if (! $this->nodeNameResolver->isName($node, $desiredClassName)) { - return false; - } - - $constructClassMethod = $node->getMethod(MethodName::CONSTRUCT); - if (! $constructClassMethod instanceof ClassMethod) { - return false; - } - - foreach ($constructClassMethod->getParams() as $param) { - if (! $param->isPromoted()) { - continue; - } + $constructClassMethod = $class->getMethod(MethodName::CONSTRUCT); + if (! $constructClassMethod instanceof ClassMethod) { + return null; + } - if ($this->nodeNameResolver->isName($param, $desiredPropertyName)) { - $paramNode = $param; - return true; - } - } + foreach ($constructClassMethod->getParams() as $param) { + if (! $param->isPromoted()) { + continue; + } - return false; + if ($this->nodeNameResolver->isName($param, $desiredPropertyName)) { + return $param; } - ); + } - return $paramNode; + return null; } }