diff --git a/src/Metadata/Driver/DocBlockDriver/DocBlockTypeResolver.php b/src/Metadata/Driver/DocBlockDriver/DocBlockTypeResolver.php index 387e4e222..c8ee9838d 100644 --- a/src/Metadata/Driver/DocBlockDriver/DocBlockTypeResolver.php +++ b/src/Metadata/Driver/DocBlockDriver/DocBlockTypeResolver.php @@ -154,7 +154,15 @@ private function getDocBlocTypeHint($reflector): ?string if ($type->genericTypes[$valuesIndex] instanceof UnionTypeNode) { $valueTypes = array_map( - fn (TypeNode $node) => $this->resolveTypeFromTypeNode($node, $reflector), + function (TypeNode $node) use ($reflector) { + if ($node instanceof ArrayTypeNode) { + $resolvedType = $this->resolveTypeFromTypeNode($node->type, $reflector); + + return 'array<' . $resolvedType . '>'; + } + + return $this->resolveTypeFromTypeNode($node, $reflector); + }, $type->genericTypes[$valuesIndex]->types, ); } else { diff --git a/tests/Fixtures/DocBlockType/Collection/MapTypedAsGenericClass.php b/tests/Fixtures/DocBlockType/Collection/MapTypedAsGenericClass.php index fa0330d82..299f38f9c 100644 --- a/tests/Fixtures/DocBlockType/Collection/MapTypedAsGenericClass.php +++ b/tests/Fixtures/DocBlockType/Collection/MapTypedAsGenericClass.php @@ -20,4 +20,9 @@ class MapTypedAsGenericClass * @var array */ public array $productOrVehicleIdsWithKey; + + /** + * @var array + */ + public array $productOrVehicles; } diff --git a/tests/Metadata/Driver/DocBlockDriverTest.php b/tests/Metadata/Driver/DocBlockDriverTest.php index bbb6db1f1..cd49c3e82 100644 --- a/tests/Metadata/Driver/DocBlockDriverTest.php +++ b/tests/Metadata/Driver/DocBlockDriverTest.php @@ -152,6 +152,16 @@ public function testInferDocBlockMapFromGenericLikeClass() ], $m->propertyMetadata['productOrVehicleIdsWithKey']->type, ); + self::assertEquals( + [ + 'name' => 'array', + 'params' => [ + ['name' => Product::class, 'params' => []], + ['name' => 'array', 'params' => [['name' => Vehicle::class, 'params' => []]]], + ], + ], + $m->propertyMetadata['productOrVehicles']->type, + ); } public function testInferDocBlockCollectionOfClassesIgnoringNullTypeHint()