|
13 | 13 | use PHPStan\PhpDocParser\Parser\TokenIterator; |
14 | 14 | use PHPStan\PhpDocParser\Parser\TypeParser; |
15 | 15 | use PHPStan\PhpDocParser\ParserConfig; |
| 16 | +use Symfony\Component\PropertyInfo\PhpStan\NameScope; |
16 | 17 | use Symfony\Component\PropertyInfo\PhpStan\NameScopeFactory; |
17 | 18 | use Symfony\Component\PropertyInfo\Type; |
18 | 19 | use Symfony\Component\PropertyInfo\Util\PhpStanTypeHelper; |
| 20 | +use Symfony\Component\TypeInfo\TypeContext\TypeContext; |
| 21 | +use Symfony\Component\TypeInfo\TypeContext\TypeContextFactory; |
19 | 22 |
|
20 | 23 | /** |
21 | 24 | * Add helper functions to extract types from a property. |
@@ -58,13 +61,12 @@ private function extractFromDocBlock(string|false|null $rawDocNode, string $clas |
58 | 61 | } |
59 | 62 | } |
60 | 63 |
|
61 | | - static $nameScopeFactory = new NameScopeFactory(); |
62 | 64 | static $phpStanTypeHelper = new PhpStanTypeHelper(); |
63 | 65 |
|
64 | 66 | $tokens = new TokenIterator($lexer->tokenize($rawDocNode)); |
65 | 67 | $docNode = $phpDocParser->parse($tokens); |
66 | 68 | $tokens->consumeTokenType(Lexer::TOKEN_END); |
67 | | - $nameScope = $nameScopeFactory->create($class, $declaringClass); |
| 69 | + $nameScope = $this->createNameScope($class, $declaringClass); |
68 | 70 |
|
69 | 71 | $types = []; |
70 | 72 |
|
@@ -159,4 +161,18 @@ private function resolveTypeName(string $name, \ReflectionClass $declaringClass) |
159 | 161 |
|
160 | 162 | return $name; |
161 | 163 | } |
| 164 | + |
| 165 | + private function createNameScope(string $class, string $declaringClass): NameScope|TypeContext |
| 166 | + { |
| 167 | + // For Symfony <=7.2. To remove when we drop support for Symfony <= 7.2 |
| 168 | + if (class_exists(NameScopeFactory::class)) { |
| 169 | + static $nameScopeFactory = new NameScopeFactory(); |
| 170 | + |
| 171 | + return $nameScopeFactory->create($class, $declaringClass); |
| 172 | + } |
| 173 | + |
| 174 | + static $typeContextFactory = new TypeContextFactory(); |
| 175 | + |
| 176 | + return $typeContextFactory->createFromClassName($class, $declaringClass); |
| 177 | + } |
162 | 178 | } |
0 commit comments