From 2168851e8a05f99cdeb0faf781c089f735ffb080 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Sun, 7 Apr 2024 15:48:19 +0800 Subject: [PATCH] Better array handling in 3.1 spec (#18313) * better array detection in 3.1 spec * fix --- .../openapitools/codegen/DefaultCodegen.java | 40 ++-- .../codegen/InlineModelResolver.java | 20 +- .../codegen/OpenAPINormalizer.java | 12 +- .../codegen/examples/ExampleGenerator.java | 9 +- .../codegen/examples/XmlExampleGenerator.java | 3 +- .../codegen/languages/AbstractAdaCodegen.java | 3 +- .../languages/AbstractApexCodegen.java | 12 +- .../languages/AbstractCSharpCodegen.java | 8 +- .../languages/AbstractDartCodegen.java | 2 +- .../languages/AbstractEiffelCodegen.java | 6 +- .../languages/AbstractFSharpCodegen.java | 8 +- .../codegen/languages/AbstractGoCodegen.java | 3 +- .../languages/AbstractGraphQLCodegen.java | 3 +- .../languages/AbstractJavaCodegen.java | 2 +- .../languages/AbstractJuliaCodegen.java | 3 +- .../languages/AbstractKotlinCodegen.java | 4 +- .../codegen/languages/AbstractPhpCodegen.java | 5 +- .../languages/AbstractPythonCodegen.java | 6 +- .../AbstractPythonConnexionServerCodegen.java | 3 +- .../AbstractPythonPydanticV1Codegen.java | 6 +- .../languages/AbstractRubyCodegen.java | 2 +- .../languages/AbstractRustCodegen.java | 3 +- .../languages/AbstractScalaCodegen.java | 15 +- .../AbstractTypeScriptClientCodegen.java | 8 +- .../languages/AndroidClientCodegen.java | 3 +- .../codegen/languages/ApexClientCodegen.java | 2 +- .../codegen/languages/BashClientCodegen.java | 3 +- .../languages/CSharpClientCodegen.java | 3 +- .../languages/CSharpReducedClientCodegen.java | 3 +- .../languages/ClojureClientCodegen.java | 6 +- .../languages/ConfluenceWikiCodegen.java | 3 +- .../languages/CppPistacheServerCodegen.java | 6 +- .../languages/CppQtAbstractCodegen.java | 6 +- .../languages/CppRestSdkClientCodegen.java | 6 +- .../languages/CppRestbedServerCodegen.java | 9 +- .../CppRestbedServerDeprecatedCodegen.java | 6 +- .../languages/CppUE4ClientCodegen.java | 3 +- .../languages/CrystalClientCodegen.java | 2 +- .../languages/ElixirClientCodegen.java | 3 +- .../codegen/languages/ElmClientCodegen.java | 6 +- .../languages/ErlangProperCodegen.java | 12 +- .../GraphQLNodeJSExpressServerCodegen.java | 3 +- .../languages/HaskellHttpClientCodegen.java | 6 +- .../languages/HaskellServantCodegen.java | 6 +- .../languages/HaskellYesodServerCodegen.java | 6 +- .../languages/JMeterClientCodegen.java | 3 +- .../JavascriptApolloClientCodegen.java | 9 +- .../languages/JavascriptClientCodegen.java | 8 +- ...JavascriptClosureAngularClientCodegen.java | 3 +- .../codegen/languages/LuaClientCodegen.java | 3 +- .../codegen/languages/N4jsClientCodegen.java | 5 +- .../codegen/languages/NimClientCodegen.java | 3 +- .../codegen/languages/OCamlClientCodegen.java | 16 +- .../codegen/languages/ObjcClientCodegen.java | 3 +- .../codegen/languages/PerlClientCodegen.java | 3 +- .../PhpDataTransferClientCodegen.java | 4 +- .../PhpMezzioPathHandlerServerCodegen.java | 4 +- .../languages/PhpSilexServerCodegen.java | 3 +- .../languages/PhpSymfonyServerCodegen.java | 3 +- .../languages/PowerShellClientCodegen.java | 3 +- .../languages/ProtobufSchemaCodegen.java | 3 +- .../languages/PythonFastAPIServerCodegen.java | 3 +- .../codegen/languages/RClientCodegen.java | 3 +- .../languages/RustAxumServerCodegen.java | 3 +- .../codegen/languages/RustServerCodegen.java | 19 +- .../languages/ScalaAkkaClientCodegen.java | 5 +- .../languages/ScalaFinchServerCodegen.java | 3 +- .../languages/ScalaGatlingCodegen.java | 3 +- .../languages/ScalaHttp4sServerCodegen.java | 3 +- .../languages/ScalaPekkoClientCodegen.java | 5 +- .../ScalaPlayFrameworkServerCodegen.java | 2 +- .../languages/ScalaSttp4ClientCodegen.java | 5 +- .../languages/ScalaSttpClientCodegen.java | 5 +- .../languages/ScalazClientCodegen.java | 5 +- .../languages/StaticHtml2Generator.java | 3 +- .../languages/StaticHtmlGenerator.java | 3 +- .../languages/Swift5ClientCodegen.java | 9 +- .../languages/SwiftCombineClientCodegen.java | 5 +- .../languages/TypeScriptClientCodegen.java | 8 +- .../TypeScriptNodeClientCodegen.java | 2 +- .../codegen/languages/XojoClientCodegen.java | 3 +- .../codegen/utils/ModelUtils.java | 46 +++- .../codegen/OpenAPINormalizerTest.java | 49 ++++ .../src/test/resources/3_1/issue_18291.yaml | 36 +++ .../src/test/resources/3_1/java/petstore.yaml | 17 +- .../okhttp-gson-3.1/.openapi-generator/FILES | 2 - .../petstore/java/okhttp-gson-3.1/README.md | 1 - .../java/okhttp-gson-3.1/api/openapi.yaml | 6 - .../java/okhttp-gson-3.1/docs/AnyOfArray.md | 12 - .../java/org/openapitools/client/JSON.java | 1 - .../openapitools/client/model/AnyOfArray.java | 217 ------------------ .../client/model/AnyOfArrayTest.java | 33 --- 92 files changed, 314 insertions(+), 568 deletions(-) create mode 100644 modules/openapi-generator/src/test/resources/3_1/issue_18291.yaml delete mode 100644 samples/client/petstore/java/okhttp-gson-3.1/docs/AnyOfArray.md delete mode 100644 samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/model/AnyOfArray.java delete mode 100644 samples/client/petstore/java/okhttp-gson-3.1/src/test/java/org/openapitools/client/model/AnyOfArrayTest.java diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 2950826dcdc..a79b72af7f9 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -1092,7 +1092,7 @@ public class DefaultCodegen implements CodegenConfig { addOneOfNameExtension(s, n); } } else if (ModelUtils.isArraySchema(s)) { - Schema items = ((ArraySchema) s).getItems(); + Schema items = ModelUtils.getSchemaItems(s); if (ModelUtils.isComposedSchema(items)) { addOneOfNameExtension(items, nOneOf); addOneOfInterfaceModel(items, nOneOf); @@ -2065,8 +2065,7 @@ public class DefaultCodegen implements CodegenConfig { } return inner; } else if (ModelUtils.isArraySchema(schema)) { - ArraySchema arraySchema = (ArraySchema) schema; - String inner = getSchemaType(getSchemaItems(arraySchema)); + String inner = getSchemaType(ModelUtils.getSchemaItems(schema)); String parentType; if (ModelUtils.isSet(schema)) { parentType = "set"; @@ -2372,15 +2371,7 @@ public class DefaultCodegen implements CodegenConfig { } - protected Schema getSchemaItems(ArraySchema schema) { - Schema items = schema.getItems(); - if (items == null) { - LOGGER.error("Undefined array inner type for `{}`. Default to String.", schema.getName()); - items = new StringSchema().description("TODO default missing array inner type to string"); - schema.setItems(items); - } - return items; - } + protected Schema getSchemaAdditionalProperties(Schema schema) { Schema inner = ModelUtils.getAdditionalProperties(schema); @@ -3983,7 +3974,7 @@ public class DefaultCodegen implements CodegenConfig { LOGGER.error("Undefined property/schema for `{}`. Default to type:string.", name); return null; } - LOGGER.debug("debugging fromProperty for {} : {}", name, p); + LOGGER.debug("debugging fromProperty for {}: {}", name, p); NamedSchema ns = new NamedSchema(name, p, required, schemaIsFromAdditionalProperties); CodegenProperty cpc = schemaCodegenPropertyCache.get(ns); if (cpc != null) { @@ -4190,8 +4181,7 @@ public class DefaultCodegen implements CodegenConfig { // handle inner property String itemName = getItemsName(p, name); - ArraySchema arraySchema = (ArraySchema) p; - Schema innerSchema = unaliasSchema(getSchemaItems(arraySchema)); + Schema innerSchema = unaliasSchema(ModelUtils.getSchemaItems(p)); CodegenProperty cp = fromProperty(itemName, innerSchema, false); updatePropertyForArray(property, cp); } else if (ModelUtils.isTypeObjectSchema(p)) { @@ -4501,8 +4491,7 @@ public class DefaultCodegen implements CodegenConfig { CodegenProperty cm = fromProperty("response", responseSchema, false); if (ModelUtils.isArraySchema(responseSchema)) { - ArraySchema as = (ArraySchema) responseSchema; - CodegenProperty innerProperty = fromProperty("response", getSchemaItems(as), false); + CodegenProperty innerProperty = fromProperty("response", ModelUtils.getSchemaItems(responseSchema), false); op.returnBaseType = innerProperty.baseType; } else if (ModelUtils.isMapSchema(responseSchema)) { CodegenProperty innerProperty = fromProperty("response", ModelUtils.getAdditionalProperties(responseSchema), false); @@ -5027,8 +5016,7 @@ public class DefaultCodegen implements CodegenConfig { r.isArray = true; r.containerType = cp.containerType; r.containerTypeMapped = typeMapping.get(cp.containerType); - ArraySchema as = (ArraySchema) responseSchema; - CodegenProperty items = fromProperty("response", getSchemaItems(as), false); + CodegenProperty items = fromProperty("response", ModelUtils.getSchemaItems(responseSchema), false); r.setItems(items); CodegenProperty innerCp = items; @@ -5404,8 +5392,7 @@ public class DefaultCodegen implements CodegenConfig { } addVarsRequiredVarsAdditionalProps(parameterSchema, codegenParameter); } else if (ModelUtils.isArraySchema(parameterSchema)) { - final ArraySchema arraySchema = (ArraySchema) parameterSchema; - Schema inner = getSchemaItems(arraySchema); + Schema inner = ModelUtils.getSchemaItems(parameterSchema); collectionFormat = getCollectionFormat(parameter); // default to csv: @@ -7291,7 +7278,7 @@ public class DefaultCodegen implements CodegenConfig { } else if (ModelUtils.isAnyType(ps)) { // any schema with no type set, composed schemas often do this } else if (ModelUtils.isArraySchema(ps)) { - Schema inner = getSchemaItems((ArraySchema) ps); + Schema inner = ModelUtils.getSchemaItems(ps); CodegenProperty arrayInnerProperty = fromProperty("inner", inner, false); codegenParameter.items = arrayInnerProperty; codegenParameter.mostInnerItems = arrayInnerProperty.mostInnerItems; @@ -7572,11 +7559,10 @@ public class DefaultCodegen implements CodegenConfig { if (ModelUtils.isGenerateAliasAsModel(schema) && StringUtils.isNotBlank(name)) { this.addBodyModelSchema(codegenParameter, name, schema, imports, bodyParameterName, true); } else { - final ArraySchema arraySchema = (ArraySchema) schema; - Schema inner = getSchemaItems(arraySchema); - CodegenProperty codegenProperty = fromProperty("property", arraySchema, false); + Schema inner = ModelUtils.getSchemaItems(schema); + CodegenProperty codegenProperty = fromProperty("property", schema, false); if (codegenProperty == null) { - throw new RuntimeException("CodegenProperty cannot be null. arraySchema for debugging: " + arraySchema); + throw new RuntimeException("CodegenProperty cannot be null. arraySchema for debugging: " + schema); } imports.add(codegenProperty.baseType); @@ -7609,7 +7595,7 @@ public class DefaultCodegen implements CodegenConfig { codegenParameter.items = codegenProperty.items; codegenParameter.mostInnerItems = codegenProperty.mostInnerItems; - codegenParameter.dataType = getTypeDeclaration(arraySchema); + codegenParameter.dataType = getTypeDeclaration(schema); codegenParameter.baseType = getSchemaType(inner); codegenParameter.isContainer = Boolean.TRUE; codegenParameter.isNullable = codegenProperty.isNullable; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/InlineModelResolver.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/InlineModelResolver.java index f36457cc115..970f33d3b6f 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/InlineModelResolver.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/InlineModelResolver.java @@ -338,10 +338,9 @@ public class InlineModelResolver { return; } // Check array items - if (schema instanceof ArraySchema) { - ArraySchema array = (ArraySchema) schema; - Schema items = array.getItems(); - if (items == null && array.getPrefixItems() == null) { + if (ModelUtils.isArraySchema(schema)) { + Schema items = ModelUtils.getSchemaItems(schema); + if (items == null && schema.getPrefixItems() == null) { LOGGER.debug("Incorrect array schema with no items, prefixItems: {}", schema.toString()); return; } @@ -357,7 +356,7 @@ public class InlineModelResolver { if (isModelNeeded(items)) { // If this schema should be split into its own model, do so - array.setItems(this.makeSchemaInComponents(schemaName, items)); + schema.setItems(this.makeSchemaInComponents(schemaName, items)); } } // Check allOf, anyOf, oneOf for inline models @@ -788,9 +787,8 @@ public class InlineModelResolver { propsToUpdate.put(key, schema); modelsToAdd.put(modelName, model); } - } else if (property instanceof ArraySchema) { - ArraySchema ap = (ArraySchema) property; - Schema inner = ap.getItems(); + } else if (ModelUtils.isArraySchema(property)) { + Schema inner = ModelUtils.getSchemaItems(property); if (inner instanceof ObjectSchema) { ObjectSchema op = (ObjectSchema) inner; if (op.getProperties() != null && op.getProperties().size() > 0) { @@ -801,12 +799,12 @@ public class InlineModelResolver { if (existing != null) { Schema schema = new Schema().$ref(existing); schema.setRequired(op.getRequired()); - ap.setItems(schema); + property.setItems(schema); } else { modelName = addSchemas(modelName, innerModel); Schema schema = new Schema().$ref(modelName); schema.setRequired(op.getRequired()); - ap.setItems(schema); + property.setItems(schema); } } } else if (ModelUtils.isComposedSchema(inner)) { @@ -815,7 +813,7 @@ public class InlineModelResolver { innerModelName = addSchemas(innerModelName, inner); Schema schema = new Schema().$ref(innerModelName); schema.setRequired(inner.getRequired()); - ap.setItems(schema); + property.setItems(schema); } else { LOGGER.debug("Schema not yet handled in model resolver: {}", inner); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/OpenAPINormalizer.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/OpenAPINormalizer.java index c68929726bd..b0b4d2a50fa 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/OpenAPINormalizer.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/OpenAPINormalizer.java @@ -509,9 +509,10 @@ public class OpenAPINormalizer { visitedSchemas.add(schema); } - if (schema instanceof ArraySchema) { // array - normalizeArraySchema(schema); - normalizeSchema(schema.getItems(), visitedSchemas); + if (ModelUtils.isArraySchema(schema)) { // array + Schema result = normalizeArraySchema(schema); + normalizeSchema(result.getItems(), visitedSchemas); + return result; } else if (schema.getAdditionalProperties() instanceof Schema) { // map normalizeMapSchema(schema); normalizeSchema((Schema) schema.getAdditionalProperties(), visitedSchemas); @@ -566,7 +567,8 @@ public class OpenAPINormalizer { } private Schema normalizeArraySchema(Schema schema) { - return processSetArraytoNullable(schema); + Schema result = processNormalize31Spec(schema, new HashSet<>()); + return processSetArraytoNullable(result); } private Schema normalizeMapSchema(Schema schema) { @@ -1222,7 +1224,7 @@ public class OpenAPINormalizer { // only one item (type) left if (schema.getTypes().size() == 1) { String type = String.valueOf(schema.getTypes().iterator().next()); - if ("array".equals(type)) { + if (ModelUtils.isArraySchema(schema)) { ArraySchema as = new ArraySchema(); as.setDescription(schema.getDescription()); as.setDefault(schema.getDefault()); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/examples/ExampleGenerator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/examples/ExampleGenerator.java index f4e54796d37..21560e2b69f 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/examples/ExampleGenerator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/examples/ExampleGenerator.java @@ -84,10 +84,9 @@ public class ExampleGenerator { } if (ModelUtils.isArraySchema(responseSchema)) { // array of schema - ArraySchema as = (ArraySchema) responseSchema; - if (as.getItems() != null) { // array of primitive types + if (ModelUtils.getSchemaItems(responseSchema) != null) { // array of primitive types return generate((Map) responseSchema.getExample(), - new ArrayList<>(producesInfo), as); + new ArrayList<>(producesInfo), responseSchema); } else { // TODO log warning message as such case is not handled at the moment return null; @@ -248,9 +247,9 @@ public class ExampleGenerator { } return Boolean.TRUE; } else if (ModelUtils.isArraySchema(property)) { - Schema innerType = ((ArraySchema) property).getItems(); + Schema innerType = ModelUtils.getSchemaItems(property); if (innerType != null) { - int arrayLength = null == ((ArraySchema) property).getMaxItems() ? 2 : ((ArraySchema) property).getMaxItems(); + int arrayLength = null == property.getMaxItems() ? 2 : property.getMaxItems(); // avoid memory issues by limiting to max. 5 items arrayLength = Math.min(arrayLength, 5); Object[] objectProperties = new Object[arrayLength]; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/examples/XmlExampleGenerator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/examples/XmlExampleGenerator.java index 3151c0bffd9..b636c1f69a3 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/examples/XmlExampleGenerator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/examples/XmlExampleGenerator.java @@ -128,8 +128,7 @@ public class XmlExampleGenerator { StringBuilder sb = new StringBuilder(); if (ModelUtils.isArraySchema(schema)) { - ArraySchema as = (ArraySchema) schema; - Schema inner = as.getItems(); + Schema inner = ModelUtils.getSchemaItems(schema); boolean wrapped = false; if (schema.getXml() != null && schema.getXml().getWrapped() != null && schema.getXml().getWrapped()) { wrapped = true; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractAdaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractAdaCodegen.java index 887bb9ab6ea..da798350211 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractAdaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractAdaCodegen.java @@ -532,8 +532,7 @@ abstract public class AbstractAdaCodegen extends DefaultCodegen implements Codeg } if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); String itemType = getTypeDeclaration(inner); if (itemType.startsWith("OpenAPI.")) { return itemType + "_Vector"; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractApexCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractApexCodegen.java index 92bdcfcba52..06823c3a294 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractApexCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractApexCodegen.java @@ -188,10 +188,9 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); if (inner == null) { - LOGGER.warn("{}(array property) does not have a proper inner type defined", ap.getName()); + LOGGER.warn("{}(array property) does not have a proper inner type defined", p.getName()); // TODO maybe better defaulting to StringProperty than returning null return null; } @@ -220,13 +219,12 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code @Override public String toDefaultValue(Schema p) { if (ModelUtils.isArraySchema(p)) { - final ArraySchema ap = (ArraySchema) p; final String pattern = "new ArrayList<%s>()"; - if (ap.getItems() == null) { + if (ModelUtils.getSchemaItems(p) == null) { return null; } - return String.format(Locale.ROOT, pattern, getTypeDeclaration(ap.getItems())); + return String.format(Locale.ROOT, pattern, getTypeDeclaration(ModelUtils.getSchemaItems(p))); } else if (ModelUtils.isMapSchema(p)) { final MapSchema ap = (MapSchema) p; final String pattern = "new HashMap<%s>()"; @@ -318,7 +316,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code if (ModelUtils.isArraySchema(p)) { example = "new " + getTypeDeclaration(p) + "{" + toExampleValue( - ((ArraySchema) p).getItems()) + "}"; + ModelUtils.getSchemaItems(p)) + "}"; } else if (ModelUtils.isBooleanSchema(p)) { example = String.valueOf(!"false".equals(example)); } else if (ModelUtils.isByteArraySchema(p)) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java index 13fdd04cda9..990bb1eedb1 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java @@ -1433,12 +1433,12 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co * @param arr The input array property * @return The type declaration when the type is an array of arrays. */ - private String getArrayTypeDeclaration(ArraySchema arr) { + private String getArrayTypeDeclaration(Schema arr) { // TODO: collection type here should be fully qualified namespace to avoid model conflicts // This supports arrays of arrays. String arrayType = typeMapping.get("array"); StringBuilder instantiationType = new StringBuilder(arrayType); - Schema items = arr.getItems(); + Schema items = ModelUtils.getSchemaItems(arr); String nestedType = getTypeDeclaration(items); // TODO: We may want to differentiate here between generics and primitive arrays. instantiationType.append("<").append(nestedType).append(">"); @@ -1448,7 +1448,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co @Override public String toInstantiationType(Schema p) { if (ModelUtils.isArraySchema(p)) { - return getArrayTypeDeclaration((ArraySchema) p); + return getArrayTypeDeclaration(p); } return super.toInstantiationType(p); } @@ -1456,7 +1456,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - return getArrayTypeDeclaration((ArraySchema) p); + return getArrayTypeDeclaration(p); } else if (ModelUtils.isMapSchema(p)) { // Should we also support maps of maps? Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java index 62c55f904d8..5bf7fd5df30 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java @@ -512,7 +512,7 @@ public abstract class AbstractDartCodegen extends DefaultCodegen { Schema schema = unaliasSchema(p); Schema target = ModelUtils.isGenerateAliasAsModel() ? p : schema; if (ModelUtils.isArraySchema(target)) { - Schema items = getSchemaItems((ArraySchema) schema); + Schema items = ModelUtils.getSchemaItems(schema); return getSchemaType(target) + "<" + getTypeDeclaration(items) + ">"; } if (ModelUtils.isMapSchema(target)) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractEiffelCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractEiffelCodegen.java index 8f071ddc40c..479fe4c9984 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractEiffelCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractEiffelCodegen.java @@ -293,8 +293,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return "LIST [" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); @@ -578,8 +577,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co // String inner = toModelName(getSchemaType(additionalProperties2)); // return instantiationTypes.get("map") + " [" + inner + "]"; // } else if (ModelUtils.isArraySchema(p)) { -// ArraySchema ap = (ArraySchema) p; -// String inner = toModelName(getSchemaType(ap.getItems())); +// String inner = toModelName(getSchemaType(ModelUtils.getSchemaItems(p))); // return instantiationTypes.get("array") + " [" + inner + "]"; // } else { // return null; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractFSharpCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractFSharpCodegen.java index a17f4abc27a..713efe56087 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractFSharpCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractFSharpCodegen.java @@ -855,12 +855,12 @@ public abstract class AbstractFSharpCodegen extends DefaultCodegen implements Co * @param arr The input array property * @return The type declaration when the type is an array of arrays. */ - private String getArrayTypeDeclaration(ArraySchema arr) { + private String getArrayTypeDeclaration(Schema arr) { // TODO: collection type here should be fully qualified namespace to avoid model conflicts // This supports arrays of arrays. String arrayType = typeMapping.get("array"); StringBuilder instantiationType = new StringBuilder(arrayType); - Schema items = arr.getItems(); + Schema items = ModelUtils.getSchemaItems(arr); String nestedType = getTypeDeclaration(items); // TODO: We may want to differentiate here between generics and primitive arrays. return nestedType + "[]"; @@ -869,7 +869,7 @@ public abstract class AbstractFSharpCodegen extends DefaultCodegen implements Co @Override public String toInstantiationType(Schema p) { if (ModelUtils.isArraySchema(p)) { - return getArrayTypeDeclaration((ArraySchema) p); + return getArrayTypeDeclaration(p); } return super.toInstantiationType(p); } @@ -877,7 +877,7 @@ public abstract class AbstractFSharpCodegen extends DefaultCodegen implements Co @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - return getArrayTypeDeclaration((ArraySchema) p); + return getArrayTypeDeclaration(p); } else if (ModelUtils.isMapSchema(p)) { // Should we also support maps of maps? Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java index 11e4c3f8fe6..a64c09e0a46 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java @@ -360,8 +360,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); // In OAS 3.0.x, the array "items" attribute is required. // In OAS >= 3.1, the array "items" attribute is optional such that the OAS // specification is aligned with the JSON schema specification. diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGraphQLCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGraphQLCodegen.java index 056fd5a51a7..2d92ab1614f 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGraphQLCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGraphQLCodegen.java @@ -273,8 +273,7 @@ public abstract class AbstractGraphQLCodegen extends DefaultCodegen implements C @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Object ap = p.getAdditionalProperties(); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java index 2303c7c1b75..859fc38e54b 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java @@ -946,7 +946,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code Schema schema = unaliasSchema(p); Schema target = ModelUtils.isGenerateAliasAsModel() ? p : schema; if (ModelUtils.isArraySchema(target)) { - Schema items = getSchemaItems((ArraySchema) schema); + Schema items = ModelUtils.getSchemaItems(schema); return getSchemaType(target) + "<" + getBeanValidation(items) + getTypeDeclaration(items) + ">"; } else if (ModelUtils.isMapSchema(target)) { // Note: ModelUtils.isMapSchema(p) returns true when p is a composed schema that also defines diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java index 6fec4638562..b1210465b89 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java @@ -346,8 +346,7 @@ public abstract class AbstractJuliaCodegen extends DefaultCodegen { @Override public String getTypeDeclaration(Schema schema) { if (ModelUtils.isArraySchema(schema)) { - ArraySchema ap = (ArraySchema) schema; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(schema); return getSchemaType(schema) + "{" + getTypeDeclaration(inner) + "}"; } else if (ModelUtils.isSet(schema)) { Schema inner = ModelUtils.getAdditionalProperties(schema); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractKotlinCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractKotlinCodegen.java index d7708e5d28c..6b48b6824a1 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractKotlinCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractKotlinCodegen.java @@ -359,7 +359,7 @@ public abstract class AbstractKotlinCodegen extends DefaultCodegen implements Co Schema schema = unaliasSchema(p); Schema target = ModelUtils.isGenerateAliasAsModel() ? p : schema; if (ModelUtils.isArraySchema(target)) { - Schema items = getSchemaItems((ArraySchema) schema); + Schema items = ModelUtils.getSchemaItems( schema); return getSchemaType(target) + "<" + getTypeDeclaration(items) + ">"; } else if (ModelUtils.isMapSchema(target)) { // Note: ModelUtils.isMapSchema(p) returns true when p is a composed schema that also defines @@ -1104,7 +1104,7 @@ public abstract class AbstractKotlinCodegen extends DefaultCodegen implements Co } StringBuilder defaultContent = new StringBuilder(); - Schema itemsSchema = getSchemaItems((ArraySchema) schema); + Schema itemsSchema = ModelUtils.getSchemaItems(schema); _default.elements().forEachRemaining((element) -> { String defaultValue = element.asText(); if (defaultValue != null) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPhpCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPhpCodegen.java index 19dddf4a371..b8ac658b892 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPhpCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPhpCodegen.java @@ -355,11 +355,10 @@ public abstract class AbstractPhpCodegen extends DefaultCodegen implements Codeg @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); if (inner == null) { LOGGER.warn("{}(array property) does not have a proper inner type defined.Default to string", - ap.getName()); + p.getName()); inner = new StringSchema().description("TODO default missing array inner type to string"); } return getTypeDeclaration(inner) + "[]"; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java index 5d6aeed51de..e944c9d9fe5 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java @@ -491,8 +491,7 @@ public abstract class AbstractPythonCodegen extends DefaultCodegen implements Co if (StringUtils.isNotBlank(schema.getTitle()) && !"null".equals(schema.getTitle())) { includedSchemas.add(schema); } - ArraySchema arrayschema = (ArraySchema) schema; - example = "[\n" + indentationString + toExampleValueRecursive(arrayschema.getItems(), includedSchemas, indentation + 1) + "\n" + indentationString + "]"; + example = "[\n" + indentationString + toExampleValueRecursive(ModelUtils.getSchemaItems(schema), includedSchemas, indentation + 1) + "\n" + indentationString + "]"; } else if (ModelUtils.isMapSchema(schema)) { if (StringUtils.isNotBlank(schema.getTitle()) && !"null".equals(schema.getTitle())) { includedSchemas.add(schema); @@ -693,8 +692,7 @@ public abstract class AbstractPythonCodegen extends DefaultCodegen implements Co p = ModelUtils.unaliasSchema(openAPI, p); if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "[" + getCollectionItemTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonConnexionServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonConnexionServerCodegen.java index a171b8f7751..d24fbcabb95 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonConnexionServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonConnexionServerCodegen.java @@ -351,8 +351,7 @@ public abstract class AbstractPythonConnexionServerCodegen extends AbstractPytho @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonPydanticV1Codegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonPydanticV1Codegen.java index eceec06007f..299ed40048c 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonPydanticV1Codegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonPydanticV1Codegen.java @@ -454,8 +454,7 @@ public abstract class AbstractPythonPydanticV1Codegen extends DefaultCodegen imp if (StringUtils.isNotBlank(schema.getTitle()) && !"null".equals(schema.getTitle())) { includedSchemas.add(schema); } - ArraySchema arrayschema = (ArraySchema) schema; - example = "[\n" + indentationString + toExampleValueRecursive(arrayschema.getItems(), includedSchemas, indentation + 1) + "\n" + indentationString + "]"; + example = "[\n" + indentationString + toExampleValueRecursive(ModelUtils.getSchemaItems(schema), includedSchemas, indentation + 1) + "\n" + indentationString + "]"; } else if (ModelUtils.isMapSchema(schema)) { if (StringUtils.isNotBlank(schema.getTitle()) && !"null".equals(schema.getTitle())) { includedSchemas.add(schema); @@ -656,8 +655,7 @@ public abstract class AbstractPythonPydanticV1Codegen extends DefaultCodegen imp p = ModelUtils.unaliasSchema(openAPI, p); if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractRubyCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractRubyCodegen.java index 2e6c90b9c35..b3a43938e7b 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractRubyCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractRubyCodegen.java @@ -119,7 +119,7 @@ abstract public class AbstractRubyCodegen extends DefaultCodegen implements Code @Override public String getTypeDeclaration(Schema schema) { if (ModelUtils.isArraySchema(schema)) { - Schema inner = ((ArraySchema) schema).getItems(); + Schema inner = ModelUtils.getSchemaItems(schema); return getSchemaType(schema) + "<" + getTypeDeclaration(inner) + ">"; } else if (ModelUtils.isMapSchema(schema)) { Schema inner = ModelUtils.getAdditionalProperties(schema); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractRustCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractRustCodegen.java index d8631cf7823..adcc6264fd8 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractRustCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractRustCodegen.java @@ -236,8 +236,7 @@ public abstract class AbstractRustCodegen extends DefaultCodegen implements Code @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); String innerType = getTypeDeclaration(inner); return typeMapping.get("array") + "<" + innerType + ">"; } else if (ModelUtils.isMapSchema(p)) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java index d5bf542c0b8..9b746340c5b 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java @@ -371,7 +371,7 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen { Schema schema = unaliasSchema(p); Schema target = ModelUtils.isGenerateAliasAsModel() ? p : schema; if (ModelUtils.isArraySchema(target)) { - Schema items = getSchemaItems((ArraySchema) schema); + Schema items = ModelUtils.getSchemaItems(schema); return getSchemaType(target) + "[" + getTypeDeclaration(items) + "]"; } else if (ModelUtils.isMapSchema(target)) { Schema inner = ModelUtils.getAdditionalProperties(target); @@ -404,9 +404,8 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen { String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); return instantiationTypes.get("map") + "[String, " + inner + "]"; } else if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - String inner = getSchemaType(ap.getItems()); - return (ModelUtils.isSet(ap) ? instantiationTypes.get("set") : instantiationTypes.get("array")) + "[" + inner + "]"; + String inner = getSchemaType(ModelUtils.getSchemaItems(p)); + return (ModelUtils.isSet(p) ? instantiationTypes.get("set") : instantiationTypes.get("array")) + "[" + inner + "]"; } else { return null; } @@ -433,10 +432,9 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen { String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); return "new HashMap[String, " + inner + "]() "; } else if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - String inner = getSchemaType(ap.getItems()); + String inner = getSchemaType(ModelUtils.getSchemaItems(p)); String genericType; - if (ModelUtils.isSet(ap)) { + if (ModelUtils.isSet(p)) { genericType = instantiationTypes.get("set"); } else { genericType = instantiationTypes.get("array"); @@ -475,8 +473,7 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen { public CodegenProperty fromProperty(String name, Schema p, boolean required) { CodegenProperty prop = super.fromProperty(name, p, required); if (ModelUtils.isArraySchema(p)) { - ArraySchema as = (ArraySchema) p; - if (ModelUtils.isSet(as)) { + if (ModelUtils.isSet(p)) { prop.containerType = "set"; } } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java index 1bfae967efa..e751790abcf 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java @@ -624,7 +624,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - Schema items = getSchemaItems((ArraySchema) p); + Schema items = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "<" + getTypeDeclaration(unaliasSchema(items)) + ">"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = getSchemaAdditionalProperties(p); @@ -647,8 +647,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp // handle enums of various data types Schema inner; if (ModelUtils.isArraySchema(p)) { - ArraySchema mp1 = (ArraySchema) p; - inner = mp1.getItems(); + inner = ModelUtils.getSchemaItems(p); return this.getSchemaType(p) + "<" + this.getParameterDataType(parameter, inner) + ">"; } else if (ModelUtils.isMapSchema(p)) { inner = ModelUtils.getAdditionalProperties(p); @@ -1177,8 +1176,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp return filteredSchemas.stream().map(schema -> { String schemaType = getSchemaType(schema); if (ModelUtils.isArraySchema(schema)) { - ArraySchema ap = (ArraySchema) schema; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(schema); schemaType = schemaType + "<" + getSchemaType(inner) + ">"; } return schemaType; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AndroidClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AndroidClientCodegen.java index 993a48aa769..9436c7482c9 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AndroidClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AndroidClientCodegen.java @@ -221,8 +221,7 @@ public class AndroidClientCodegen extends DefaultCodegen implements CodegenConfi @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ApexClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ApexClientCodegen.java index 8018d38da34..7db30070252 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ApexClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ApexClientCodegen.java @@ -223,7 +223,7 @@ public class ApexClientCodegen extends AbstractApexCodegen { public String toDefaultValue(Schema p) { String out = null; if (ModelUtils.isArraySchema(p)) { - Schema inner = ((ArraySchema) p).getItems(); + Schema inner = ModelUtils.getSchemaItems(p); out = String.format( Locale.ROOT, "new List<%s>()", diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/BashClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/BashClientCodegen.java index c51225bbec0..a38e556de49 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/BashClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/BashClientCodegen.java @@ -429,8 +429,7 @@ public class BashClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpClientCodegen.java index f084de1cc73..00e3754848b 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpClientCodegen.java @@ -1515,8 +1515,7 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen { } return instantiationTypes.get("map") + ""; } else if (ModelUtils.isArraySchema(schema)) { - ArraySchema arraySchema = (ArraySchema) schema; - String inner = getSchemaType(arraySchema.getItems()); + String inner = getSchemaType(ModelUtils.getSchemaItems(schema)); return instantiationTypes.get("array") + "<" + inner + ">"; } else { return null; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpReducedClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpReducedClientCodegen.java index 7275873f216..44c30344ccc 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpReducedClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpReducedClientCodegen.java @@ -1091,8 +1091,7 @@ public class CSharpReducedClientCodegen extends AbstractCSharpCodegen { } return instantiationTypes.get("map") + ""; } else if (ModelUtils.isArraySchema(schema)) { - ArraySchema arraySchema = (ArraySchema) schema; - String inner = getSchemaType(arraySchema.getItems()); + String inner = getSchemaType(ModelUtils.getSchemaItems(schema)); return instantiationTypes.get("array") + "<" + inner + ">"; } else { return null; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ClojureClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ClojureClientCodegen.java index 127fc108ef6..8af296e05e0 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ClojureClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ClojureClientCodegen.java @@ -165,10 +165,8 @@ public class ClojureClientCodegen extends DefaultCodegen implements CodegenConfi @Override public String getTypeDeclaration(Schema p) { - if (p instanceof ArraySchema) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); - + if (ModelUtils.isArraySchema(p)) { + Schema inner = ModelUtils.getSchemaItems(p); return "(s/coll-of " + getTypeDeclaration(inner) + ")"; } else if (ModelUtils.isMapSchema(p)) { Object ap = p.getAdditionalProperties(); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ConfluenceWikiCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ConfluenceWikiCodegen.java index 22cdb199c95..b4ff2e32d2a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ConfluenceWikiCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ConfluenceWikiCodegen.java @@ -108,8 +108,7 @@ public class ConfluenceWikiCodegen extends DefaultCodegen implements CodegenConf @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java index aceefd0f3c4..fe823fc600c 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java @@ -381,8 +381,7 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen { String openAPIType = getSchemaType(p); if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; } if (ModelUtils.isMapSchema(p)) { @@ -474,8 +473,7 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen { String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); return "std::map()"; } else if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - String inner = getSchemaType(ap.getItems()); + String inner = getSchemaType(ModelUtils.getSchemaItems(p)); if (!languageSpecificPrimitives.contains(inner)) { inner = "std::shared_ptr<" + inner + ">"; } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQtAbstractCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQtAbstractCodegen.java index 09a45e7a143..76e66f62792 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQtAbstractCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQtAbstractCodegen.java @@ -189,8 +189,7 @@ public abstract class CppQtAbstractCodegen extends AbstractCppCodegen implements String openAPIType = getSchemaType(p); if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); @@ -232,8 +231,7 @@ public abstract class CppQtAbstractCodegen extends AbstractCppCodegen implements Schema inner = ModelUtils.getAdditionalProperties(p); return "QMap()"; } else if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return "QList<" + getTypeDeclaration(inner) + ">()"; } else if (ModelUtils.isStringSchema(p)) { return "QString(\"\")"; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestSdkClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestSdkClientCodegen.java index ca90e4b8956..bab05032f6b 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestSdkClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestSdkClientCodegen.java @@ -367,8 +367,7 @@ public class CppRestSdkClientCodegen extends AbstractCppCodegen { String openAPIType = getSchemaType(p); if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); @@ -407,8 +406,7 @@ public class CppRestSdkClientCodegen extends AbstractCppCodegen { String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); return "std::map()"; } else if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - String inner = getSchemaType(ap.getItems()); + String inner = getSchemaType(ModelUtils.getSchemaItems(p)); if (!languageSpecificPrimitives.contains(inner)) { inner = "std::shared_ptr<" + inner + ">"; } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestbedServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestbedServerCodegen.java index 9fd2c4ae691..5808719fd55 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestbedServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestbedServerCodegen.java @@ -379,8 +379,7 @@ public class CppRestbedServerCodegen extends AbstractCppCodegen { String openAPIType = getSchemaType(p); if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); @@ -469,12 +468,10 @@ public class CppRestbedServerCodegen extends AbstractCppCodegen { String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); return "std::map()"; } else if (ModelUtils.isSet(p)) { - ArraySchema ap = (ArraySchema) p; - String inner = getSchemaType(ap.getItems()); + String inner = getSchemaType(ModelUtils.getSchemaItems(p)); return "std::set<" + inner + ">()"; } else if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - String inner = getSchemaType(ap.getItems()); + String inner = getSchemaType(ModelUtils.getSchemaItems(p)); return "std::vector<" + inner + ">()"; } else if (ModelUtils.isModel(p)) { String modelName = getTypeDeclaration(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestbedServerDeprecatedCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestbedServerDeprecatedCodegen.java index bb5941040ad..cd79aa682b5 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestbedServerDeprecatedCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestbedServerDeprecatedCodegen.java @@ -351,8 +351,7 @@ public class CppRestbedServerDeprecatedCodegen extends AbstractCppCodegen { String openAPIType = getSchemaType(p); if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); @@ -433,8 +432,7 @@ public class CppRestbedServerDeprecatedCodegen extends AbstractCppCodegen { String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); return "std::map()"; } else if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - String inner = getSchemaType(ap.getItems()); + String inner = getSchemaType(ModelUtils.getSchemaItems(p)); if (!languageSpecificPrimitives.contains(inner)) { inner = "std::shared_ptr<" + inner + ">"; } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppUE4ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppUE4ClientCodegen.java index 099734ab37c..54aa49b5188 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppUE4ClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppUE4ClientCodegen.java @@ -416,8 +416,7 @@ public class CppUE4ClientCodegen extends AbstractCppCodegen { String openAPIType = getSchemaType(p); if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - return getSchemaType(p) + "<" + getTypeDeclaration(ap.getItems()) + ">"; + return getSchemaType(p) + "<" + getTypeDeclaration(ModelUtils.getSchemaItems(p)) + ">"; } else if (ModelUtils.isMapSchema(p)) { return getSchemaType(p) + ""; } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CrystalClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CrystalClientCodegen.java index ff88ffad110..ac13c05d318 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CrystalClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CrystalClientCodegen.java @@ -814,7 +814,7 @@ public class CrystalClientCodegen extends DefaultCodegen { @Override public String getTypeDeclaration(Schema schema) { if (ModelUtils.isArraySchema(schema)) { - Schema inner = ((ArraySchema) schema).getItems(); + Schema inner = ModelUtils.getSchemaItems(schema); return getSchemaType(schema) + "(" + getTypeDeclaration(inner) + ")"; } else if (ModelUtils.isMapSchema(schema)) { Schema inner = ModelUtils.getAdditionalProperties(schema); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElixirClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElixirClientCodegen.java index 37118de3b13..658560e51da 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElixirClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElixirClientCodegen.java @@ -557,8 +557,7 @@ public class ElixirClientCodegen extends DefaultCodegen { @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElmClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElmClientCodegen.java index 2648e67cfbf..c27645f7a68 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElmClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElmClientCodegen.java @@ -244,8 +244,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String toInstantiationType(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - String inner = getSchemaType(ap.getItems()); + String inner = getSchemaType(ModelUtils.getSchemaItems(p)); return instantiationTypes.get("array") + " " + inner; } else { return null; @@ -464,8 +463,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getTypeDeclaration(inner); } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ErlangProperCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ErlangProperCodegen.java index f1eafd8ce7a..cd57040f730 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ErlangProperCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ErlangProperCodegen.java @@ -141,7 +141,7 @@ public class ErlangProperCodegen extends DefaultCodegen implements CodegenConfig public CodegenModel fromModel(String name, Schema model) { CodegenModel cm = super.fromModel(name, model); if(ModelUtils.isArraySchema(model)) { - return new CodegenArrayModel(cm, (ArraySchema) model); + return new CodegenArrayModel(cm, model); } else { return cm; } @@ -156,12 +156,9 @@ public class ErlangProperCodegen extends DefaultCodegen implements CodegenConfig public String getTypeDeclaration(Schema schema) { String typeDeclaration = super.getSchemaType(schema); if(ModelUtils.isArraySchema(schema)) { - ArraySchema arraySchema = (ArraySchema) schema; - String complexType = getSchemaType(arraySchema.getItems()); - + String complexType = getSchemaType(ModelUtils.getSchemaItems(schema)); StringBuilder sb = new StringBuilder("list("); sb.append(complexType); - return sb.append(")").toString(); } else if (typeMapping.containsKey(typeDeclaration)) { return typeMapping.get(typeDeclaration); @@ -174,8 +171,7 @@ public class ErlangProperCodegen extends DefaultCodegen implements CodegenConfig public String getSchemaType(Schema schema) { String schemaType = super.getSchemaType(schema); if(ModelUtils.isArraySchema(schema)) { - ArraySchema arraySchema = (ArraySchema) schema; - String complexType = getSchemaType(arraySchema.getItems()); + String complexType = getSchemaType(ModelUtils.getSchemaItems(schema)); StringBuilder sb = new StringBuilder("list("); sb.append(complexType); @@ -446,7 +442,7 @@ public class ErlangProperCodegen extends DefaultCodegen implements CodegenConfig Integer minItems; Integer maxItems; - public CodegenArrayModel(CodegenModel cm, ArraySchema schema) { + public CodegenArrayModel(CodegenModel cm, Schema schema) { super(); // Copy all fields of CodegenModel diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GraphQLNodeJSExpressServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GraphQLNodeJSExpressServerCodegen.java index 8b8214259ff..8a32d2ccf5f 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GraphQLNodeJSExpressServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GraphQLNodeJSExpressServerCodegen.java @@ -124,8 +124,7 @@ public class GraphQLNodeJSExpressServerCodegen extends AbstractGraphQLCodegen im @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); // IMPORTANT NOTE we add the braces within template because there we have the possibility to differentiate // between some specific types for GraphQL: diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellHttpClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellHttpClientCodegen.java index 0e79940195c..a879e5b28a4 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellHttpClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellHttpClientCodegen.java @@ -653,8 +653,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); @@ -687,8 +686,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC String inner = getSchemaType(additionalProperties2); return "(Map.Map Text " + inner + ")"; } else if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - return getSchemaType(ap.getItems()); + return getSchemaType(ModelUtils.getSchemaItems(p)); } else { return null; } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellServantCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellServantCodegen.java index 8a4a191afa6..5856b1b0c2c 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellServantCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellServantCodegen.java @@ -372,8 +372,7 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); @@ -419,8 +418,7 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf String inner = getSchemaType(additionalProperties2); return "(Map.Map Text " + inner + ")"; } else if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - String inner = getSchemaType(ap.getItems()); + String inner = getSchemaType(ModelUtils.getSchemaItems(p)); // Return only the inner type; the wrapping with QueryList is done // somewhere else, where we have access to the collection format. return inner; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellYesodServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellYesodServerCodegen.java index eb55671fceb..0bd106d632e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellYesodServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellYesodServerCodegen.java @@ -295,8 +295,7 @@ public class HaskellYesodServerCodegen extends DefaultCodegen implements Codegen @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); @@ -342,8 +341,7 @@ public class HaskellYesodServerCodegen extends DefaultCodegen implements Codegen String inner = getSchemaType(additionalProperties2); return "(Map.Map Text " + inner + ")"; } else if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - String inner = getSchemaType(ap.getItems()); + String inner = getSchemaType(ModelUtils.getSchemaItems(p)); // Return only the inner type; the wrapping with QueryList is done // somewhere else, where we have access to the collection format. return inner; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JMeterClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JMeterClientCodegen.java index 5779f963123..3d8ac3561f8 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JMeterClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JMeterClientCodegen.java @@ -210,8 +210,7 @@ public class JMeterClientCodegen extends DefaultCodegen implements CodegenConfig @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptApolloClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptApolloClientCodegen.java index ed04eb222b7..0191719c9c7 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptApolloClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptApolloClientCodegen.java @@ -610,8 +610,7 @@ public class JavascriptApolloClientCodegen extends DefaultCodegen implements Cod @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); @@ -872,9 +871,9 @@ public class JavascriptApolloClientCodegen extends DefaultCodegen implements Cod codegenModel = JavascriptApolloClientCodegen.reconcileInlineEnums(codegenModel, parentCodegenModel); } if (ModelUtils.isArraySchema(model)) { - ArraySchema am = (ArraySchema) model; - if (codegenModel != null && am.getItems() != null) { - String itemType = getSchemaType(am.getItems()); + Schema inner = ModelUtils.getSchemaItems(model); + if (codegenModel != null && inner != null) { + String itemType = getSchemaType(inner); codegenModel.vendorExtensions.put("x-is-array", true); codegenModel.vendorExtensions.put("x-item-type", itemType); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClientCodegen.java index cbd5d088c95..9586efe7f7f 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClientCodegen.java @@ -610,8 +610,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); @@ -874,9 +873,8 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo } } if (ModelUtils.isArraySchema(model)) { - ArraySchema am = (ArraySchema) model; - if (codegenModel != null && am.getItems() != null) { - String itemType = getSchemaType(am.getItems()); + if (codegenModel != null && ModelUtils.getSchemaItems(model) != null) { + String itemType = getSchemaType(ModelUtils.getSchemaItems(model)); codegenModel.vendorExtensions.put("x-is-array", true); codegenModel.vendorExtensions.put("x-item-type", itemType); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClosureAngularClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClosureAngularClientCodegen.java index 38b57b1a7c1..69eb6243f77 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClosureAngularClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClosureAngularClientCodegen.java @@ -225,8 +225,7 @@ public class JavascriptClosureAngularClientCodegen extends DefaultCodegen implem @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + ""; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/LuaClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/LuaClientCodegen.java index 81037ee6dcd..5dec9a47004 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/LuaClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/LuaClientCodegen.java @@ -383,8 +383,7 @@ public class LuaClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getTypeDeclaration(inner); } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/N4jsClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/N4jsClientCodegen.java index 49a3166668e..972d8bbdb0d 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/N4jsClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/N4jsClientCodegen.java @@ -513,7 +513,7 @@ public class N4jsClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - Schema items = getSchemaItems((ArraySchema) p); + Schema items = ModelUtils.getSchemaItems(p); return getTypeDeclaration(unaliasSchema(items)) + "[]"; } else if (ModelUtils.isMapSchema(p)) { return "~Object+"; @@ -544,8 +544,7 @@ public class N4jsClientCodegen extends DefaultCodegen implements CodegenConfig { protected String getParameterDataType(Parameter parameter, Schema p) { // handle enums of various data types if (ModelUtils.isArraySchema(p)) { - ArraySchema mp1 = (ArraySchema) p; - Schema inner = mp1.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getParameterDataType(parameter, inner) + "[]"; } else if (ModelUtils.isMapSchema(p)) { return "~Object+"; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NimClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NimClientCodegen.java index 71486156b33..bed1cec85ec 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NimClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NimClientCodegen.java @@ -275,8 +275,7 @@ public class NimClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); if (inner == null) { return null; } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/OCamlClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/OCamlClientCodegen.java index e05314c77c9..4af3005fdd7 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/OCamlClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/OCamlClientCodegen.java @@ -279,8 +279,8 @@ public class OCamlClientCodegen extends DefaultCodegen implements CodegenConfig } private void collectEnumSchemas(String parentName, String sName, Schema schema) { - if (schema instanceof ArraySchema) { - collectEnumSchemas(parentName, sName, ((ArraySchema) schema).getItems()); + if (ModelUtils.isArraySchema(schema)) { + collectEnumSchemas(parentName, sName, ModelUtils.getSchemaItems(schema)); } else if (schema instanceof MapSchema && schema.getAdditionalProperties() instanceof Schema) { collectEnumSchemas(parentName, sName, (Schema) schema.getAdditionalProperties()); } else if (isEnumSchema(schema)) { @@ -317,11 +317,10 @@ public class OCamlClientCodegen extends DefaultCodegen implements CodegenConfig collectEnumSchemas(pName, (Schema) schema.getAdditionalProperties()); } - if (schema instanceof ArraySchema) { - ArraySchema s = (ArraySchema) schema; - if (s.getItems() != null) { + if (ModelUtils.isArraySchema(schema)) { + if (ModelUtils.getSchemaItems(schema) != null) { String pName = parentName != null ? parentName + "_" + sName : sName; - collectEnumSchemas(pName, s.getItems()); + collectEnumSchemas(pName, ModelUtils.getSchemaItems(schema)); } } } @@ -581,11 +580,10 @@ public class OCamlClientCodegen extends DefaultCodegen implements CodegenConfig @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); if (inner == null) { LOGGER.warn("{}(array property) does not have a proper inner type defined.Default to string", - ap.getName()); + p.getName()); inner = new StringSchema().description("TODO default missing array inner type to string"); } return getTypeDeclaration(inner) + " list"; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ObjcClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ObjcClientCodegen.java index bd46543760f..391b8eb46b9 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ObjcClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ObjcClientCodegen.java @@ -370,8 +370,7 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); String innerTypeDeclaration = getTypeDeclaration(inner); if (innerTypeDeclaration.endsWith("*")) { innerTypeDeclaration = innerTypeDeclaration.substring(0, innerTypeDeclaration.length() - 1); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PerlClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PerlClientCodegen.java index f5d72b984d7..19a552bb22c 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PerlClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PerlClientCodegen.java @@ -261,8 +261,7 @@ public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpDataTransferClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpDataTransferClientCodegen.java index d6171c79a4f..d15f92edf7a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpDataTransferClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpDataTransferClientCodegen.java @@ -271,7 +271,7 @@ public class PhpDataTransferClientCodegen extends AbstractPhpCodegen { Schema parameterSchema = ModelUtils.getReferencedSchema(openAPI, parameter.getSchema()); // array if (ModelUtils.isArraySchema(parameterSchema)) { - Schema itemSchema = ((ArraySchema) parameterSchema).getItems(); + Schema itemSchema = ModelUtils.getSchemaItems(parameterSchema); ArraySchema arraySchema = new ArraySchema(); arraySchema.setMinItems(parameterSchema.getMinItems()); arraySchema.setMaxItems(parameterSchema.getMaxItems()); @@ -419,7 +419,7 @@ public class PhpDataTransferClientCodegen extends AbstractPhpCodegen { } } else if (ModelUtils.isArraySchema(schema)) { //Recursively process schema of array items - generateContainerSchemas(openAPI, visitedSchemas, ((ArraySchema) schema).getItems()); + generateContainerSchemas(openAPI, visitedSchemas, ModelUtils.getSchemaItems(schema)); isContainer = Boolean.TRUE; } else if (ModelUtils.isMapSchema(schema)) { //Recursively process schema of map items diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpMezzioPathHandlerServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpMezzioPathHandlerServerCodegen.java index d7f8b7222e1..b08df67221f 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpMezzioPathHandlerServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpMezzioPathHandlerServerCodegen.java @@ -248,7 +248,7 @@ public class PhpMezzioPathHandlerServerCodegen extends AbstractPhpCodegen { Schema parameterSchema = ModelUtils.getReferencedSchema(openAPI, queryParameter.getSchema()); // array if (ModelUtils.isArraySchema(parameterSchema)) { - Schema itemSchema = ((ArraySchema) parameterSchema).getItems(); + Schema itemSchema = ModelUtils.getSchemaItems(parameterSchema); ArraySchema arraySchema = new ArraySchema(); arraySchema.setMinItems(parameterSchema.getMinItems()); arraySchema.setMaxItems(parameterSchema.getMaxItems()); @@ -397,7 +397,7 @@ public class PhpMezzioPathHandlerServerCodegen extends AbstractPhpCodegen { } } else if (ModelUtils.isArraySchema(schema)) { //Recursively process schema of array items - generateContainerSchemas(openAPI, visitedSchemas, ((ArraySchema) schema).getItems()); + generateContainerSchemas(openAPI, visitedSchemas, ModelUtils.getSchemaItems(schema)); isContainer = Boolean.TRUE; } else if (ModelUtils.isMapSchema(schema)) { //Recursively process schema of map items diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSilexServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSilexServerCodegen.java index 7d92a0ec091..22da687b9e6 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSilexServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSilexServerCodegen.java @@ -175,8 +175,7 @@ public class PhpSilexServerCodegen extends DefaultCodegen implements CodegenConf @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSymfonyServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSymfonyServerCodegen.java index 9334bad5ab1..823e9609929 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSymfonyServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSymfonyServerCodegen.java @@ -538,8 +538,7 @@ public class PhpSymfonyServerCodegen extends AbstractPhpCodegen implements Codeg @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getTypeDeclaration(inner); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PowerShellClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PowerShellClientCodegen.java index 10487e805c6..edf53eb5174 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PowerShellClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PowerShellClientCodegen.java @@ -998,8 +998,7 @@ public class PowerShellClientCodegen extends DefaultCodegen implements CodegenCo @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getTypeDeclaration(inner) + "[]"; } else if (ModelUtils.isMapSchema(p)) { return "System.Collections.Hashtable"; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java index 13a356a47d3..f1ca476646a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java @@ -608,8 +608,7 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java index 6132cc3a6e2..5fb5d415ee4 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java @@ -223,8 +223,7 @@ public class PythonFastAPIServerCodegen extends AbstractPythonCodegen { @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RClientCodegen.java index cb71b2fdaf6..8e1d295dcd1 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RClientCodegen.java @@ -535,8 +535,7 @@ public class RClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustAxumServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustAxumServerCodegen.java index e484122421f..1efb600d278 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustAxumServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustAxumServerCodegen.java @@ -682,8 +682,7 @@ public class RustAxumServerCodegen extends AbstractRustCodegen implements Codege @Override public String toInstantiationType(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return instantiationTypes.get("array") + "<" + getSchemaType(inner) + ">"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java index 0b0b8b070ae..3ad87d03aff 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java @@ -981,8 +981,7 @@ public class RustServerCodegen extends AbstractRustCodegen implements CodegenCon @Override public String toInstantiationType(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return instantiationTypes.get("array") + "<" + getSchemaType(inner) + ">"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); @@ -1000,21 +999,21 @@ public class RustServerCodegen extends AbstractRustCodegen implements CodegenCon CodegenModel mdl = super.fromModel(name, model); if (ModelUtils.isArraySchema(model)) { - ArraySchema am = (ArraySchema) model; + Schema inner = ModelUtils.getSchemaItems(model); String xmlName = null; // Detect XML list where the inner item is defined directly. - if ((am.getItems() != null) && - (am.getItems().getXml() != null)) { - xmlName = am.getItems().getXml().getName(); + if ((inner != null) && + (inner.getXml() != null)) { + xmlName = inner.getXml().getName(); } // Detect XML list where the inner item is a reference. - if (am.getXml() != null && am.getXml().getWrapped() && - am.getItems() != null && - !StringUtils.isEmpty(am.getItems().get$ref())) { + if (model.getXml() != null && model.getXml().getWrapped() && + inner != null && + !StringUtils.isEmpty(inner.get$ref())) { Schema inner_schema = allDefinitions.get( - ModelUtils.getSimpleRef(am.getItems().get$ref())); + ModelUtils.getSimpleRef(inner.get$ref())); if (inner_schema.getXml() != null && inner_schema.getXml().getName() != null) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java index c1fa721d5f5..a5df2e22ba4 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java @@ -295,9 +295,8 @@ public class ScalaAkkaClientCodegen extends AbstractScalaCodegen implements Code String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); return "Map[String, " + inner + "].empty "; } else if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - String inner = getSchemaType(ap.getItems()); - if (ModelUtils.isSet(ap)) { + String inner = getSchemaType(ModelUtils.getSchemaItems(p)); + if (ModelUtils.isSet(p)) { return "Set[" + inner + "].empty "; } return "Seq[" + inner + "].empty "; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaFinchServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaFinchServerCodegen.java index 9b68bc73649..7427c4ce786 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaFinchServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaFinchServerCodegen.java @@ -261,8 +261,7 @@ public class ScalaFinchServerCodegen extends DefaultCodegen implements CodegenCo @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaGatlingCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaGatlingCodegen.java index edaf45cdd91..5d99d8d80cc 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaGatlingCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaGatlingCodegen.java @@ -384,8 +384,7 @@ public class ScalaGatlingCodegen extends AbstractScalaCodegen implements Codegen @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttp4sServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttp4sServerCodegen.java index 1b633ac9918..d97f772e642 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttp4sServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttp4sServerCodegen.java @@ -711,8 +711,7 @@ public class ScalaHttp4sServerCodegen extends DefaultCodegen implements CodegenC @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaPekkoClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaPekkoClientCodegen.java index f277ab617fb..c4da7d22d21 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaPekkoClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaPekkoClientCodegen.java @@ -295,9 +295,8 @@ public class ScalaPekkoClientCodegen extends AbstractScalaCodegen implements Cod String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); return "Map[String, " + inner + "].empty "; } else if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - String inner = getSchemaType(ap.getItems()); - if (ModelUtils.isSet(ap)) { + String inner = getSchemaType(ModelUtils.getSchemaItems(p)); + if (ModelUtils.isSet(p)) { return "Set[" + inner + "].empty "; } return "Seq[" + inner + "].empty "; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaPlayFrameworkServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaPlayFrameworkServerCodegen.java index 45ba241c8fd..4c4d748ab95 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaPlayFrameworkServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaPlayFrameworkServerCodegen.java @@ -369,7 +369,7 @@ public class ScalaPlayFrameworkServerCodegen extends AbstractScalaCodegen implem } if (ModelUtils.isArraySchema(p)) { - Schema items = ((ArraySchema) p).getItems(); + Schema items = ModelUtils.getSchemaItems(p); String inner = getSchemaType(items); if (ModelUtils.isSet(p)) { return "Set.empty[" + inner + "]"; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttp4ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttp4ClientCodegen.java index d18a8303dc4..3d9d3d1f04a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttp4ClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttp4ClientCodegen.java @@ -413,9 +413,8 @@ public class ScalaSttp4ClientCodegen extends AbstractScalaCodegen implements Cod String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); return "Map[String, " + inner + "].empty "; } else if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - String inner = getSchemaType(ap.getItems()); - if (ModelUtils.isSet(ap)) { + String inner = getSchemaType(ModelUtils.getSchemaItems(p)); + if (ModelUtils.isSet(p)) { return "Set[" + inner + "].empty "; } return "Seq[" + inner + "].empty "; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java index 41bfaab09e0..4b4f73dd3e3 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java @@ -431,9 +431,8 @@ public class ScalaSttpClientCodegen extends AbstractScalaCodegen implements Code String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); return "Map[String, " + inner + "].empty "; } else if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - String inner = getSchemaType(ap.getItems()); - if (ModelUtils.isSet(ap)) { + String inner = getSchemaType(ModelUtils.getSchemaItems(p)); + if (ModelUtils.isSet(p)) { return "Set[" + inner + "].empty "; } return "Seq[" + inner + "].empty "; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalazClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalazClientCodegen.java index 8612cde4d88..720ed0e8853 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalazClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalazClientCodegen.java @@ -193,9 +193,8 @@ public class ScalazClientCodegen extends AbstractScalaCodegen implements Codegen return "Map.empty[String, " + inner + "] "; } else if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - String inner = getSchemaType(ap.getItems()); - String collectionType = ModelUtils.isSet(ap) ? typeMapping.get("set") : typeMapping.get("array"); + String inner = getSchemaType(ModelUtils.getSchemaItems(p)); + String collectionType = ModelUtils.isSet(p) ? typeMapping.get("set") : typeMapping.get("array"); // We assume that users would map these collections to a monoid with an identity function // There's no reason to assume mutable structure here (which may make consumption more difficult) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtml2Generator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtml2Generator.java index 6884e8e7df9..027df764bf7 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtml2Generator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtml2Generator.java @@ -133,8 +133,7 @@ public class StaticHtml2Generator extends DefaultCodegen implements CodegenConfi @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtmlGenerator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtmlGenerator.java index a01c4924c86..7ed7121d572 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtmlGenerator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtmlGenerator.java @@ -116,8 +116,7 @@ public class StaticHtmlGenerator extends DefaultCodegen implements CodegenConfig @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java index 918933121af..86344d9c08a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java @@ -394,8 +394,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig if (additionalProperties != null) { Schema inner = null; if (ModelUtils.isArraySchema(schema)) { - ArraySchema ap = (ArraySchema) schema; - inner = ap.getItems(); + inner = ModelUtils.getSchemaItems(schema); } else if (ModelUtils.isMapSchema(schema)) { inner = ModelUtils.getAdditionalProperties(schema); } @@ -676,8 +675,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return ModelUtils.isSet(p) ? "Set<" + getTypeDeclaration(inner) + ">" : "[" + getTypeDeclaration(inner) + "]"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); @@ -794,8 +792,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig if (ModelUtils.isMapSchema(p)) { return getSchemaType(ModelUtils.getAdditionalProperties(p)); } else if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - String inner = getSchemaType(ap.getItems()); + String inner = getSchemaType(ModelUtils.getSchemaItems(p)); return ModelUtils.isSet(p) ? "Set<" + inner + ">" : "[" + inner + "]"; } return null; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SwiftCombineClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SwiftCombineClientCodegen.java index 29e276e674e..74b19997939 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SwiftCombineClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SwiftCombineClientCodegen.java @@ -289,7 +289,7 @@ public class SwiftCombineClientCodegen extends DefaultCodegen implements Codegen Schema schema = ModelUtils.unaliasSchema(this.openAPI, p, importMapping); Schema target = ModelUtils.isGenerateAliasAsModel() ? p : schema; if (ModelUtils.isArraySchema(target)) { - Schema items = getSchemaItems((ArraySchema) schema); + Schema items = ModelUtils.getSchemaItems(schema); return ModelUtils.isSet(target) && ModelUtils.isObjectSchema(items) ? "Set<" + getTypeDeclaration(items) + ">" : "[" + getTypeDeclaration(items) + "]"; } else if (ModelUtils.isMapSchema(target)) { // Note: ModelUtils.isMapSchema(p) returns true when p is a composed schema that also defines @@ -422,8 +422,7 @@ public class SwiftCombineClientCodegen extends DefaultCodegen implements Codegen if (ModelUtils.isMapSchema(p)) { return getSchemaType(ModelUtils.getAdditionalProperties(p)); } else if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - String inner = getSchemaType(ap.getItems()); + String inner = getSchemaType(ModelUtils.getSchemaItems(p)); return ModelUtils.isSet(p) ? "Set<" + inner + ">" : "[" + inner + "]"; } return null; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptClientCodegen.java index 696bf349ca5..4e78a623b0e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptClientCodegen.java @@ -482,7 +482,7 @@ public class TypeScriptClientCodegen extends AbstractTypeScriptClientCodegen imp public String getTypeDeclaration(Schema p) { Schema inner; if (ModelUtils.isArraySchema(p)) { - inner = ((ArraySchema) p).getItems(); + inner = ModelUtils.getSchemaItems(p); return this.getSchemaType(p) + "<" + this.getTypeDeclaration(unaliasSchema(inner)) + ">"; } else if (ModelUtils.isMapSchema(p)) { inner = getSchemaAdditionalProperties(p); @@ -787,8 +787,7 @@ public class TypeScriptClientCodegen extends AbstractTypeScriptClientCodegen imp } return fullPrefix + example + closeChars; } else if (ModelUtils.isArraySchema(schema)) { - ArraySchema arrayschema = (ArraySchema) schema; - Schema itemSchema = arrayschema.getItems(); + Schema itemSchema = ModelUtils.getSchemaItems(schema); String itemModelName = getModelName(itemSchema); if (objExample instanceof Iterable && itemModelName == null) { // If the example is already a list, return it directly instead of wrongly wrap it in another list @@ -919,8 +918,7 @@ public class TypeScriptClientCodegen extends AbstractTypeScriptClientCodegen imp } else if (simpleStringSchema(schema)) { return propName + "_example"; } else if (ModelUtils.isArraySchema(schema)) { - ArraySchema arraySchema = (ArraySchema) schema; - Schema itemSchema = arraySchema.getItems(); + Schema itemSchema = ModelUtils.getSchemaItems(schema); example = getObjectExample(itemSchema); if (example != null) { return example; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptNodeClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptNodeClientCodegen.java index b80b2e9b8b6..c4068a21fef 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptNodeClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptNodeClientCodegen.java @@ -337,7 +337,7 @@ public class TypeScriptNodeClientCodegen extends AbstractTypeScriptClientCodegen Schema additionalProperties = ModelUtils.getAdditionalProperties(schema); codegenModel.additionalPropertiesType = getSchemaType(additionalProperties); if ("array".equalsIgnoreCase(codegenModel.additionalPropertiesType)) { - codegenModel.additionalPropertiesType += '<' + getSchemaType(((ArraySchema) additionalProperties).getItems()) + '>'; + codegenModel.additionalPropertiesType += '<' + getSchemaType((ModelUtils.getSchemaItems(additionalProperties))) + '>'; } addImport(codegenModel, codegenModel.additionalPropertiesType); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/XojoClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/XojoClientCodegen.java index 9359f41d5ee..2f05000f345 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/XojoClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/XojoClientCodegen.java @@ -235,8 +235,7 @@ public class XojoClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); + Schema inner = ModelUtils.getSchemaItems(p); return super.getTypeDeclaration(inner); } return super.getTypeDeclaration(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java index 99f2d70ee6f..de5b7013775 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java @@ -20,6 +20,7 @@ package org.openapitools.codegen.utils; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.v3.core.util.AnnotationsUtils; +import io.swagger.v3.core.util.Json; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.PathItem; @@ -356,8 +357,8 @@ public class ModelUtils { visitSchema(openAPI, s, mimeType, visitedSchemas, visitor); } } - } else if (schema instanceof ArraySchema) { - Schema itemsSchema = ((ArraySchema) schema).getItems(); + } else if (ModelUtils.isArraySchema(schema)) { + Schema itemsSchema = ModelUtils.getSchemaItems(schema); if (itemsSchema != null) { visitSchema(openAPI, itemsSchema, mimeType, visitedSchemas, visitor); } @@ -594,7 +595,44 @@ public class ModelUtils { * @return true if the specified schema is an Array schema. */ public static boolean isArraySchema(Schema schema) { - return (schema instanceof ArraySchema); + if (schema == null) { + return false; + } + + if (schema instanceof JsonSchema) { // 3.1 spec + if (schema.getTypes() != null && schema.getTypes().contains("array")) { + return true; + } else { + return false; + } + } else { // 3.0 spec + return (schema instanceof ArraySchema) || "array".equals(schema.getType()); + } + + } + + /** + * Return the schema in the array's item. Null if schema is not an array. + * + * @param schema the OAS schema + * @return item schema. + */ + public static Schema getSchemaItems(Schema schema) { + if (!isArraySchema(schema)) { + return null; + } + + Schema items = schema.getItems(); + if (items == null) { + if (schema instanceof JsonSchema) { // 3.1 spec + // do nothing as the schema may contain prefixItems only + } else { // 3.0 spec, default to string + LOGGER.error("Undefined array inner type for `{}`. Default to String.", schema.getName()); + items = new StringSchema().description("TODO default missing array inner type to string"); + schema.setItems(items); + } + } + return items; } public static boolean isSet(Schema schema) { @@ -1272,7 +1310,7 @@ public class ModelUtils { } } } else if (isArraySchema(schema)) { - Schema itemsSchema = ((ArraySchema) schema).getItems(); + Schema itemsSchema = ModelUtils.getSchemaItems(schema); if (itemsSchema != null) { return hasSelfReference(openAPI, itemsSchema, visitedSchemaNames); } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/OpenAPINormalizerTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/OpenAPINormalizerTest.java index a65f58318d4..a57d7dfd881 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/OpenAPINormalizerTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/OpenAPINormalizerTest.java @@ -589,4 +589,53 @@ public class OpenAPINormalizerTest { assertEquals(((Schema) schema2.getProperties().get("my_enum")).getAnyOf(), null); assertEquals(((Schema) schema2.getProperties().get("my_enum")).get$ref(), "#/components/schemas/MyEnum"); } + + @Test + public void testOpenAPINormalizerProcessingArraySchema31Spec() { + // to test array schema processing in 3.1 spec + OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_1/issue_18291.yaml"); + + Schema schema = openAPI.getComponents().getSchemas().get("Foo"); + assertEquals(((Schema) schema.getProperties().get("arrayOfStrings")).getTypes().size(), 1); + assertEquals(((Schema) schema.getProperties().get("arrayOfStrings")).getTypes().contains("array"), true); + assertEquals(((Schema) schema.getProperties().get("arrayOfStrings")).getType(), null); + assertEquals(ModelUtils.isArraySchema((Schema) schema.getProperties().get("arrayOfStrings")), true); + assertEquals(((Schema) schema.getProperties().get("arrayOfStrings")).getItems().getType(), null); + assertEquals(((Schema) schema.getProperties().get("arrayOfStrings")).getItems().getTypes().contains("string"), true); + + Schema schema3 = openAPI.getComponents().getSchemas().get("Bar"); + assertEquals(((Schema) schema3.getAllOf().get(0)).get$ref(), "#/components/schemas/Foo"); + + Schema schema5 = ModelUtils.getSchema(openAPI, ModelUtils.getSimpleRef(((Schema) schema3.getAllOf().get(0)).get$ref())); + assertEquals(((Schema) schema5.getProperties().get("arrayOfStrings")).getTypes().size(), 1); + assertEquals(((Schema) schema5.getProperties().get("arrayOfStrings")).getTypes().contains("array"), true); + assertEquals(((Schema) schema5.getProperties().get("arrayOfStrings")).getType(), null); + assertEquals(ModelUtils.isArraySchema((Schema) schema5.getProperties().get("arrayOfStrings")), true); + assertEquals(((Schema) schema5.getProperties().get("arrayOfStrings")).getItems().getType(), null); + assertEquals(((Schema) schema5.getProperties().get("arrayOfStrings")).getItems().getTypes().contains("string"), true); + + Map inputRules = Map.of("NORMALIZE_31SPEC", "true"); + OpenAPINormalizer openAPINormalizer = new OpenAPINormalizer(openAPI, inputRules); + openAPINormalizer.normalize(); + + Schema schema2 = openAPI.getComponents().getSchemas().get("Foo"); + assertEquals(((Schema) schema2.getProperties().get("arrayOfStrings")).getTypes().size(), 1); + assertEquals(((Schema) schema2.getProperties().get("arrayOfStrings")).getTypes().contains("array"), true); + assertEquals(ModelUtils.isArraySchema((Schema) schema2.getProperties().get("arrayOfStrings")), true); + assertEquals(((Schema) schema2.getProperties().get("arrayOfStrings")).getItems().getTypes().contains("string"), true); + assertEquals(((Schema) schema2.getProperties().get("arrayOfStrings")).getItems().getType(), "string"); + assertEquals(((Schema) schema2.getProperties().get("arrayOfStrings")).getType(), "array"); + + Schema schema4 = openAPI.getComponents().getSchemas().get("Bar"); + assertEquals(((Schema) schema4.getAllOf().get(0)).get$ref(), "#/components/schemas/Foo"); + + Schema schema6 = ModelUtils.getSchema(openAPI, ModelUtils.getSimpleRef(((Schema) schema4.getAllOf().get(0)).get$ref())); + assertEquals(((Schema) schema6.getProperties().get("arrayOfStrings")).getTypes().size(), 1); + assertEquals(((Schema) schema6.getProperties().get("arrayOfStrings")).getTypes().contains("array"), true); + assertEquals(ModelUtils.isArraySchema((Schema) schema6.getProperties().get("arrayOfStrings")), true); + assertEquals(((Schema) schema6.getProperties().get("arrayOfStrings")).getItems().getTypes().contains("string"), true); + assertEquals(((Schema) schema6.getProperties().get("arrayOfStrings")).getItems().getType(), "string"); + assertEquals(((Schema) schema6.getProperties().get("arrayOfStrings")).getType(), "array"); + + } } diff --git a/modules/openapi-generator/src/test/resources/3_1/issue_18291.yaml b/modules/openapi-generator/src/test/resources/3_1/issue_18291.yaml new file mode 100644 index 00000000000..8f5b9db4e1a --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_1/issue_18291.yaml @@ -0,0 +1,36 @@ +openapi: 3.1.0 +info: + title: "" + version: "" + +paths: + /user/getInfo: + get: + operationId: getUserInfo + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/Bar' + description: | + OK + security: + - Session: [] + x-accepts: application/json + +components: + schemas: + Foo: + type: object + required: + - arrayOfStrings + properties: + arrayOfStrings: + type: array + items: + type: string + + Bar: + allOf: + - $ref: '#/components/schemas/Foo' \ No newline at end of file diff --git a/modules/openapi-generator/src/test/resources/3_1/java/petstore.yaml b/modules/openapi-generator/src/test/resources/3_1/java/petstore.yaml index 1524ddb2d76..1d238e67202 100644 --- a/modules/openapi-generator/src/test/resources/3_1/java/petstore.yaml +++ b/modules/openapi-generator/src/test/resources/3_1/java/petstore.yaml @@ -909,14 +909,15 @@ components: properties: {} type: object title: HTTPValidationError - AnyOfArray: - anyOf: - - type: array - items: - type: string - - type: array - items: - type: integer + # okhttp-gson doesnot support array of string + #AnyOfArray: + # anyOf: + # - type: array + # items: + # type: string + # - type: array + # items: + # type: integer ArrayPrefixItems: type: array description: | diff --git a/samples/client/petstore/java/okhttp-gson-3.1/.openapi-generator/FILES b/samples/client/petstore/java/okhttp-gson-3.1/.openapi-generator/FILES index 67ba8225ef5..1f507055a79 100644 --- a/samples/client/petstore/java/okhttp-gson-3.1/.openapi-generator/FILES +++ b/samples/client/petstore/java/okhttp-gson-3.1/.openapi-generator/FILES @@ -6,7 +6,6 @@ api/openapi.yaml build.gradle build.sbt docs/Animal.md -docs/AnyOfArray.md docs/AnyTypeTest.md docs/ArrayOfSameRef.md docs/Cat.md @@ -63,7 +62,6 @@ src/main/java/org/openapitools/client/auth/OAuthOkHttpClient.java src/main/java/org/openapitools/client/auth/RetryingOAuth.java src/main/java/org/openapitools/client/model/AbstractOpenApiSchema.java src/main/java/org/openapitools/client/model/Animal.java -src/main/java/org/openapitools/client/model/AnyOfArray.java src/main/java/org/openapitools/client/model/AnyTypeTest.java src/main/java/org/openapitools/client/model/ArrayOfSameRef.java src/main/java/org/openapitools/client/model/Cat.java diff --git a/samples/client/petstore/java/okhttp-gson-3.1/README.md b/samples/client/petstore/java/okhttp-gson-3.1/README.md index da8355dc0e8..eabf13fbf69 100644 --- a/samples/client/petstore/java/okhttp-gson-3.1/README.md +++ b/samples/client/petstore/java/okhttp-gson-3.1/README.md @@ -145,7 +145,6 @@ Class | Method | HTTP request | Description ## Documentation for Models - [Animal](docs/Animal.md) - - [AnyOfArray](docs/AnyOfArray.md) - [AnyTypeTest](docs/AnyTypeTest.md) - [ArrayOfSameRef](docs/ArrayOfSameRef.md) - [Cat](docs/Cat.md) diff --git a/samples/client/petstore/java/okhttp-gson-3.1/api/openapi.yaml b/samples/client/petstore/java/okhttp-gson-3.1/api/openapi.yaml index 0cfe3e02a4c..27061efd082 100644 --- a/samples/client/petstore/java/okhttp-gson-3.1/api/openapi.yaml +++ b/samples/client/petstore/java/okhttp-gson-3.1/api/openapi.yaml @@ -1022,12 +1022,6 @@ components: properties: {} title: HTTPValidationError type: object - AnyOfArray: - anyOf: - - items: - type: string - - items: - type: integer ArrayPrefixItems: description: | An item that was added to the queue. diff --git a/samples/client/petstore/java/okhttp-gson-3.1/docs/AnyOfArray.md b/samples/client/petstore/java/okhttp-gson-3.1/docs/AnyOfArray.md deleted file mode 100644 index 6befdfafc50..00000000000 --- a/samples/client/petstore/java/okhttp-gson-3.1/docs/AnyOfArray.md +++ /dev/null @@ -1,12 +0,0 @@ - - -# AnyOfArray - - -## Properties - -| Name | Type | Description | Notes | -|------------ | ------------- | ------------- | -------------| - - - diff --git a/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/JSON.java b/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/JSON.java index 93f068247a0..d5949d40548 100644 --- a/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/JSON.java +++ b/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/JSON.java @@ -129,7 +129,6 @@ public class JSON { gsonBuilder.registerTypeAdapter(OffsetDateTime.class, offsetDateTimeTypeAdapter); gsonBuilder.registerTypeAdapter(LocalDate.class, localDateTypeAdapter); gsonBuilder.registerTypeAdapter(byte[].class, byteArrayAdapter); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.AnyOfArray.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.AnyTypeTest.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.ArrayOfSameRef.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Cat.CustomTypeAdapterFactory()); diff --git a/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/model/AnyOfArray.java b/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/model/AnyOfArray.java deleted file mode 100644 index 8ad5f731abc..00000000000 --- a/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/model/AnyOfArray.java +++ /dev/null @@ -1,217 +0,0 @@ -/* - * OpenAPI Petstore - * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. - * - * The version of the OpenAPI document: 1.0.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -package org.openapitools.client.model; - -import java.util.Objects; - - - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonParseException; -import com.google.gson.TypeAdapter; -import com.google.gson.TypeAdapterFactory; -import com.google.gson.reflect.TypeToken; -import com.google.gson.JsonPrimitive; -import com.google.gson.annotations.JsonAdapter; -import com.google.gson.annotations.SerializedName; -import com.google.gson.stream.JsonReader; -import com.google.gson.stream.JsonWriter; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonArray; -import com.google.gson.JsonParseException; - -import org.openapitools.client.JSON; - -@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.5.0-SNAPSHOT") -public class AnyOfArray extends AbstractOpenApiSchema { - private static final Logger log = Logger.getLogger(AnyOfArray.class.getName()); - - public static class CustomTypeAdapterFactory implements TypeAdapterFactory { - @SuppressWarnings("unchecked") - @Override - public TypeAdapter create(Gson gson, TypeToken type) { - if (!AnyOfArray.class.isAssignableFrom(type.getRawType())) { - return null; // this class only serializes 'AnyOfArray' and its subtypes - } - final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); - final TypeAdapter adapterObject = gson.getDelegateAdapter(this, TypeToken.get(Object.class)); - - return (TypeAdapter) new TypeAdapter() { - @Override - public void write(JsonWriter out, AnyOfArray value) throws IOException { - if (value == null || value.getActualInstance() == null) { - elementAdapter.write(out, null); - return; - } - - // check if the actual instance is of the type `Object` - if (value.getActualInstance() instanceof Object) { - JsonPrimitive primitive = adapterObject.toJsonTree((Object)value.getActualInstance()).getAsJsonPrimitive(); - elementAdapter.write(out, primitive); - return; - } - throw new IOException("Failed to serialize as the type doesn't match anyOf schemae: Object"); - } - - @Override - public AnyOfArray read(JsonReader in) throws IOException { - Object deserialized = null; - JsonElement jsonElement = elementAdapter.read(in); - - ArrayList errorMessages = new ArrayList<>(); - TypeAdapter actualAdapter = elementAdapter; - - // deserialize Object - try { - // validate the JSON object to see if any exception is thrown - if(!jsonElement.getAsJsonPrimitive().isNumber()) { - throw new IllegalArgumentException(String.format("Expected json element to be of type Number in the JSON string but got `%s`", jsonElement.toString())); - } - actualAdapter = adapterObject; - AnyOfArray ret = new AnyOfArray(); - ret.setActualInstance(actualAdapter.fromJsonTree(jsonElement)); - return ret; - } catch (Exception e) { - // deserialization failed, continue - errorMessages.add(String.format("Deserialization for Object failed with `%s`.", e.getMessage())); - log.log(Level.FINER, "Input data does not match schema 'Object'", e); - } - - throw new IOException(String.format("Failed deserialization for AnyOfArray: no class matches result, expected at least 1. Detailed failure message for anyOf schemas: %s. JSON: %s", errorMessages, jsonElement.toString())); - } - }.nullSafe(); - } - } - - // store a list of schema names defined in anyOf - public static final Map> schemas = new HashMap>(); - - public AnyOfArray() { - super("anyOf", Boolean.FALSE); - } - - public AnyOfArray(Object o) { - super("anyOf", Boolean.FALSE); - setActualInstance(o); - } - - static { - schemas.put("Object", Object.class); - } - - @Override - public Map> getSchemas() { - return AnyOfArray.schemas; - } - - /** - * Set the instance that matches the anyOf child schema, check - * the instance parameter is valid against the anyOf child schemas: - * Object - * - * It could be an instance of the 'anyOf' schemas. - */ - @Override - public void setActualInstance(Object instance) { - if (instance instanceof Object) { - super.setActualInstance(instance); - return; - } - - throw new RuntimeException("Invalid instance type. Must be Object"); - } - - /** - * Get the actual instance, which can be the following: - * Object - * - * @return The actual instance (Object) - */ - @Override - public Object getActualInstance() { - return super.getActualInstance(); - } - - /** - * Get the actual instance of `Object`. If the actual instance is not `Object`, - * the ClassCastException will be thrown. - * - * @return The actual instance of `Object` - * @throws ClassCastException if the instance is not `Object` - */ - public Object getObject() throws ClassCastException { - return (Object)super.getActualInstance(); - } - - /** - * Validates the JSON Element and throws an exception if issues found - * - * @param jsonElement JSON Element - * @throws IOException if the JSON Element is invalid with respect to AnyOfArray - */ - public static void validateJsonElement(JsonElement jsonElement) throws IOException { - // validate anyOf schemas one by one - ArrayList errorMessages = new ArrayList<>(); - // validate the json string with Object - try { - if(!jsonElement.getAsJsonPrimitive().isNumber()) { - throw new IllegalArgumentException(String.format("Expected json element to be of type Number in the JSON string but got `%s`", jsonElement.toString())); - } - return; - } catch (Exception e) { - errorMessages.add(String.format("Deserialization for Object failed with `%s`.", e.getMessage())); - // continue to the next one - } - throw new IOException(String.format("The JSON string is invalid for AnyOfArray with anyOf schemas: Object. no class match the result, expected at least 1. Detailed failure message for anyOf schemas: %s. JSON: %s", errorMessages, jsonElement.toString())); - - } - - /** - * Create an instance of AnyOfArray given an JSON string - * - * @param jsonString JSON string - * @return An instance of AnyOfArray - * @throws IOException if the JSON string is invalid with respect to AnyOfArray - */ - public static AnyOfArray fromJson(String jsonString) throws IOException { - return JSON.getGson().fromJson(jsonString, AnyOfArray.class); - } - - /** - * Convert an instance of AnyOfArray to an JSON string - * - * @return JSON string - */ - public String toJson() { - return JSON.getGson().toJson(this); - } -} - diff --git a/samples/client/petstore/java/okhttp-gson-3.1/src/test/java/org/openapitools/client/model/AnyOfArrayTest.java b/samples/client/petstore/java/okhttp-gson-3.1/src/test/java/org/openapitools/client/model/AnyOfArrayTest.java deleted file mode 100644 index 095fae6926d..00000000000 --- a/samples/client/petstore/java/okhttp-gson-3.1/src/test/java/org/openapitools/client/model/AnyOfArrayTest.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * OpenAPI Petstore - * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. - * - * The version of the OpenAPI document: 1.0.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -package org.openapitools.client.model; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -/** - * Model tests for AnyOfArray - */ -public class AnyOfArrayTest { - private final AnyOfArray model = new AnyOfArray(); - - /** - * Model tests for AnyOfArray - */ - @Test - public void testAnyOfArray() { - // TODO: test AnyOfArray - } - -}