Skip to content

Commit 73b998e

Browse files
committed
Merge branch '7.1' into 7.2
* 7.1: Fix resolve enum in string type resolver [PropertyInfo] Upmerge #59012 [BeanstalkMessenger] Round delay to an integer to avoid deprecation warning [PropertyInfo] Fix interface handling in `PhpStanTypeHelper` [HttpClient] Test POST to GET redirects [HttpKernel] Denormalize request data using the csv format when using "#[MapQueryString]" or "#[MapRequestPayload]" (except for content data) fix: preserve and nowrap in profiler code highlighting
2 parents 4f40207 + 8f980bd commit 73b998e

File tree

3 files changed

+9
-12
lines changed

3 files changed

+9
-12
lines changed

Tests/TypeResolver/StringTypeResolverTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616
use Symfony\Component\TypeInfo\Exception\UnsupportedException;
1717
use Symfony\Component\TypeInfo\Tests\Fixtures\AbstractDummy;
1818
use Symfony\Component\TypeInfo\Tests\Fixtures\Dummy;
19+
use Symfony\Component\TypeInfo\Tests\Fixtures\DummyBackedEnum;
1920
use Symfony\Component\TypeInfo\Tests\Fixtures\DummyCollection;
21+
use Symfony\Component\TypeInfo\Tests\Fixtures\DummyEnum;
2022
use Symfony\Component\TypeInfo\Tests\Fixtures\DummyWithTemplates;
2123
use Symfony\Component\TypeInfo\Type;
2224
use Symfony\Component\TypeInfo\TypeContext\TypeContext;
@@ -138,6 +140,8 @@ public static function resolveDataProvider(): iterable
138140
yield [Type::object(Dummy::class), 'static', $typeContextFactory->createFromClassName(Dummy::class, AbstractDummy::class)];
139141
yield [Type::object(AbstractDummy::class), 'parent', $typeContextFactory->createFromClassName(Dummy::class)];
140142
yield [Type::object(Dummy::class), 'Dummy', $typeContextFactory->createFromClassName(Dummy::class)];
143+
yield [Type::enum(DummyEnum::class), 'DummyEnum', $typeContextFactory->createFromClassName(DummyEnum::class)];
144+
yield [Type::enum(DummyBackedEnum::class), 'DummyBackedEnum', $typeContextFactory->createFromClassName(DummyBackedEnum::class)];
141145
yield [Type::template('T', Type::union(Type::int(), Type::string())), 'T', $typeContextFactory->createFromClassName(DummyWithTemplates::class)];
142146
yield [Type::template('V'), 'V', $typeContextFactory->createFromReflection(new \ReflectionMethod(DummyWithTemplates::class, 'getPrice'))];
143147

TypeResolver/ReflectionTypeResolver.php

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,6 @@
2525
*/
2626
final class ReflectionTypeResolver implements TypeResolverInterface
2727
{
28-
/**
29-
* @var array<class-string, \ReflectionEnum>
30-
*/
31-
private static array $reflectionEnumCache = [];
32-
3328
public function resolve(mixed $subject, ?TypeContext $typeContext = null): Type
3429
{
3530
if ($subject instanceof \ReflectionUnionType) {
@@ -81,11 +76,7 @@ public function resolve(mixed $subject, ?TypeContext $typeContext = null): Type
8176
default => $identifier,
8277
};
8378

84-
if (is_subclass_of($className, \BackedEnum::class)) {
85-
$reflectionEnum = (self::$reflectionEnumCache[$className] ??= new \ReflectionEnum($className));
86-
$backingType = $this->resolve($reflectionEnum->getBackingType(), $typeContext);
87-
$type = Type::enum($className, $backingType);
88-
} elseif (is_subclass_of($className, \UnitEnum::class)) {
79+
if (is_subclass_of($className, \UnitEnum::class)) {
8980
$type = Type::enum($className);
9081
} else {
9182
$type = Type::object($className);

TypeResolver/StringTypeResolver.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,14 +246,16 @@ private function resolveCustomIdentifier(string $identifier, ?TypeContext $typeC
246246
try {
247247
new \ReflectionClass($className);
248248
self::$classExistCache[$className] = true;
249-
250-
return Type::object($className);
251249
} catch (\Throwable) {
252250
}
253251
}
254252
}
255253

256254
if (self::$classExistCache[$className]) {
255+
if (is_subclass_of($className, \UnitEnum::class)) {
256+
return Type::enum($className);
257+
}
258+
257259
return Type::object($className);
258260
}
259261

0 commit comments

Comments
 (0)