1111use PhpParser \Node \Expr \MethodCall ;
1212use PhpParser \Node \Expr \New_ ;
1313use PhpParser \Node \Expr \StaticCall ;
14- use PhpParser \Node \Expr \Variable ;
1514use PhpParser \Node \Identifier ;
1615use PhpParser \Node \Name ;
1716use PhpParser \Node \Stmt \ClassMethod ;
1817use PHPStan \Reflection \ClassReflection ;
18+ use PHPStan \Reflection \FunctionReflection ;
19+ use PHPStan \Reflection \MethodReflection ;
20+ use PHPStan \Reflection \ParametersAcceptorSelector ;
1921use Rector \Arguments \Contract \ReplaceArgumentDefaultValueInterface ;
2022use Rector \Arguments \ValueObject \ReplaceArgumentDefaultValue ;
2123use Rector \NodeAnalyzer \ArgsAnalyzer ;
2224use Rector \NodeTypeResolver \NodeTypeResolver ;
23- use Rector \PhpParser \AstResolver ;
2425use Rector \PhpParser \Node \NodeFactory ;
2526use Rector \PhpParser \Node \Value \ValueResolver ;
2627use Rector \Reflection \ReflectionResolver ;
@@ -39,10 +40,6 @@ final class ArgumentDefaultValueReplacer
3940 * @readonly
4041 */
4142 private ArgsAnalyzer $ argsAnalyzer ;
42- /**
43- * @readonly
44- */
45- private AstResolver $ astResolver ;
4643 /**
4744 * @readonly
4845 */
@@ -51,12 +48,11 @@ final class ArgumentDefaultValueReplacer
5148 * @readonly
5249 */
5350 private ReflectionResolver $ reflectionResolver ;
54- public function __construct (NodeFactory $ nodeFactory , ValueResolver $ valueResolver , ArgsAnalyzer $ argsAnalyzer , AstResolver $ astResolver , NodeTypeResolver $ nodeTypeResolver , ReflectionResolver $ reflectionResolver )
51+ public function __construct (NodeFactory $ nodeFactory , ValueResolver $ valueResolver , ArgsAnalyzer $ argsAnalyzer , NodeTypeResolver $ nodeTypeResolver , ReflectionResolver $ reflectionResolver )
5552 {
5653 $ this ->nodeFactory = $ nodeFactory ;
5754 $ this ->valueResolver = $ valueResolver ;
5855 $ this ->argsAnalyzer = $ argsAnalyzer ;
59- $ this ->astResolver = $ astResolver ;
6056 $ this ->nodeTypeResolver = $ nodeTypeResolver ;
6157 $ this ->reflectionResolver = $ reflectionResolver ;
6258 }
@@ -128,18 +124,15 @@ private function processArgs($expr, ReplaceArgumentDefaultValueInterface $replac
128124 // if it is, we use the position of the named argyment as the position to replace
129125 // if it is not, we cannot replace it
130126 if ($ firstNamedArgPosition !== null && $ position >= $ firstNamedArgPosition ) {
131- $ call = $ this ->astResolver -> resolveClassMethodOrFunctionFromCall ($ expr );
132- if ($ call === null ) {
127+ $ reflection = $ this ->reflectionResolver -> resolveFunctionLikeReflectionFromCall ($ expr );
128+ if (! $ reflection instanceof MethodReflection && ! $ reflection instanceof FunctionReflection ) {
133129 return null ;
134130 }
135- $ paramName = null ;
136- $ variable = $ call ->params [$ position ]->var ;
137- if ($ variable instanceof Variable) {
138- $ paramName = $ variable ->name ;
139- }
131+ $ parametersAcceptor = ParametersAcceptorSelector::combineAcceptors ($ reflection ->getVariants ());
132+ $ parameterReflection = $ parametersAcceptor ->getParameters ()[$ position ] ?? null ;
140133 $ newPosition = -1 ;
141- if (is_string ( $ paramName ) ) {
142- $ newPosition = $ this ->argsAnalyzer ->resolveArgPosition ($ arguments , $ paramName , $ newPosition );
134+ if ($ parameterReflection !== null ) {
135+ $ newPosition = $ this ->argsAnalyzer ->resolveArgPosition ($ arguments , $ parameterReflection -> getName () , $ newPosition );
143136 }
144137 if ($ newPosition === -1 ) {
145138 return null ;
0 commit comments