2929use PHPStan \Reflection \ClassReflection ;
3030use PHPStan \Reflection \Native \NativeFunctionReflection ;
3131use PHPStan \Reflection \ReflectionProvider ;
32- use PHPStan \Type \Accessory \AccessoryArrayListType ;
3332use PHPStan \Type \ArrayType ;
3433use PHPStan \Type \Constant \ConstantArrayType ;
3534use PHPStan \Type \Constant \ConstantBooleanType ;
3635use PHPStan \Type \Constant \ConstantStringType ;
3736use PHPStan \Type \ErrorType ;
38- use PHPStan \Type \IntersectionType ;
3937use PHPStan \Type \MixedType ;
4038use PHPStan \Type \NeverType ;
4139use PHPStan \Type \NullType ;
5452use Rector \NodeTypeResolver \Contract \NodeTypeResolverAwareInterface ;
5553use Rector \NodeTypeResolver \Contract \NodeTypeResolverInterface ;
5654use Rector \NodeTypeResolver \Node \AttributeKey ;
57- use Rector \NodeTypeResolver \NodeTypeCorrector \AccessoryNonEmptyArrayTypeCorrector ;
58- use Rector \NodeTypeResolver \NodeTypeCorrector \AccessoryNonEmptyStringTypeCorrector ;
59- use Rector \NodeTypeResolver \NodeTypeCorrector \GenericClassStringTypeCorrector ;
6055use Rector \NodeTypeResolver \PHPStan \ObjectWithoutClassTypeWithParentTypes ;
6156use Rector \Php \PhpVersionProvider ;
6257use Rector \StaticTypeMapper \ValueObject \Type \AliasedObjectType ;
@@ -82,10 +77,8 @@ final class NodeTypeResolver
8277 public function __construct (
8378 private readonly ObjectTypeSpecifier $ objectTypeSpecifier ,
8479 private readonly ClassAnalyzer $ classAnalyzer ,
85- private readonly GenericClassStringTypeCorrector $ genericClassStringTypeCorrector ,
80+ private readonly NodeTypeCorrector $ nodeTypeCorrector ,
8681 private readonly ReflectionProvider $ reflectionProvider ,
87- private readonly AccessoryNonEmptyStringTypeCorrector $ accessoryNonEmptyStringTypeCorrector ,
88- private readonly AccessoryNonEmptyArrayTypeCorrector $ accessoryNonEmptyArrayTypeCorrector ,
8982 private readonly RenamedClassesDataCollector $ renamedClassesDataCollector ,
9083 private readonly NodeNameResolver $ nodeNameResolver ,
9184 private readonly PhpVersionProvider $ phpVersionProvider ,
@@ -203,7 +196,7 @@ public function getType(Node $node): Type
203196 $ type = $ this ->resolveByNodeTypeResolvers ($ node );
204197
205198 if ($ type instanceof Type) {
206- $ type = $ this ->correctType ($ type );
199+ $ type = $ this ->nodeTypeCorrector -> correctType ($ type );
207200
208201 if ($ type instanceof ObjectType) {
209202 $ scope = $ node ->getAttribute (AttributeKey::SCOPE );
@@ -238,7 +231,7 @@ public function getType(Node $node): Type
238231 return new MixedType ();
239232 }
240233
241- $ type = $ this ->correctType ($ scope ->getType ($ node ));
234+ $ type = $ this ->nodeTypeCorrector -> correctType ($ scope ->getType ($ node ));
242235
243236 // hot fix for phpstan not resolving chain method calls
244237 if (! $ node instanceof MethodCall) {
@@ -286,7 +279,7 @@ public function getNativeType(Expr $expr): Type
286279 return new ObjectWithoutClassType ();
287280 }
288281
289- return $ this ->correctType ($ type );
282+ return $ this ->nodeTypeCorrector -> correctType ($ type );
290283 }
291284
292285 return $ this ->resolveNativeUnionType ($ type );
@@ -374,16 +367,6 @@ public function isMethodStaticCallOrClassMethodObjectType(Node $node, ObjectType
374367 return $ classReflection ->hasTraitUse ($ objectType ->getClassName ());
375368 }
376369
377- private function correctType (Type $ type ): Type
378- {
379- $ type = $ this ->accessoryNonEmptyStringTypeCorrector ->correct ($ type );
380- $ type = $ this ->genericClassStringTypeCorrector ->correct ($ type );
381-
382- $ type = $ this ->cleanArrayIntersectionType ($ type );
383-
384- return $ this ->accessoryNonEmptyArrayTypeCorrector ->correct ($ type );
385- }
386-
387370 /**
388371 * Allow pull type from
389372 *
@@ -679,26 +662,4 @@ private function isSubstrOnPHP74(FuncCall $funcCall): bool
679662
680663 return ! $ this ->phpVersionProvider ->isAtLeastPhpVersion (PhpVersion::PHP_80 );
681664 }
682-
683- private function cleanArrayIntersectionType (Type $ type ): Type
684- {
685- if (! $ type instanceof IntersectionType) {
686- return $ type ;
687- }
688-
689- $ cleanTypes = [];
690- foreach ($ type ->getTypes () as $ intersectionType ) {
691- if ($ intersectionType instanceof AccessoryArrayListType) {
692- continue ;
693- }
694-
695- $ cleanTypes [] = $ intersectionType ;
696- }
697-
698- if (count ($ cleanTypes ) === 1 ) {
699- return $ cleanTypes [0 ];
700- }
701-
702- return new IntersectionType ($ cleanTypes );
703- }
704665}
0 commit comments