diff --git a/packages/NodeTypeResolver/PHPStan/ParametersAcceptorSelectorVariantsWrapper.php b/packages/NodeTypeResolver/PHPStan/ParametersAcceptorSelectorVariantsWrapper.php index 6428087eeea..ac82798e99c 100644 --- a/packages/NodeTypeResolver/PHPStan/ParametersAcceptorSelectorVariantsWrapper.php +++ b/packages/NodeTypeResolver/PHPStan/ParametersAcceptorSelectorVariantsWrapper.php @@ -4,7 +4,7 @@ namespace Rector\NodeTypeResolver\PHPStan; -use PhpParser\Node\Arg; +use PhpParser\Node\Expr\CallLike; use PHPStan\Analyser\Scope; use PHPStan\Reflection\FunctionReflection; use PHPStan\Reflection\MethodReflection; @@ -13,18 +13,15 @@ final class ParametersAcceptorSelectorVariantsWrapper { - /** - * @param Arg[] $args - */ public static function select( FunctionReflection|MethodReflection $reflection, - array $args, + CallLike $callLike, Scope $scope ): ParametersAcceptor { $variants = $reflection->getVariants(); return count($variants) > 1 - ? ParametersAcceptorSelector::selectFromArgs($scope, $args, $variants) + ? ParametersAcceptorSelector::selectFromArgs($scope, $callLike->getArgs(), $variants) : ParametersAcceptorSelector::selectSingle($variants); } } diff --git a/packages/ReadWrite/Guard/VariableToConstantGuard.php b/packages/ReadWrite/Guard/VariableToConstantGuard.php index 48ef3c551ad..263a4a4ae87 100644 --- a/packages/ReadWrite/Guard/VariableToConstantGuard.php +++ b/packages/ReadWrite/Guard/VariableToConstantGuard.php @@ -5,6 +5,7 @@ namespace Rector\ReadWrite\Guard; use PhpParser\Node\Arg; +use PhpParser\Node\Expr\CallLike; use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Name; use PHPStan\Analyser\Scope; @@ -55,9 +56,14 @@ public function isReadArg(Arg $arg): bool return true; } + $parentArg = $arg->getAttribute(AttributeKey::PARENT_NODE); + if (! $parentArg instanceof CallLike) { + return true; + } + $referenceParametersPositions = $this->resolveFunctionReferencePositions( $functionReflection, - [$arg], + $parentArg, $argScope ); if ($referenceParametersPositions === []) { @@ -70,12 +76,11 @@ public function isReadArg(Arg $arg): bool } /** - * @param Arg[] $args * @return int[] */ private function resolveFunctionReferencePositions( FunctionReflection $functionReflection, - array $args, + CallLike $callLike, Scope $scope ): array { if (isset($this->referencePositionsByFunctionName[$functionReflection->getName()])) { @@ -86,7 +91,7 @@ private function resolveFunctionReferencePositions( $parametersAcceptor = ParametersAcceptorSelectorVariantsWrapper::select( $functionReflection, - $args, + $callLike, $scope ); foreach ($parametersAcceptor->getParameters() as $position => $parameterReflection) { diff --git a/rules/Php81/Rector/FuncCall/NullToStrictStringFuncCallArgRector.php b/rules/Php81/Rector/FuncCall/NullToStrictStringFuncCallArgRector.php index dff37566d3e..54bec9cbe4a 100644 --- a/rules/Php81/Rector/FuncCall/NullToStrictStringFuncCallArgRector.php +++ b/rules/Php81/Rector/FuncCall/NullToStrictStringFuncCallArgRector.php @@ -476,7 +476,7 @@ private function resolveOriginalPositions(FuncCall $funcCall): array $parametersAcceptor = ParametersAcceptorSelectorVariantsWrapper::select( $functionReflection, - $funcCall->getArgs(), + $funcCall, $scope ); $functionName = $this->nodeNameResolver->getName($funcCall); diff --git a/rules/TypeDeclaration/NodeTypeAnalyzer/CallTypeAnalyzer.php b/rules/TypeDeclaration/NodeTypeAnalyzer/CallTypeAnalyzer.php index eab958b4378..a45395866fb 100644 --- a/rules/TypeDeclaration/NodeTypeAnalyzer/CallTypeAnalyzer.php +++ b/rules/TypeDeclaration/NodeTypeAnalyzer/CallTypeAnalyzer.php @@ -35,11 +35,7 @@ public function resolveMethodParameterTypes(MethodCall | StaticCall $call): arra return []; } - $parametersAcceptor = ParametersAcceptorSelectorVariantsWrapper::select( - $methodReflection, - $call->getArgs(), - $scope - ); + $parametersAcceptor = ParametersAcceptorSelectorVariantsWrapper::select($methodReflection, $call, $scope); $parameterTypes = []; diff --git a/rules/TypeDeclaration/TypeAnalyzer/AlwaysStrictScalarExprAnalyzer.php b/rules/TypeDeclaration/TypeAnalyzer/AlwaysStrictScalarExprAnalyzer.php index 6033aa82b49..c5a00a06221 100644 --- a/rules/TypeDeclaration/TypeAnalyzer/AlwaysStrictScalarExprAnalyzer.php +++ b/rules/TypeDeclaration/TypeAnalyzer/AlwaysStrictScalarExprAnalyzer.php @@ -106,7 +106,7 @@ private function resolveFuncCallType(FuncCall $funcCall): ?Type $parametersAcceptor = ParametersAcceptorSelectorVariantsWrapper::select( $functionReflection, - $funcCall->getArgs(), + $funcCall, $scope ); diff --git a/src/NodeManipulator/PropertyManipulator.php b/src/NodeManipulator/PropertyManipulator.php index 3eaf201f5d6..39240aba227 100644 --- a/src/NodeManipulator/PropertyManipulator.php +++ b/src/NodeManipulator/PropertyManipulator.php @@ -314,7 +314,7 @@ private function isFoundByRefParam(MethodCall | StaticCall $node): bool $parametersAcceptor = ParametersAcceptorSelectorVariantsWrapper::select( $functionLikeReflection, - $node->getArgs(), + $node, $scope ); foreach ($parametersAcceptor->getParameters() as $parameterReflection) {