77use PhpParser \Node \Expr \MethodCall ;
88use PhpParser \Node \Expr \StaticCall ;
99use PHPStan \Analyser \Scope ;
10+ use PHPStan \Reflection \ClassReflection ;
1011use PHPStan \Reflection \Php \PhpMethodReflection ;
11- use PHPStan \Reflection \ReflectionProvider ;
1212use PHPStan \Type \MixedType ;
1313use PHPStan \Type \Type ;
1414use Rector \NodeNameResolver \NodeNameResolver ;
@@ -27,19 +27,13 @@ final class StaticCallMethodCallTypeResolver implements NodeTypeResolverInterfac
2727 * @var \Rector\NodeNameResolver\NodeNameResolver
2828 */
2929 private $ nodeNameResolver ;
30- /**
31- * @readonly
32- * @var \PHPStan\Reflection\ReflectionProvider
33- */
34- private $ reflectionProvider ;
3530 /**
3631 * @var \Rector\NodeTypeResolver\NodeTypeResolver
3732 */
3833 private $ nodeTypeResolver ;
39- public function __construct (NodeNameResolver $ nodeNameResolver, ReflectionProvider $ reflectionProvider )
34+ public function __construct (NodeNameResolver $ nodeNameResolver )
4035 {
4136 $ this ->nodeNameResolver = $ nodeNameResolver ;
42- $ this ->reflectionProvider = $ reflectionProvider ;
4337 }
4438 /**
4539 * @required
@@ -78,8 +72,8 @@ public function resolve(Node $node) : Type
7872 } else {
7973 $ callerType = $ this ->nodeTypeResolver ->getType ($ node ->class );
8074 }
81- foreach ($ callerType ->getReferencedClasses () as $ referencedClass ) {
82- $ classMethodReturnType = $ this ->resolveClassMethodReturnType ($ referencedClass , $ node , $ methodName , $ scope );
75+ foreach ($ callerType ->getObjectClassReflections () as $ classReflection ) {
76+ $ classMethodReturnType = $ this ->resolveClassMethodReturnType ($ classReflection , $ node , $ methodName , $ scope );
8377 if (!$ classMethodReturnType instanceof MixedType) {
8478 return $ classMethodReturnType ;
8579 }
@@ -89,12 +83,8 @@ public function resolve(Node $node) : Type
8983 /**
9084 * @param \PhpParser\Node\Expr\StaticCall|\PhpParser\Node\Expr\MethodCall $node
9185 */
92- private function resolveClassMethodReturnType (string $ referencedClass , $ node , string $ methodName , Scope $ scope ) : Type
86+ private function resolveClassMethodReturnType (ClassReflection $ classReflection , $ node , string $ methodName , Scope $ scope ) : Type
9387 {
94- if (!$ this ->reflectionProvider ->hasClass ($ referencedClass )) {
95- return new MixedType ();
96- }
97- $ classReflection = $ this ->reflectionProvider ->getClass ($ referencedClass );
9888 foreach ($ classReflection ->getAncestors () as $ ancestorClassReflection ) {
9989 if (!$ ancestorClassReflection ->hasMethod ($ methodName )) {
10090 continue ;
0 commit comments