diff --git a/Model/ModelRegistry.php b/Model/ModelRegistry.php index 48bc4ba..5e9a8e3 100644 --- a/Model/ModelRegistry.php +++ b/Model/ModelRegistry.php @@ -124,8 +124,8 @@ final class ModelRegistry private function getTypeShortName(Type $type): string { - if (null !== $type->getCollectionValueType()) { - return $this->getTypeShortName($type->getCollectionValueType()).'[]'; + if (null !== $collectionType = $this->getCollectionValueType($type)) { + return $this->getTypeShortName($collectionType).'[]'; } if (Type::BUILTIN_TYPE_OBJECT === $type->getBuiltinType()) { @@ -142,8 +142,8 @@ final class ModelRegistry if (Type::BUILTIN_TYPE_OBJECT === $type->getBuiltinType()) { return $type->getClassName(); } elseif ($type->isCollection()) { - if (null !== $type->getCollectionValueType()) { - return $this->typeToString($type->getCollectionValueType()).'[]'; + if (null !== $collectionType = $this->getCollectionValueType($type)) { + return $this->typeToString($collectionType).'[]'; } else { return 'mixed[]'; } @@ -151,4 +151,14 @@ final class ModelRegistry return $type->getBuiltinType(); } } + + private function getCollectionValueType(Type $type): ?Type + { + // BC layer, this condition should be removed after removing support for symfony < 5.3 + if (!method_exists($type, 'getCollectionValueTypes')) { + return $type->getCollectionValueType(); + } + + return $type->getCollectionValueTypes()[0] ?? null; + } } diff --git a/PropertyDescriber/ArrayPropertyDescriber.php b/PropertyDescriber/ArrayPropertyDescriber.php index cb02c36..ee89c17 100644 --- a/PropertyDescriber/ArrayPropertyDescriber.php +++ b/PropertyDescriber/ArrayPropertyDescriber.php @@ -32,7 +32,10 @@ class ArrayPropertyDescriber implements PropertyDescriberInterface, ModelRegistr public function describe(array $types, OA\Schema $property, array $groups = null) { - $type = $types[0]->getCollectionValueType(); + // BC layer for symfony < 5.3 + $type = method_exists($types[0], 'getCollectionValueTypes') ? + ($types[0]->getCollectionValueTypes()[0] ?? null) : + $types[0]->getCollectionValueType(); if (null === $type) { throw new UndocumentedArrayItemsException(); } diff --git a/PropertyDescriber/ObjectPropertyDescriber.php b/PropertyDescriber/ObjectPropertyDescriber.php index eb5d4bc..ef1aabc 100644 --- a/PropertyDescriber/ObjectPropertyDescriber.php +++ b/PropertyDescriber/ObjectPropertyDescriber.php @@ -23,7 +23,17 @@ class ObjectPropertyDescriber implements PropertyDescriberInterface, ModelRegist public function describe(array $types, OA\Schema $property, array $groups = null) { - $type = new Type($types[0]->getBuiltinType(), false, $types[0]->getClassName(), $types[0]->isCollection(), $types[0]->getCollectionKeyType(), $types[0]->getCollectionValueType()); // ignore nullable field + $type = new Type( + $types[0]->getBuiltinType(), + false, + $types[0]->getClassName(), + $types[0]->isCollection(), + $types[0]->getCollectionKeyType(), + // BC layer for symfony < 5.3 + method_exists($types[0], 'getCollectionValueTypes') ? + ($types[0]->getCollectionValueTypes()[0] ?? null) : + $types[0]->getCollectionValueType() + ); // ignore nullable field if ($types[0]->isNullable()) { $property->nullable = true;