1616use PHPStan \Reflection \InitializerExprContext ;
1717use PHPStan \Reflection \InitializerExprTypeResolver ;
1818use PHPStan \Reflection \PassedByReference ;
19+ use PHPStan \Reflection \ReflectionProvider \ReflectionProviderProvider ;
1920use PHPStan \ShouldNotHappenException ;
2021use PHPStan \Type \FileTypeMapper ;
2122use PHPStan \Type \MixedType ;
@@ -50,6 +51,7 @@ public function __construct(
5051 private FileTypeMapper $ fileTypeMapper ,
5152 private PhpVersion $ phpVersion ,
5253 private InitializerExprTypeResolver $ initializerExprTypeResolver ,
54+ private ReflectionProviderProvider $ reflectionProviderProvider ,
5355 )
5456 {
5557 $ this ->map = new Php8StubsMap ($ phpVersion ->getVersionId ());
@@ -392,14 +394,21 @@ private function getSignature(
392394 $ phpDocReturnType = $ phpDoc ->getReturnTag ()->getType ();
393395 }
394396 }
397+
398+ $ classReflection = null ;
399+ if ($ className !== null ) {
400+ $ reflectionProvider = $ this ->reflectionProviderProvider ->getReflectionProvider ();
401+ $ classReflection = $ reflectionProvider ->getClass ($ className );
402+ }
403+
395404 $ parameters = [];
396405 $ variadic = false ;
397406 foreach ($ function ->getParams () as $ param ) {
398407 $ name = $ param ->var ;
399408 if (!$ name instanceof Variable || !is_string ($ name ->name )) {
400409 throw new ShouldNotHappenException ();
401410 }
402- $ parameterType = ParserNodeTypeToPHPStanType::resolve ($ param ->type , null );
411+ $ parameterType = ParserNodeTypeToPHPStanType::resolve ($ param ->type , $ classReflection );
403412 $ parameters [] = new ParameterSignature (
404413 $ name ->name ,
405414 $ param ->default !== null || $ param ->variadic ,
@@ -417,7 +426,7 @@ private function getSignature(
417426 $ variadic = $ variadic || $ param ->variadic ;
418427 }
419428
420- $ returnType = ParserNodeTypeToPHPStanType::resolve ($ function ->getReturnType (), null );
429+ $ returnType = ParserNodeTypeToPHPStanType::resolve ($ function ->getReturnType (), $ classReflection );
421430
422431 return new FunctionSignature (
423432 $ parameters ,
0 commit comments