From c7f289ff095f2ac4fcfc5d6ad360b85055c0b774 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Tvrd=C3=ADk?= Date: Wed, 13 Mar 2024 13:26:39 +0100 Subject: [PATCH] PhpDocTypeUtils: use GenericTypeVariance enum --- src/Compiler/Type/PhpDocTypeUtils.php | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/Compiler/Type/PhpDocTypeUtils.php b/src/Compiler/Type/PhpDocTypeUtils.php index d26170f..f7223b9 100644 --- a/src/Compiler/Type/PhpDocTypeUtils.php +++ b/src/Compiler/Type/PhpDocTypeUtils.php @@ -704,10 +704,9 @@ private static function isSubTypeOfGeneric(GenericTypeNode $a, GenericTypeNode $ $genericTypeB = self::getGenericTypeParameter($b, $idx); return match ($parameter['variance']) { - 'in' => self::isSubTypeOf($genericTypeB, $genericTypeA), - 'out' => self::isSubTypeOf($genericTypeA, $genericTypeB), - 'inout' => self::isSubTypeOf($genericTypeA, $genericTypeB) && self::isSubTypeOf($genericTypeB, $genericTypeA), - default => throw new LogicException("Invalid variance {$parameter['variance']}"), + GenericTypeVariance::Contravariant => self::isSubTypeOf($genericTypeB, $genericTypeA), + GenericTypeVariance::Covariant => self::isSubTypeOf($genericTypeA, $genericTypeB), + GenericTypeVariance::Invariant => self::isSubTypeOf($genericTypeA, $genericTypeB) && self::isSubTypeOf($genericTypeB, $genericTypeA), }; }); } @@ -752,7 +751,7 @@ private static function getGenericTypeParameter(GenericTypeNode $type, int $inde /** * @return array{ * extends?: array>, - * parameters?: list, variance: 'in' | 'out' | 'inout', bound?: TypeNode}>, + * parameters?: list, variance: GenericTypeVariance, bound?: TypeNode}>, * } */ private static function getGenericTypeDefinition(GenericTypeNode $type): array @@ -763,8 +762,8 @@ private static function getGenericTypeDefinition(GenericTypeNode $type): array 'iterable' => [0, 1], ], 'parameters' => [ - ['index' => [2 => 0], 'variance' => 'out', 'bound' => new UnionTypeNode([new IdentifierTypeNode('int'), new IdentifierTypeNode('string')])], - ['index' => [1 => 0, 2 => 1], 'variance' => 'out'], + ['index' => [2 => 0], 'variance' => GenericTypeVariance::Covariant, 'bound' => new UnionTypeNode([new IdentifierTypeNode('int'), new IdentifierTypeNode('string')])], + ['index' => [1 => 0, 2 => 1], 'variance' => GenericTypeVariance::Covariant], ], ], @@ -773,14 +772,14 @@ private static function getGenericTypeDefinition(GenericTypeNode $type): array 'array' => [new IdentifierTypeNode('int'), 0], ], 'parameters' => [ - ['variance' => 'out'], + ['variance' => GenericTypeVariance::Covariant], ], ], 'iterable' => [ 'parameters' => [ - ['index' => [2 => 0], 'variance' => 'out'], - ['index' => [1 => 0, 2 => 1], 'variance' => 'out'], + ['index' => [2 => 0], 'variance' => GenericTypeVariance::Covariant], + ['index' => [1 => 0, 2 => 1], 'variance' => GenericTypeVariance::Covariant], ], ], @@ -789,13 +788,13 @@ private static function getGenericTypeDefinition(GenericTypeNode $type): array 'list' => [0], ], 'parameters' => [ - ['variance' => 'out'], + ['variance' => GenericTypeVariance::Covariant], ], ], Optional::class => [ 'parameters' => [ - ['variance' => 'out'], + ['variance' => GenericTypeVariance::Covariant], ], ], @@ -804,7 +803,7 @@ private static function getGenericTypeDefinition(GenericTypeNode $type): array Optional::class => [0], ], 'parameters' => [ - ['variance' => 'out'], + ['variance' => GenericTypeVariance::Covariant], ], ],