|
4 | 4 |
|
5 | 5 | namespace Rector\PhpParser\NodeVisitor; |
6 | 6 |
|
| 7 | +use PhpParser\Node\Arg; |
7 | 8 | use PhpParser\Node; |
8 | 9 | use PhpParser\Node\Expr\ArrowFunction; |
9 | 10 | use PhpParser\Node\Expr\CallLike; |
@@ -37,32 +38,38 @@ public function enterNode(Node $node): ?Node |
37 | 38 | return null; |
38 | 39 | } |
39 | 40 |
|
40 | | - if ($node->getArgs() === []) { |
| 41 | + $args = $node->getArgs(); |
| 42 | + if ($args === []) { |
41 | 43 | return null; |
42 | 44 | } |
43 | 45 |
|
44 | | - $methodReflection = $this->reflectionResolver->resolveFunctionLikeReflectionFromCall($node); |
| 46 | + $filteredArgs = array_filter( |
| 47 | + $args, |
| 48 | + fn (Arg $arg): bool => $arg->value instanceof Closure || $arg->value instanceof ArrowFunction |
| 49 | + ); |
45 | 50 |
|
46 | | - foreach ($node->getArgs() as $arg) { |
47 | | - if (! $arg->value instanceof Closure && ! $arg->value instanceof ArrowFunction) { |
48 | | - continue; |
49 | | - } |
| 51 | + if ($filteredArgs === []) { |
| 52 | + return null; |
| 53 | + } |
| 54 | + |
| 55 | + $methodReflection = $this->reflectionResolver->resolveFunctionLikeReflectionFromCall($node); |
50 | 56 |
|
| 57 | + foreach ($filteredArgs as $filteredArg) { |
51 | 58 | if ($methodReflection instanceof NativeFunctionReflection) { |
52 | 59 | $parametersAcceptors = ParametersAcceptorSelector::combineAcceptors( |
53 | 60 | $methodReflection->getVariants() |
54 | 61 | ); |
55 | 62 |
|
56 | 63 | foreach ($parametersAcceptors->getParameters() as $extendedParameterReflection) { |
57 | 64 | if ($extendedParameterReflection->getType() instanceof CallableType && $extendedParameterReflection->getType() ->isVariadic()) { |
58 | | - $arg->value->setAttribute(AttributeKey::HAS_CLOSURE_WITH_VARIADIC_ARGS, true); |
| 65 | + $filteredArg->value->setAttribute(AttributeKey::HAS_CLOSURE_WITH_VARIADIC_ARGS, true); |
59 | 66 | } |
60 | 67 | } |
61 | 68 |
|
62 | 69 | return null; |
63 | 70 | } |
64 | 71 |
|
65 | | - $arg->value->setAttribute(AttributeKey::HAS_CLOSURE_WITH_VARIADIC_ARGS, true); |
| 72 | + $filteredArg->value->setAttribute(AttributeKey::HAS_CLOSURE_WITH_VARIADIC_ARGS, true); |
66 | 73 | } |
67 | 74 |
|
68 | 75 | return null; |
|
0 commit comments