2626use PHPStan \PhpDocParser \Ast \Type \ThisTypeNode ;
2727use PHPStan \PhpDocParser \Ast \Type \TypeNode ;
2828use PHPStan \PhpDocParser \Ast \Type \UnionTypeNode ;
29- use Symfony \Component \PropertyInfo \PhpStan \NameScope ;
3029use Symfony \Component \PropertyInfo \Type ;
30+ use Symfony \Component \TypeInfo \TypeContext \TypeContext ;
3131
3232/**
3333 * Transforms a php doc tag value to a {@link Type} instance.
@@ -43,10 +43,10 @@ final class PhpStanTypeHelper
4343 *
4444 * @return Type[]
4545 */
46- public function getTypes (PhpDocTagValueNode $ node , NameScope $ nameScope ): array
46+ public function getTypes (PhpDocTagValueNode $ node , TypeContext $ typeContext ): array
4747 {
4848 if ($ node instanceof ParamTagValueNode || $ node instanceof ReturnTagValueNode || $ node instanceof VarTagValueNode) {
49- return $ this ->compressNullableType ($ this ->extractTypes ($ node ->type , $ nameScope ));
49+ return $ this ->compressNullableType ($ this ->extractTypes ($ node ->type , $ typeContext ));
5050 }
5151
5252 return [];
@@ -98,7 +98,7 @@ private function compressNullableType(array $types): array
9898 /**
9999 * @return Type[]
100100 */
101- private function extractTypes (TypeNode $ node , NameScope $ nameScope ): array
101+ private function extractTypes (TypeNode $ node , TypeContext $ typeContext ): array
102102 {
103103 if ($ node instanceof UnionTypeNode) {
104104 $ types = [];
@@ -107,7 +107,7 @@ private function extractTypes(TypeNode $node, NameScope $nameScope): array
107107 // It's safer to fall back to other extractors here, as resolving const types correctly is not easy at the moment
108108 return [];
109109 }
110- foreach ($ this ->extractTypes ($ type , $ nameScope ) as $ subType ) {
110+ foreach ($ this ->extractTypes ($ type , $ typeContext ) as $ subType ) {
111111 $ types [] = $ subType ;
112112 }
113113 }
@@ -119,7 +119,7 @@ private function extractTypes(TypeNode $node, NameScope $nameScope): array
119119 return [new Type (Type::BUILTIN_TYPE_STRING )];
120120 }
121121
122- [$ mainType ] = $ this ->extractTypes ($ node ->type , $ nameScope );
122+ [$ mainType ] = $ this ->extractTypes ($ node ->type , $ typeContext );
123123
124124 if (Type::BUILTIN_TYPE_INT === $ mainType ->getBuiltinType ()) {
125125 return [$ mainType ];
@@ -135,14 +135,14 @@ private function extractTypes(TypeNode $node, NameScope $nameScope): array
135135 $ collectionKeyTypes = $ mainType ->getCollectionKeyTypes ();
136136 $ collectionKeyValues = [];
137137 if (1 === \count ($ node ->genericTypes )) {
138- foreach ($ this ->extractTypes ($ node ->genericTypes [0 ], $ nameScope ) as $ subType ) {
138+ foreach ($ this ->extractTypes ($ node ->genericTypes [0 ], $ typeContext ) as $ subType ) {
139139 $ collectionKeyValues [] = $ subType ;
140140 }
141141 } elseif (2 === \count ($ node ->genericTypes )) {
142- foreach ($ this ->extractTypes ($ node ->genericTypes [0 ], $ nameScope ) as $ keySubType ) {
142+ foreach ($ this ->extractTypes ($ node ->genericTypes [0 ], $ typeContext ) as $ keySubType ) {
143143 $ collectionKeyTypes [] = $ keySubType ;
144144 }
145- foreach ($ this ->extractTypes ($ node ->genericTypes [1 ], $ nameScope ) as $ valueSubType ) {
145+ foreach ($ this ->extractTypes ($ node ->genericTypes [1 ], $ typeContext ) as $ valueSubType ) {
146146 $ collectionKeyValues [] = $ valueSubType ;
147147 }
148148 }
@@ -153,13 +153,13 @@ private function extractTypes(TypeNode $node, NameScope $nameScope): array
153153 return [new Type (Type::BUILTIN_TYPE_ARRAY , false , null , true )];
154154 }
155155 if ($ node instanceof ArrayTypeNode) {
156- return [new Type (Type::BUILTIN_TYPE_ARRAY , false , null , true , [new Type (Type::BUILTIN_TYPE_INT )], $ this ->extractTypes ($ node ->type , $ nameScope ))];
156+ return [new Type (Type::BUILTIN_TYPE_ARRAY , false , null , true , [new Type (Type::BUILTIN_TYPE_INT )], $ this ->extractTypes ($ node ->type , $ typeContext ))];
157157 }
158158 if ($ node instanceof CallableTypeNode || $ node instanceof CallableTypeParameterNode) {
159159 return [new Type (Type::BUILTIN_TYPE_CALLABLE )];
160160 }
161161 if ($ node instanceof NullableTypeNode) {
162- $ subTypes = $ this ->extractTypes ($ node ->type , $ nameScope );
162+ $ subTypes = $ this ->extractTypes ($ node ->type , $ typeContext );
163163 if (\count ($ subTypes ) > 1 ) {
164164 $ subTypes [] = new Type (Type::BUILTIN_TYPE_NULL );
165165
@@ -169,7 +169,7 @@ private function extractTypes(TypeNode $node, NameScope $nameScope): array
169169 return [new Type ($ subTypes [0 ]->getBuiltinType (), true , $ subTypes [0 ]->getClassName (), $ subTypes [0 ]->isCollection (), $ subTypes [0 ]->getCollectionKeyTypes (), $ subTypes [0 ]->getCollectionValueTypes ())];
170170 }
171171 if ($ node instanceof ThisTypeNode) {
172- return [new Type (Type::BUILTIN_TYPE_OBJECT , false , $ nameScope -> resolveRootClass ())];
172+ return [new Type (Type::BUILTIN_TYPE_OBJECT , false , $ typeContext -> getCalledClass ())];
173173 }
174174 if ($ node instanceof IdentifierTypeNode) {
175175 if (\in_array ($ node ->name , Type::$ builtinTypes , true )) {
@@ -190,7 +190,7 @@ private function extractTypes(TypeNode $node, NameScope $nameScope): array
190190 'mixed ' => [], // mixed seems to be ignored in all other extractors
191191 'parent ' => [new Type (Type::BUILTIN_TYPE_OBJECT , false , $ node ->name )],
192192 'static ' ,
193- 'self ' => [new Type (Type::BUILTIN_TYPE_OBJECT , false , $ nameScope -> resolveRootClass ())],
193+ 'self ' => [new Type (Type::BUILTIN_TYPE_OBJECT , false , $ typeContext -> getCalledClass ())],
194194 'class-string ' ,
195195 'html-escaped-string ' ,
196196 'lowercase-string ' ,
@@ -205,7 +205,7 @@ private function extractTypes(TypeNode $node, NameScope $nameScope): array
205205 'number ' => [new Type (Type::BUILTIN_TYPE_INT ), new Type (Type::BUILTIN_TYPE_FLOAT )],
206206 'numeric ' => [new Type (Type::BUILTIN_TYPE_INT ), new Type (Type::BUILTIN_TYPE_FLOAT ), new Type (Type::BUILTIN_TYPE_STRING )],
207207 'array-key ' => [new Type (Type::BUILTIN_TYPE_STRING ), new Type (Type::BUILTIN_TYPE_INT )],
208- default => [new Type (Type::BUILTIN_TYPE_OBJECT , false , $ nameScope -> resolveStringName ($ node ->name ))],
208+ default => [new Type (Type::BUILTIN_TYPE_OBJECT , false , $ typeContext -> normalize ($ node ->name ))],
209209 };
210210 }
211211
0 commit comments