11<?php
22
3+ declare (strict_types=1 );
4+
35namespace Rector \NodeAnalyzer ;
46
57use PhpParser \Node \Arg ;
68use PhpParser \Node \Expr \CallLike ;
79use PhpParser \Node \Expr \Closure ;
10+ use PHPStan \Reflection \ParameterReflectionWithPhpDocs ;
811use Rector \NodeTypeResolver \PHPStan \ParametersAcceptorSelectorVariantsWrapper ;
912use Rector \PHPStan \ScopeFetcher ;
1013use Rector \Reflection \ReflectionResolver ;
11- use PHPStan \Reflection \ParameterReflectionWithPhpDocs ;
1214
1315class CallLikeExpectsThisBindedClosureArgsAnalyzer
1416{
15- public function __construct (private ReflectionResolver $ reflectionResolver )
16- {
17+ public function __construct (
18+ private readonly ReflectionResolver $ reflectionResolver
19+ ) {
1720 }
1821
22+ /**
23+ * @param CallLike $callLike
24+ * @return Arg[]
25+ * @throws \Rector\Exception\ShouldNotHappenException
26+ */
1927 public function getArgsUsingThisBindedClosure (CallLike $ callLike ): array
2028 {
21- /** @var Arg[] $args */
2229 $ args = [];
2330 $ reflection = $ this ->reflectionResolver ->resolveFunctionLikeReflectionFromCall ($ callLike );
2431
32+ if ($ callLike ->isFirstClassCallable ()) {
33+ return [];
34+ }
35+
2536 if ($ reflection === null ) {
2637 return [];
2738 }
@@ -38,7 +49,6 @@ public function getArgsUsingThisBindedClosure(CallLike $callLike): array
3849 }
3950
4051 if ($ arg ->name ?->name !== null ) {
41- /** @var ParameterReflectionWithPhpDocs $parameter */
4252 foreach ($ parameters as $ parameter ) {
4353 $ hasObjectBinding = (bool ) $ parameter ->getClosureThisType ();
4454 if ($ hasObjectBinding && $ arg ->name ->name === $ parameter ->getName ()) {
@@ -49,8 +59,7 @@ public function getArgsUsingThisBindedClosure(CallLike $callLike): array
4959 continue ;
5060 }
5161
52- if ($ arg ->name ?->name === null ) {
53- /** @var ParameterReflectionWithPhpDocs $parameter */
62+ if (! is_string ($ arg ->name ?->name)) {
5463 $ parameter = $ parameters [$ index ] ?? null ;
5564
5665 if ($ parameter === null ) {
0 commit comments