Skip to content

Commit

Permalink
PhpDocTypeUtils: use GenericTypeVariance enum
Browse files Browse the repository at this point in the history
  • Loading branch information
JanTvrdik committed Mar 13, 2024
1 parent 9c8b5a2 commit c7f289f
Showing 1 changed file with 12 additions and 13 deletions.
25 changes: 12 additions & 13 deletions src/Compiler/Type/PhpDocTypeUtils.php
Original file line number Diff line number Diff line change
Expand Up @@ -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),
};
});
}
Expand Down Expand Up @@ -752,7 +751,7 @@ private static function getGenericTypeParameter(GenericTypeNode $type, int $inde
/**
* @return array{
* extends?: array<string, list<int | TypeNode>>,
* parameters?: list<array{index?: array<int, int>, variance: 'in' | 'out' | 'inout', bound?: TypeNode}>,
* parameters?: list<array{index?: array<int, int>, variance: GenericTypeVariance, bound?: TypeNode}>,
* }
*/
private static function getGenericTypeDefinition(GenericTypeNode $type): array
Expand All @@ -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],
],
],

Expand All @@ -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],
],
],

Expand All @@ -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],
],
],

Expand All @@ -804,7 +803,7 @@ private static function getGenericTypeDefinition(GenericTypeNode $type): array
Optional::class => [0],
],
'parameters' => [
['variance' => 'out'],
['variance' => GenericTypeVariance::Covariant],
],
],

Expand Down

0 comments on commit c7f289f

Please sign in to comment.