1212use PhpParser \Node \Expr \MethodCall ;
1313use PhpParser \Node \Expr \StaticCall ;
1414use PhpParser \Node \Expr \Variable ;
15- use PhpParser \Node \FunctionLike ;
1615use PhpParser \Node \Identifier ;
1716use PhpParser \Node \Param ;
1817use PhpParser \NodeVisitor ;
1918use PHPStan \Analyser \Scope ;
19+ use PHPStan \Reflection \FunctionReflection ;
2020use PHPStan \Reflection \MethodReflection ;
2121use Rector \NodeNameResolver \NodeNameResolver ;
2222use Rector \NodeTypeResolver \Node \AttributeKey ;
2323use Rector \NodeTypeResolver \PHPStan \ParametersAcceptorSelectorVariantsWrapper ;
2424use Rector \PhpDocParser \NodeTraverser \SimpleCallableNodeTraverser ;
25- use Rector \PhpParser \AstResolver ;
2625use Rector \PhpParser \Comparing \NodeComparator ;
2726use Rector \Reflection \ReflectionResolver ;
2827final class ArrowFunctionAndClosureFirstClassCallableGuard
@@ -31,10 +30,6 @@ final class ArrowFunctionAndClosureFirstClassCallableGuard
3130 * @readonly
3231 */
3332 private ReflectionResolver $ reflectionResolver ;
34- /**
35- * @readonly
36- */
37- private AstResolver $ astResolver ;
3833 /**
3934 * @readonly
4035 */
@@ -43,10 +38,9 @@ final class ArrowFunctionAndClosureFirstClassCallableGuard
4338 * @readonly
4439 */
4540 private NodeNameResolver $ nodeNameResolver ;
46- public function __construct (ReflectionResolver $ reflectionResolver , AstResolver $ astResolver , NodeComparator $ nodeComparator , NodeNameResolver $ nodeNameResolver )
41+ public function __construct (ReflectionResolver $ reflectionResolver , NodeComparator $ nodeComparator , NodeNameResolver $ nodeNameResolver )
4742 {
4843 $ this ->reflectionResolver = $ reflectionResolver ;
49- $ this ->astResolver = $ astResolver ;
5044 $ this ->nodeComparator = $ nodeComparator ;
5145 $ this ->nodeNameResolver = $ nodeNameResolver ;
5246 }
@@ -105,11 +99,20 @@ public function shouldSkip($arrowFunctionOrClosure, $callLike, Scope $scope): bo
10599 return \true;
106100 }
107101 }
108- $ functionLike = $ this ->astResolver ->resolveClassMethodOrFunctionFromCall ($ callLike );
109- if (!$ functionLike instanceof FunctionLike) {
102+ if ($ this ->isBuiltinReflection ($ reflection )) {
110103 return \false;
111104 }
112- return count ($ functionLike ->getParams ()) > 1 ;
105+ return count ($ parameters ) > 1 ;
106+ }
107+ /**
108+ * @param \PHPStan\Reflection\FunctionReflection|\PHPStan\Reflection\MethodReflection $reflection
109+ */
110+ private function isBuiltinReflection ($ reflection ): bool
111+ {
112+ if ($ reflection instanceof FunctionReflection) {
113+ return $ reflection ->isBuiltin ();
114+ }
115+ return $ reflection ->getDeclaringClass ()->isBuiltin ();
113116 }
114117 /**
115118 * @param Param[] $params
0 commit comments