|
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