diff --git a/src/Type/Symfony/SerializerInterfaceDynamicReturnTypeExtension.php b/src/Type/Symfony/SerializerInterfaceDynamicReturnTypeExtension.php index 671a106d..b6f7e33b 100644 --- a/src/Type/Symfony/SerializerInterfaceDynamicReturnTypeExtension.php +++ b/src/Type/Symfony/SerializerInterfaceDynamicReturnTypeExtension.php @@ -34,9 +34,14 @@ public function getTypeFromMethodCall(MethodReflection $methodReflection, Method $objectName = $argType->getValue(); + return $this->getType($objectName); + } + + private function getType(string $objectName): Type + { if (substr($objectName, -2) === '[]') { // The key type is determined by the data - return new ArrayType(new MixedType(false), new ObjectType(substr($objectName, 0, -2))); + return new ArrayType(new MixedType(false), $this->getType(substr($objectName, 0, -2))); } return new ObjectType($objectName); diff --git a/tests/Type/Symfony/SerializerInterfaceDynamicReturnTypeExtensionTest.php b/tests/Type/Symfony/SerializerInterfaceDynamicReturnTypeExtensionTest.php index 3cf715b5..fad62b3b 100644 --- a/tests/Type/Symfony/SerializerInterfaceDynamicReturnTypeExtensionTest.php +++ b/tests/Type/Symfony/SerializerInterfaceDynamicReturnTypeExtensionTest.php @@ -24,6 +24,7 @@ public function getContentProvider(): Iterator { yield ['$first', 'Bar']; yield ['$second', 'array']; + yield ['$third', 'array>']; } } diff --git a/tests/Type/Symfony/serializer.php b/tests/Type/Symfony/serializer.php index 98550c5f..a19065be 100644 --- a/tests/Type/Symfony/serializer.php +++ b/tests/Type/Symfony/serializer.php @@ -4,5 +4,6 @@ $first = $serializer->deserialize('bar', 'Bar', 'format'); $second = $serializer->deserialize('bar', 'Bar[]', 'format'); +$third = $serializer->deserialize('bar', 'Bar[][]', 'format'); die;