Skip to content

Commit

Permalink
support inner arrays like array<Product|Vehicle[]>
Browse files Browse the repository at this point in the history
  • Loading branch information
simPod committed Feb 17, 2025
1 parent 1f10be4 commit 86271b3
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 1 deletion.
10 changes: 9 additions & 1 deletion src/Metadata/Driver/DocBlockDriver/DocBlockTypeResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,9 @@ class MapTypedAsGenericClass
* @var array<int, Product|Vehicle>
*/
public array $productOrVehicleIdsWithKey;

/**
* @var array<Product|Vehicle[]>
*/
public array $productOrVehicles;
}
10 changes: 10 additions & 0 deletions tests/Metadata/Driver/DocBlockDriverTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down

0 comments on commit 86271b3

Please sign in to comment.