diff --git a/src/Symfony/Component/TypeInfo/Tests/Fixtures/DummyBackedEnumInterface.php b/src/Symfony/Component/TypeInfo/Tests/Fixtures/DummyBackedEnumInterface.php new file mode 100644 index 0000000000000..b7e1c73290054 --- /dev/null +++ b/src/Symfony/Component/TypeInfo/Tests/Fixtures/DummyBackedEnumInterface.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\TypeInfo\Tests\Fixtures; + +interface DummyBackedEnumInterface extends \BackedEnum +{ +} diff --git a/src/Symfony/Component/TypeInfo/Tests/Fixtures/ReflectionExtractableDummy.php b/src/Symfony/Component/TypeInfo/Tests/Fixtures/ReflectionExtractableDummy.php index 018fd36b6b9d2..a8322559edc58 100644 --- a/src/Symfony/Component/TypeInfo/Tests/Fixtures/ReflectionExtractableDummy.php +++ b/src/Symfony/Component/TypeInfo/Tests/Fixtures/ReflectionExtractableDummy.php @@ -37,6 +37,8 @@ final class ReflectionExtractableDummy extends AbstractDummy public DummyBackedEnum $backedEnum; public ?DummyBackedEnum $nullableBackedEnum; + public DummyBackedEnumInterface $backedEnumInterface; + public int|string $union; public \Traversable&\Stringable $intersection; diff --git a/src/Symfony/Component/TypeInfo/Tests/TypeResolver/ReflectionTypeResolverTest.php b/src/Symfony/Component/TypeInfo/Tests/TypeResolver/ReflectionTypeResolverTest.php index 75116d97c2c3d..caf168acbe8a8 100644 --- a/src/Symfony/Component/TypeInfo/Tests/TypeResolver/ReflectionTypeResolverTest.php +++ b/src/Symfony/Component/TypeInfo/Tests/TypeResolver/ReflectionTypeResolverTest.php @@ -17,6 +17,7 @@ use Symfony\Component\TypeInfo\Tests\Fixtures\AbstractDummy; use Symfony\Component\TypeInfo\Tests\Fixtures\Dummy; use Symfony\Component\TypeInfo\Tests\Fixtures\DummyBackedEnum; +use Symfony\Component\TypeInfo\Tests\Fixtures\DummyBackedEnumInterface; use Symfony\Component\TypeInfo\Tests\Fixtures\DummyEnum; use Symfony\Component\TypeInfo\Tests\Fixtures\ReflectionExtractableDummy; use Symfony\Component\TypeInfo\Type; @@ -67,6 +68,7 @@ public static function resolveDataProvider(): iterable yield [Type::nullable(Type::enum(DummyEnum::class)), $reflection->getProperty('nullableEnum')->getType()]; yield [Type::enum(DummyBackedEnum::class), $reflection->getProperty('backedEnum')->getType()]; yield [Type::nullable(Type::enum(DummyBackedEnum::class)), $reflection->getProperty('nullableBackedEnum')->getType()]; + yield [Type::object(DummyBackedEnumInterface::class), $reflection->getProperty('backedEnumInterface')->getType()]; yield [Type::union(Type::int(), Type::string()), $reflection->getProperty('union')->getType()]; yield [Type::intersection(Type::object(\Traversable::class), Type::object(\Stringable::class)), $reflection->getProperty('intersection')->getType()]; } diff --git a/src/Symfony/Component/TypeInfo/TypeResolver/ReflectionTypeResolver.php b/src/Symfony/Component/TypeInfo/TypeResolver/ReflectionTypeResolver.php index 23e6b3a2860a5..61ffc34951091 100644 --- a/src/Symfony/Component/TypeInfo/TypeResolver/ReflectionTypeResolver.php +++ b/src/Symfony/Component/TypeInfo/TypeResolver/ReflectionTypeResolver.php @@ -76,7 +76,7 @@ public function resolve(mixed $subject, ?TypeContext $typeContext = null): Type default => $identifier, }; - if (is_subclass_of($className, \UnitEnum::class)) { + if (is_subclass_of($className, \UnitEnum::class) && !interface_exists($className)) { $type = Type::enum($className); } else { $type = Type::object($className);