Better array handling in 3.1 spec (#18313)

* better array detection in 3.1 spec

* fix
This commit is contained in:
William Cheng 2024-04-07 15:48:19 +08:00 committed by GitHub
parent 3d2e38e347
commit 2168851e8a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
92 changed files with 314 additions and 568 deletions

View File

@ -1092,7 +1092,7 @@ public class DefaultCodegen implements CodegenConfig {
addOneOfNameExtension(s, n); addOneOfNameExtension(s, n);
} }
} else if (ModelUtils.isArraySchema(s)) { } else if (ModelUtils.isArraySchema(s)) {
Schema items = ((ArraySchema) s).getItems(); Schema items = ModelUtils.getSchemaItems(s);
if (ModelUtils.isComposedSchema(items)) { if (ModelUtils.isComposedSchema(items)) {
addOneOfNameExtension(items, nOneOf); addOneOfNameExtension(items, nOneOf);
addOneOfInterfaceModel(items, nOneOf); addOneOfInterfaceModel(items, nOneOf);
@ -2065,8 +2065,7 @@ public class DefaultCodegen implements CodegenConfig {
} }
return inner; return inner;
} else if (ModelUtils.isArraySchema(schema)) { } else if (ModelUtils.isArraySchema(schema)) {
ArraySchema arraySchema = (ArraySchema) schema; String inner = getSchemaType(ModelUtils.getSchemaItems(schema));
String inner = getSchemaType(getSchemaItems(arraySchema));
String parentType; String parentType;
if (ModelUtils.isSet(schema)) { if (ModelUtils.isSet(schema)) {
parentType = "set"; 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) { protected Schema<?> getSchemaAdditionalProperties(Schema schema) {
Schema<?> inner = ModelUtils.getAdditionalProperties(schema); Schema<?> inner = ModelUtils.getAdditionalProperties(schema);
@ -4190,8 +4181,7 @@ public class DefaultCodegen implements CodegenConfig {
// handle inner property // handle inner property
String itemName = getItemsName(p, name); String itemName = getItemsName(p, name);
ArraySchema arraySchema = (ArraySchema) p; Schema innerSchema = unaliasSchema(ModelUtils.getSchemaItems(p));
Schema innerSchema = unaliasSchema(getSchemaItems(arraySchema));
CodegenProperty cp = fromProperty(itemName, innerSchema, false); CodegenProperty cp = fromProperty(itemName, innerSchema, false);
updatePropertyForArray(property, cp); updatePropertyForArray(property, cp);
} else if (ModelUtils.isTypeObjectSchema(p)) { } else if (ModelUtils.isTypeObjectSchema(p)) {
@ -4501,8 +4491,7 @@ public class DefaultCodegen implements CodegenConfig {
CodegenProperty cm = fromProperty("response", responseSchema, false); CodegenProperty cm = fromProperty("response", responseSchema, false);
if (ModelUtils.isArraySchema(responseSchema)) { if (ModelUtils.isArraySchema(responseSchema)) {
ArraySchema as = (ArraySchema) responseSchema; CodegenProperty innerProperty = fromProperty("response", ModelUtils.getSchemaItems(responseSchema), false);
CodegenProperty innerProperty = fromProperty("response", getSchemaItems(as), false);
op.returnBaseType = innerProperty.baseType; op.returnBaseType = innerProperty.baseType;
} else if (ModelUtils.isMapSchema(responseSchema)) { } else if (ModelUtils.isMapSchema(responseSchema)) {
CodegenProperty innerProperty = fromProperty("response", ModelUtils.getAdditionalProperties(responseSchema), false); CodegenProperty innerProperty = fromProperty("response", ModelUtils.getAdditionalProperties(responseSchema), false);
@ -5027,8 +5016,7 @@ public class DefaultCodegen implements CodegenConfig {
r.isArray = true; r.isArray = true;
r.containerType = cp.containerType; r.containerType = cp.containerType;
r.containerTypeMapped = typeMapping.get(cp.containerType); r.containerTypeMapped = typeMapping.get(cp.containerType);
ArraySchema as = (ArraySchema) responseSchema; CodegenProperty items = fromProperty("response", ModelUtils.getSchemaItems(responseSchema), false);
CodegenProperty items = fromProperty("response", getSchemaItems(as), false);
r.setItems(items); r.setItems(items);
CodegenProperty innerCp = items; CodegenProperty innerCp = items;
@ -5404,8 +5392,7 @@ public class DefaultCodegen implements CodegenConfig {
} }
addVarsRequiredVarsAdditionalProps(parameterSchema, codegenParameter); addVarsRequiredVarsAdditionalProps(parameterSchema, codegenParameter);
} else if (ModelUtils.isArraySchema(parameterSchema)) { } else if (ModelUtils.isArraySchema(parameterSchema)) {
final ArraySchema arraySchema = (ArraySchema) parameterSchema; Schema inner = ModelUtils.getSchemaItems(parameterSchema);
Schema inner = getSchemaItems(arraySchema);
collectionFormat = getCollectionFormat(parameter); collectionFormat = getCollectionFormat(parameter);
// default to csv: // default to csv:
@ -7291,7 +7278,7 @@ public class DefaultCodegen implements CodegenConfig {
} else if (ModelUtils.isAnyType(ps)) { } else if (ModelUtils.isAnyType(ps)) {
// any schema with no type set, composed schemas often do this // any schema with no type set, composed schemas often do this
} else if (ModelUtils.isArraySchema(ps)) { } else if (ModelUtils.isArraySchema(ps)) {
Schema inner = getSchemaItems((ArraySchema) ps); Schema inner = ModelUtils.getSchemaItems(ps);
CodegenProperty arrayInnerProperty = fromProperty("inner", inner, false); CodegenProperty arrayInnerProperty = fromProperty("inner", inner, false);
codegenParameter.items = arrayInnerProperty; codegenParameter.items = arrayInnerProperty;
codegenParameter.mostInnerItems = arrayInnerProperty.mostInnerItems; codegenParameter.mostInnerItems = arrayInnerProperty.mostInnerItems;
@ -7572,11 +7559,10 @@ public class DefaultCodegen implements CodegenConfig {
if (ModelUtils.isGenerateAliasAsModel(schema) && StringUtils.isNotBlank(name)) { if (ModelUtils.isGenerateAliasAsModel(schema) && StringUtils.isNotBlank(name)) {
this.addBodyModelSchema(codegenParameter, name, schema, imports, bodyParameterName, true); this.addBodyModelSchema(codegenParameter, name, schema, imports, bodyParameterName, true);
} else { } else {
final ArraySchema arraySchema = (ArraySchema) schema; Schema inner = ModelUtils.getSchemaItems(schema);
Schema inner = getSchemaItems(arraySchema); CodegenProperty codegenProperty = fromProperty("property", schema, false);
CodegenProperty codegenProperty = fromProperty("property", arraySchema, false);
if (codegenProperty == null) { 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); imports.add(codegenProperty.baseType);
@ -7609,7 +7595,7 @@ public class DefaultCodegen implements CodegenConfig {
codegenParameter.items = codegenProperty.items; codegenParameter.items = codegenProperty.items;
codegenParameter.mostInnerItems = codegenProperty.mostInnerItems; codegenParameter.mostInnerItems = codegenProperty.mostInnerItems;
codegenParameter.dataType = getTypeDeclaration(arraySchema); codegenParameter.dataType = getTypeDeclaration(schema);
codegenParameter.baseType = getSchemaType(inner); codegenParameter.baseType = getSchemaType(inner);
codegenParameter.isContainer = Boolean.TRUE; codegenParameter.isContainer = Boolean.TRUE;
codegenParameter.isNullable = codegenProperty.isNullable; codegenParameter.isNullable = codegenProperty.isNullable;

View File

@ -338,10 +338,9 @@ public class InlineModelResolver {
return; return;
} }
// Check array items // Check array items
if (schema instanceof ArraySchema) { if (ModelUtils.isArraySchema(schema)) {
ArraySchema array = (ArraySchema) schema; Schema items = ModelUtils.getSchemaItems(schema);
Schema items = array.getItems(); if (items == null && schema.getPrefixItems() == null) {
if (items == null && array.getPrefixItems() == null) {
LOGGER.debug("Incorrect array schema with no items, prefixItems: {}", schema.toString()); LOGGER.debug("Incorrect array schema with no items, prefixItems: {}", schema.toString());
return; return;
} }
@ -357,7 +356,7 @@ public class InlineModelResolver {
if (isModelNeeded(items)) { if (isModelNeeded(items)) {
// If this schema should be split into its own model, do so // 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 // Check allOf, anyOf, oneOf for inline models
@ -788,9 +787,8 @@ public class InlineModelResolver {
propsToUpdate.put(key, schema); propsToUpdate.put(key, schema);
modelsToAdd.put(modelName, model); modelsToAdd.put(modelName, model);
} }
} else if (property instanceof ArraySchema) { } else if (ModelUtils.isArraySchema(property)) {
ArraySchema ap = (ArraySchema) property; Schema inner = ModelUtils.getSchemaItems(property);
Schema inner = ap.getItems();
if (inner instanceof ObjectSchema) { if (inner instanceof ObjectSchema) {
ObjectSchema op = (ObjectSchema) inner; ObjectSchema op = (ObjectSchema) inner;
if (op.getProperties() != null && op.getProperties().size() > 0) { if (op.getProperties() != null && op.getProperties().size() > 0) {
@ -801,12 +799,12 @@ public class InlineModelResolver {
if (existing != null) { if (existing != null) {
Schema schema = new Schema().$ref(existing); Schema schema = new Schema().$ref(existing);
schema.setRequired(op.getRequired()); schema.setRequired(op.getRequired());
ap.setItems(schema); property.setItems(schema);
} else { } else {
modelName = addSchemas(modelName, innerModel); modelName = addSchemas(modelName, innerModel);
Schema schema = new Schema().$ref(modelName); Schema schema = new Schema().$ref(modelName);
schema.setRequired(op.getRequired()); schema.setRequired(op.getRequired());
ap.setItems(schema); property.setItems(schema);
} }
} }
} else if (ModelUtils.isComposedSchema(inner)) { } else if (ModelUtils.isComposedSchema(inner)) {
@ -815,7 +813,7 @@ public class InlineModelResolver {
innerModelName = addSchemas(innerModelName, inner); innerModelName = addSchemas(innerModelName, inner);
Schema schema = new Schema().$ref(innerModelName); Schema schema = new Schema().$ref(innerModelName);
schema.setRequired(inner.getRequired()); schema.setRequired(inner.getRequired());
ap.setItems(schema); property.setItems(schema);
} else { } else {
LOGGER.debug("Schema not yet handled in model resolver: {}", inner); LOGGER.debug("Schema not yet handled in model resolver: {}", inner);
} }

View File

@ -509,9 +509,10 @@ public class OpenAPINormalizer {
visitedSchemas.add(schema); visitedSchemas.add(schema);
} }
if (schema instanceof ArraySchema) { // array if (ModelUtils.isArraySchema(schema)) { // array
normalizeArraySchema(schema); Schema result = normalizeArraySchema(schema);
normalizeSchema(schema.getItems(), visitedSchemas); normalizeSchema(result.getItems(), visitedSchemas);
return result;
} else if (schema.getAdditionalProperties() instanceof Schema) { // map } else if (schema.getAdditionalProperties() instanceof Schema) { // map
normalizeMapSchema(schema); normalizeMapSchema(schema);
normalizeSchema((Schema) schema.getAdditionalProperties(), visitedSchemas); normalizeSchema((Schema) schema.getAdditionalProperties(), visitedSchemas);
@ -566,7 +567,8 @@ public class OpenAPINormalizer {
} }
private Schema normalizeArraySchema(Schema schema) { private Schema normalizeArraySchema(Schema schema) {
return processSetArraytoNullable(schema); Schema result = processNormalize31Spec(schema, new HashSet<>());
return processSetArraytoNullable(result);
} }
private Schema normalizeMapSchema(Schema schema) { private Schema normalizeMapSchema(Schema schema) {
@ -1222,7 +1224,7 @@ public class OpenAPINormalizer {
// only one item (type) left // only one item (type) left
if (schema.getTypes().size() == 1) { if (schema.getTypes().size() == 1) {
String type = String.valueOf(schema.getTypes().iterator().next()); String type = String.valueOf(schema.getTypes().iterator().next());
if ("array".equals(type)) { if (ModelUtils.isArraySchema(schema)) {
ArraySchema as = new ArraySchema(); ArraySchema as = new ArraySchema();
as.setDescription(schema.getDescription()); as.setDescription(schema.getDescription());
as.setDefault(schema.getDefault()); as.setDefault(schema.getDefault());

View File

@ -84,10 +84,9 @@ public class ExampleGenerator {
} }
if (ModelUtils.isArraySchema(responseSchema)) { // array of schema if (ModelUtils.isArraySchema(responseSchema)) { // array of schema
ArraySchema as = (ArraySchema) responseSchema; if (ModelUtils.getSchemaItems(responseSchema) != null) { // array of primitive types
if (as.getItems() != null) { // array of primitive types
return generate((Map<String, Object>) responseSchema.getExample(), return generate((Map<String, Object>) responseSchema.getExample(),
new ArrayList<>(producesInfo), as); new ArrayList<>(producesInfo), responseSchema);
} else { } else {
// TODO log warning message as such case is not handled at the moment // TODO log warning message as such case is not handled at the moment
return null; return null;
@ -248,9 +247,9 @@ public class ExampleGenerator {
} }
return Boolean.TRUE; return Boolean.TRUE;
} else if (ModelUtils.isArraySchema(property)) { } else if (ModelUtils.isArraySchema(property)) {
Schema innerType = ((ArraySchema) property).getItems(); Schema innerType = ModelUtils.getSchemaItems(property);
if (innerType != null) { 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 // avoid memory issues by limiting to max. 5 items
arrayLength = Math.min(arrayLength, 5); arrayLength = Math.min(arrayLength, 5);
Object[] objectProperties = new Object[arrayLength]; Object[] objectProperties = new Object[arrayLength];

View File

@ -128,8 +128,7 @@ public class XmlExampleGenerator {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
if (ModelUtils.isArraySchema(schema)) { if (ModelUtils.isArraySchema(schema)) {
ArraySchema as = (ArraySchema) schema; Schema inner = ModelUtils.getSchemaItems(schema);
Schema inner = as.getItems();
boolean wrapped = false; boolean wrapped = false;
if (schema.getXml() != null && schema.getXml().getWrapped() != null && schema.getXml().getWrapped()) { if (schema.getXml() != null && schema.getXml().getWrapped() != null && schema.getXml().getWrapped()) {
wrapped = true; wrapped = true;

View File

@ -532,8 +532,7 @@ abstract public class AbstractAdaCodegen extends DefaultCodegen implements Codeg
} }
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
String itemType = getTypeDeclaration(inner); String itemType = getTypeDeclaration(inner);
if (itemType.startsWith("OpenAPI.")) { if (itemType.startsWith("OpenAPI.")) {
return itemType + "_Vector"; return itemType + "_Vector";

View File

@ -188,10 +188,9 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
if (inner == null) { 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 // TODO maybe better defaulting to StringProperty than returning null
return null; return null;
} }
@ -220,13 +219,12 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
@Override @Override
public String toDefaultValue(Schema p) { public String toDefaultValue(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
final ArraySchema ap = (ArraySchema) p;
final String pattern = "new ArrayList<%s>()"; final String pattern = "new ArrayList<%s>()";
if (ap.getItems() == null) { if (ModelUtils.getSchemaItems(p) == null) {
return 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)) { } else if (ModelUtils.isMapSchema(p)) {
final MapSchema ap = (MapSchema) p; final MapSchema ap = (MapSchema) p;
final String pattern = "new HashMap<%s>()"; final String pattern = "new HashMap<%s>()";
@ -318,7 +316,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
example = "new " + getTypeDeclaration(p) + "{" + toExampleValue( example = "new " + getTypeDeclaration(p) + "{" + toExampleValue(
((ArraySchema) p).getItems()) + "}"; ModelUtils.getSchemaItems(p)) + "}";
} else if (ModelUtils.isBooleanSchema(p)) { } else if (ModelUtils.isBooleanSchema(p)) {
example = String.valueOf(!"false".equals(example)); example = String.valueOf(!"false".equals(example));
} else if (ModelUtils.isByteArraySchema(p)) { } else if (ModelUtils.isByteArraySchema(p)) {

View File

@ -1433,12 +1433,12 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
* @param arr The input array property * @param arr The input array property
* @return The type declaration when the type is an array of arrays. * @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 // TODO: collection type here should be fully qualified namespace to avoid model conflicts
// This supports arrays of arrays. // This supports arrays of arrays.
String arrayType = typeMapping.get("array"); String arrayType = typeMapping.get("array");
StringBuilder instantiationType = new StringBuilder(arrayType); StringBuilder instantiationType = new StringBuilder(arrayType);
Schema items = arr.getItems(); Schema items = ModelUtils.getSchemaItems(arr);
String nestedType = getTypeDeclaration(items); String nestedType = getTypeDeclaration(items);
// TODO: We may want to differentiate here between generics and primitive arrays. // TODO: We may want to differentiate here between generics and primitive arrays.
instantiationType.append("<").append(nestedType).append(">"); instantiationType.append("<").append(nestedType).append(">");
@ -1448,7 +1448,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
@Override @Override
public String toInstantiationType(Schema p) { public String toInstantiationType(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
return getArrayTypeDeclaration((ArraySchema) p); return getArrayTypeDeclaration(p);
} }
return super.toInstantiationType(p); return super.toInstantiationType(p);
} }
@ -1456,7 +1456,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
return getArrayTypeDeclaration((ArraySchema) p); return getArrayTypeDeclaration(p);
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
// Should we also support maps of maps? // Should we also support maps of maps?
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -512,7 +512,7 @@ public abstract class AbstractDartCodegen extends DefaultCodegen {
Schema<?> schema = unaliasSchema(p); Schema<?> schema = unaliasSchema(p);
Schema<?> target = ModelUtils.isGenerateAliasAsModel() ? p : schema; Schema<?> target = ModelUtils.isGenerateAliasAsModel() ? p : schema;
if (ModelUtils.isArraySchema(target)) { if (ModelUtils.isArraySchema(target)) {
Schema<?> items = getSchemaItems((ArraySchema) schema); Schema<?> items = ModelUtils.getSchemaItems(schema);
return getSchemaType(target) + "<" + getTypeDeclaration(items) + ">"; return getSchemaType(target) + "<" + getTypeDeclaration(items) + ">";
} }
if (ModelUtils.isMapSchema(target)) { if (ModelUtils.isMapSchema(target)) {

View File

@ -293,8 +293,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return "LIST [" + getTypeDeclaration(inner) + "]"; return "LIST [" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);
@ -578,8 +577,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
// String inner = toModelName(getSchemaType(additionalProperties2)); // String inner = toModelName(getSchemaType(additionalProperties2));
// return instantiationTypes.get("map") + " [" + inner + "]"; // return instantiationTypes.get("map") + " [" + inner + "]";
// } else if (ModelUtils.isArraySchema(p)) { // } else if (ModelUtils.isArraySchema(p)) {
// ArraySchema ap = (ArraySchema) p; // String inner = toModelName(getSchemaType(ModelUtils.getSchemaItems(p)));
// String inner = toModelName(getSchemaType(ap.getItems()));
// return instantiationTypes.get("array") + " [" + inner + "]"; // return instantiationTypes.get("array") + " [" + inner + "]";
// } else { // } else {
// return null; // return null;

View File

@ -855,12 +855,12 @@ public abstract class AbstractFSharpCodegen extends DefaultCodegen implements Co
* @param arr The input array property * @param arr The input array property
* @return The type declaration when the type is an array of arrays. * @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 // TODO: collection type here should be fully qualified namespace to avoid model conflicts
// This supports arrays of arrays. // This supports arrays of arrays.
String arrayType = typeMapping.get("array"); String arrayType = typeMapping.get("array");
StringBuilder instantiationType = new StringBuilder(arrayType); StringBuilder instantiationType = new StringBuilder(arrayType);
Schema items = arr.getItems(); Schema items = ModelUtils.getSchemaItems(arr);
String nestedType = getTypeDeclaration(items); String nestedType = getTypeDeclaration(items);
// TODO: We may want to differentiate here between generics and primitive arrays. // TODO: We may want to differentiate here between generics and primitive arrays.
return nestedType + "[]"; return nestedType + "[]";
@ -869,7 +869,7 @@ public abstract class AbstractFSharpCodegen extends DefaultCodegen implements Co
@Override @Override
public String toInstantiationType(Schema p) { public String toInstantiationType(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
return getArrayTypeDeclaration((ArraySchema) p); return getArrayTypeDeclaration(p);
} }
return super.toInstantiationType(p); return super.toInstantiationType(p);
} }
@ -877,7 +877,7 @@ public abstract class AbstractFSharpCodegen extends DefaultCodegen implements Co
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
return getArrayTypeDeclaration((ArraySchema) p); return getArrayTypeDeclaration(p);
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
// Should we also support maps of maps? // Should we also support maps of maps?
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -360,8 +360,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
// In OAS 3.0.x, the array "items" attribute is required. // 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 // In OAS >= 3.1, the array "items" attribute is optional such that the OAS
// specification is aligned with the JSON schema specification. // specification is aligned with the JSON schema specification.

View File

@ -273,8 +273,7 @@ public abstract class AbstractGraphQLCodegen extends DefaultCodegen implements C
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return "[" + getTypeDeclaration(inner) + "]"; return "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Object ap = p.getAdditionalProperties(); Object ap = p.getAdditionalProperties();

View File

@ -946,7 +946,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
Schema<?> schema = unaliasSchema(p); Schema<?> schema = unaliasSchema(p);
Schema<?> target = ModelUtils.isGenerateAliasAsModel() ? p : schema; Schema<?> target = ModelUtils.isGenerateAliasAsModel() ? p : schema;
if (ModelUtils.isArraySchema(target)) { if (ModelUtils.isArraySchema(target)) {
Schema<?> items = getSchemaItems((ArraySchema) schema); Schema<?> items = ModelUtils.getSchemaItems(schema);
return getSchemaType(target) + "<" + getBeanValidation(items) + getTypeDeclaration(items) + ">"; return getSchemaType(target) + "<" + getBeanValidation(items) + getTypeDeclaration(items) + ">";
} else if (ModelUtils.isMapSchema(target)) { } else if (ModelUtils.isMapSchema(target)) {
// Note: ModelUtils.isMapSchema(p) returns true when p is a composed schema that also defines // Note: ModelUtils.isMapSchema(p) returns true when p is a composed schema that also defines

View File

@ -346,8 +346,7 @@ public abstract class AbstractJuliaCodegen extends DefaultCodegen {
@Override @Override
public String getTypeDeclaration(Schema schema) { public String getTypeDeclaration(Schema schema) {
if (ModelUtils.isArraySchema(schema)) { if (ModelUtils.isArraySchema(schema)) {
ArraySchema ap = (ArraySchema) schema; Schema inner = ModelUtils.getSchemaItems(schema);
Schema inner = ap.getItems();
return getSchemaType(schema) + "{" + getTypeDeclaration(inner) + "}"; return getSchemaType(schema) + "{" + getTypeDeclaration(inner) + "}";
} else if (ModelUtils.isSet(schema)) { } else if (ModelUtils.isSet(schema)) {
Schema inner = ModelUtils.getAdditionalProperties(schema); Schema inner = ModelUtils.getAdditionalProperties(schema);

View File

@ -359,7 +359,7 @@ public abstract class AbstractKotlinCodegen extends DefaultCodegen implements Co
Schema<?> schema = unaliasSchema(p); Schema<?> schema = unaliasSchema(p);
Schema<?> target = ModelUtils.isGenerateAliasAsModel() ? p : schema; Schema<?> target = ModelUtils.isGenerateAliasAsModel() ? p : schema;
if (ModelUtils.isArraySchema(target)) { if (ModelUtils.isArraySchema(target)) {
Schema<?> items = getSchemaItems((ArraySchema) schema); Schema<?> items = ModelUtils.getSchemaItems( schema);
return getSchemaType(target) + "<" + getTypeDeclaration(items) + ">"; return getSchemaType(target) + "<" + getTypeDeclaration(items) + ">";
} else if (ModelUtils.isMapSchema(target)) { } else if (ModelUtils.isMapSchema(target)) {
// Note: ModelUtils.isMapSchema(p) returns true when p is a composed schema that also defines // 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(); StringBuilder defaultContent = new StringBuilder();
Schema<?> itemsSchema = getSchemaItems((ArraySchema) schema); Schema<?> itemsSchema = ModelUtils.getSchemaItems(schema);
_default.elements().forEachRemaining((element) -> { _default.elements().forEachRemaining((element) -> {
String defaultValue = element.asText(); String defaultValue = element.asText();
if (defaultValue != null) { if (defaultValue != null) {

View File

@ -355,11 +355,10 @@ public abstract class AbstractPhpCodegen extends DefaultCodegen implements Codeg
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
if (inner == null) { if (inner == null) {
LOGGER.warn("{}(array property) does not have a proper inner type defined.Default to string", 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"); inner = new StringSchema().description("TODO default missing array inner type to string");
} }
return getTypeDeclaration(inner) + "[]"; return getTypeDeclaration(inner) + "[]";

View File

@ -491,8 +491,7 @@ public abstract class AbstractPythonCodegen extends DefaultCodegen implements Co
if (StringUtils.isNotBlank(schema.getTitle()) && !"null".equals(schema.getTitle())) { if (StringUtils.isNotBlank(schema.getTitle()) && !"null".equals(schema.getTitle())) {
includedSchemas.add(schema); includedSchemas.add(schema);
} }
ArraySchema arrayschema = (ArraySchema) schema; example = "[\n" + indentationString + toExampleValueRecursive(ModelUtils.getSchemaItems(schema), includedSchemas, indentation + 1) + "\n" + indentationString + "]";
example = "[\n" + indentationString + toExampleValueRecursive(arrayschema.getItems(), includedSchemas, indentation + 1) + "\n" + indentationString + "]";
} else if (ModelUtils.isMapSchema(schema)) { } else if (ModelUtils.isMapSchema(schema)) {
if (StringUtils.isNotBlank(schema.getTitle()) && !"null".equals(schema.getTitle())) { if (StringUtils.isNotBlank(schema.getTitle()) && !"null".equals(schema.getTitle())) {
includedSchemas.add(schema); includedSchemas.add(schema);
@ -693,8 +692,7 @@ public abstract class AbstractPythonCodegen extends DefaultCodegen implements Co
p = ModelUtils.unaliasSchema(openAPI, p); p = ModelUtils.unaliasSchema(openAPI, p);
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getCollectionItemTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getCollectionItemTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -351,8 +351,7 @@ public abstract class AbstractPythonConnexionServerCodegen extends AbstractPytho
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -454,8 +454,7 @@ public abstract class AbstractPythonPydanticV1Codegen extends DefaultCodegen imp
if (StringUtils.isNotBlank(schema.getTitle()) && !"null".equals(schema.getTitle())) { if (StringUtils.isNotBlank(schema.getTitle()) && !"null".equals(schema.getTitle())) {
includedSchemas.add(schema); includedSchemas.add(schema);
} }
ArraySchema arrayschema = (ArraySchema) schema; example = "[\n" + indentationString + toExampleValueRecursive(ModelUtils.getSchemaItems(schema), includedSchemas, indentation + 1) + "\n" + indentationString + "]";
example = "[\n" + indentationString + toExampleValueRecursive(arrayschema.getItems(), includedSchemas, indentation + 1) + "\n" + indentationString + "]";
} else if (ModelUtils.isMapSchema(schema)) { } else if (ModelUtils.isMapSchema(schema)) {
if (StringUtils.isNotBlank(schema.getTitle()) && !"null".equals(schema.getTitle())) { if (StringUtils.isNotBlank(schema.getTitle()) && !"null".equals(schema.getTitle())) {
includedSchemas.add(schema); includedSchemas.add(schema);
@ -656,8 +655,7 @@ public abstract class AbstractPythonPydanticV1Codegen extends DefaultCodegen imp
p = ModelUtils.unaliasSchema(openAPI, p); p = ModelUtils.unaliasSchema(openAPI, p);
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -119,7 +119,7 @@ abstract public class AbstractRubyCodegen extends DefaultCodegen implements Code
@Override @Override
public String getTypeDeclaration(Schema schema) { public String getTypeDeclaration(Schema schema) {
if (ModelUtils.isArraySchema(schema)) { if (ModelUtils.isArraySchema(schema)) {
Schema inner = ((ArraySchema) schema).getItems(); Schema inner = ModelUtils.getSchemaItems(schema);
return getSchemaType(schema) + "<" + getTypeDeclaration(inner) + ">"; return getSchemaType(schema) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(schema)) { } else if (ModelUtils.isMapSchema(schema)) {
Schema inner = ModelUtils.getAdditionalProperties(schema); Schema inner = ModelUtils.getAdditionalProperties(schema);

View File

@ -236,8 +236,7 @@ public abstract class AbstractRustCodegen extends DefaultCodegen implements Code
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
String innerType = getTypeDeclaration(inner); String innerType = getTypeDeclaration(inner);
return typeMapping.get("array") + "<" + innerType + ">"; return typeMapping.get("array") + "<" + innerType + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {

View File

@ -371,7 +371,7 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen {
Schema<?> schema = unaliasSchema(p); Schema<?> schema = unaliasSchema(p);
Schema<?> target = ModelUtils.isGenerateAliasAsModel() ? p : schema; Schema<?> target = ModelUtils.isGenerateAliasAsModel() ? p : schema;
if (ModelUtils.isArraySchema(target)) { if (ModelUtils.isArraySchema(target)) {
Schema<?> items = getSchemaItems((ArraySchema) schema); Schema<?> items = ModelUtils.getSchemaItems(schema);
return getSchemaType(target) + "[" + getTypeDeclaration(items) + "]"; return getSchemaType(target) + "[" + getTypeDeclaration(items) + "]";
} else if (ModelUtils.isMapSchema(target)) { } else if (ModelUtils.isMapSchema(target)) {
Schema<?> inner = ModelUtils.getAdditionalProperties(target); Schema<?> inner = ModelUtils.getAdditionalProperties(target);
@ -404,9 +404,8 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen {
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return instantiationTypes.get("map") + "[String, " + inner + "]"; return instantiationTypes.get("map") + "[String, " + inner + "]";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; String inner = getSchemaType(ModelUtils.getSchemaItems(p));
String inner = getSchemaType(ap.getItems()); return (ModelUtils.isSet(p) ? instantiationTypes.get("set") : instantiationTypes.get("array")) + "[" + inner + "]";
return (ModelUtils.isSet(ap) ? instantiationTypes.get("set") : instantiationTypes.get("array")) + "[" + inner + "]";
} else { } else {
return null; return null;
} }
@ -433,10 +432,9 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen {
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return "new HashMap[String, " + inner + "]() "; return "new HashMap[String, " + inner + "]() ";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; String inner = getSchemaType(ModelUtils.getSchemaItems(p));
String inner = getSchemaType(ap.getItems());
String genericType; String genericType;
if (ModelUtils.isSet(ap)) { if (ModelUtils.isSet(p)) {
genericType = instantiationTypes.get("set"); genericType = instantiationTypes.get("set");
} else { } else {
genericType = instantiationTypes.get("array"); genericType = instantiationTypes.get("array");
@ -475,8 +473,7 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen {
public CodegenProperty fromProperty(String name, Schema p, boolean required) { public CodegenProperty fromProperty(String name, Schema p, boolean required) {
CodegenProperty prop = super.fromProperty(name, p, required); CodegenProperty prop = super.fromProperty(name, p, required);
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema as = (ArraySchema) p; if (ModelUtils.isSet(p)) {
if (ModelUtils.isSet(as)) {
prop.containerType = "set"; prop.containerType = "set";
} }
} }

View File

@ -624,7 +624,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
Schema<?> items = getSchemaItems((ArraySchema) p); Schema<?> items = ModelUtils.getSchemaItems(p);
return getSchemaType(p) + "<" + getTypeDeclaration(unaliasSchema(items)) + ">"; return getSchemaType(p) + "<" + getTypeDeclaration(unaliasSchema(items)) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema<?> inner = getSchemaAdditionalProperties(p); Schema<?> inner = getSchemaAdditionalProperties(p);
@ -647,8 +647,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp
// handle enums of various data types // handle enums of various data types
Schema inner; Schema inner;
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema mp1 = (ArraySchema) p; inner = ModelUtils.getSchemaItems(p);
inner = mp1.getItems();
return this.getSchemaType(p) + "<" + this.getParameterDataType(parameter, inner) + ">"; return this.getSchemaType(p) + "<" + this.getParameterDataType(parameter, inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
inner = ModelUtils.getAdditionalProperties(p); inner = ModelUtils.getAdditionalProperties(p);
@ -1177,8 +1176,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp
return filteredSchemas.stream().map(schema -> { return filteredSchemas.stream().map(schema -> {
String schemaType = getSchemaType(schema); String schemaType = getSchemaType(schema);
if (ModelUtils.isArraySchema(schema)) { if (ModelUtils.isArraySchema(schema)) {
ArraySchema ap = (ArraySchema) schema; Schema inner = ModelUtils.getSchemaItems(schema);
Schema inner = ap.getItems();
schemaType = schemaType + "<" + getSchemaType(inner) + ">"; schemaType = schemaType + "<" + getSchemaType(inner) + ">";
} }
return schemaType; return schemaType;

View File

@ -221,8 +221,7 @@ public class AndroidClientCodegen extends DefaultCodegen implements CodegenConfi
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -223,7 +223,7 @@ public class ApexClientCodegen extends AbstractApexCodegen {
public String toDefaultValue(Schema p) { public String toDefaultValue(Schema p) {
String out = null; String out = null;
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
Schema inner = ((ArraySchema) p).getItems(); Schema inner = ModelUtils.getSchemaItems(p);
out = String.format( out = String.format(
Locale.ROOT, Locale.ROOT,
"new List<%s>()", "new List<%s>()",

View File

@ -429,8 +429,7 @@ public class BashClientCodegen extends DefaultCodegen implements CodegenConfig {
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -1515,8 +1515,7 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen {
} }
return instantiationTypes.get("map") + "<String, " + inner + ">"; return instantiationTypes.get("map") + "<String, " + inner + ">";
} else if (ModelUtils.isArraySchema(schema)) { } else if (ModelUtils.isArraySchema(schema)) {
ArraySchema arraySchema = (ArraySchema) schema; String inner = getSchemaType(ModelUtils.getSchemaItems(schema));
String inner = getSchemaType(arraySchema.getItems());
return instantiationTypes.get("array") + "<" + inner + ">"; return instantiationTypes.get("array") + "<" + inner + ">";
} else { } else {
return null; return null;

View File

@ -1091,8 +1091,7 @@ public class CSharpReducedClientCodegen extends AbstractCSharpCodegen {
} }
return instantiationTypes.get("map") + "<String, " + inner + ">"; return instantiationTypes.get("map") + "<String, " + inner + ">";
} else if (ModelUtils.isArraySchema(schema)) { } else if (ModelUtils.isArraySchema(schema)) {
ArraySchema arraySchema = (ArraySchema) schema; String inner = getSchemaType(ModelUtils.getSchemaItems(schema));
String inner = getSchemaType(arraySchema.getItems());
return instantiationTypes.get("array") + "<" + inner + ">"; return instantiationTypes.get("array") + "<" + inner + ">";
} else { } else {
return null; return null;

View File

@ -165,10 +165,8 @@ public class ClojureClientCodegen extends DefaultCodegen implements CodegenConfi
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (p instanceof ArraySchema) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return "(s/coll-of " + getTypeDeclaration(inner) + ")"; return "(s/coll-of " + getTypeDeclaration(inner) + ")";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Object ap = p.getAdditionalProperties(); Object ap = p.getAdditionalProperties();

View File

@ -108,8 +108,7 @@ public class ConfluenceWikiCodegen extends DefaultCodegen implements CodegenConf
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -381,8 +381,7 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
String openAPIType = getSchemaType(p); String openAPIType = getSchemaType(p);
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} }
if (ModelUtils.isMapSchema(p)) { if (ModelUtils.isMapSchema(p)) {
@ -474,8 +473,7 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return "std::map<std::string, " + inner + ">()"; return "std::map<std::string, " + inner + ">()";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; String inner = getSchemaType(ModelUtils.getSchemaItems(p));
String inner = getSchemaType(ap.getItems());
if (!languageSpecificPrimitives.contains(inner)) { if (!languageSpecificPrimitives.contains(inner)) {
inner = "std::shared_ptr<" + inner + ">"; inner = "std::shared_ptr<" + inner + ">";
} }

View File

@ -189,8 +189,7 @@ public abstract class CppQtAbstractCodegen extends AbstractCppCodegen implements
String openAPIType = getSchemaType(p); String openAPIType = getSchemaType(p);
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);
@ -232,8 +231,7 @@ public abstract class CppQtAbstractCodegen extends AbstractCppCodegen implements
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);
return "QMap<QString, " + getTypeDeclaration(inner) + ">()"; return "QMap<QString, " + getTypeDeclaration(inner) + ">()";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return "QList<" + getTypeDeclaration(inner) + ">()"; return "QList<" + getTypeDeclaration(inner) + ">()";
} else if (ModelUtils.isStringSchema(p)) { } else if (ModelUtils.isStringSchema(p)) {
return "QString(\"\")"; return "QString(\"\")";

View File

@ -367,8 +367,7 @@ public class CppRestSdkClientCodegen extends AbstractCppCodegen {
String openAPIType = getSchemaType(p); String openAPIType = getSchemaType(p);
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);
@ -407,8 +406,7 @@ public class CppRestSdkClientCodegen extends AbstractCppCodegen {
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return "std::map<utility::string_t, " + inner + ">()"; return "std::map<utility::string_t, " + inner + ">()";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; String inner = getSchemaType(ModelUtils.getSchemaItems(p));
String inner = getSchemaType(ap.getItems());
if (!languageSpecificPrimitives.contains(inner)) { if (!languageSpecificPrimitives.contains(inner)) {
inner = "std::shared_ptr<" + inner + ">"; inner = "std::shared_ptr<" + inner + ">";
} }

View File

@ -379,8 +379,7 @@ public class CppRestbedServerCodegen extends AbstractCppCodegen {
String openAPIType = getSchemaType(p); String openAPIType = getSchemaType(p);
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);
@ -469,12 +468,10 @@ public class CppRestbedServerCodegen extends AbstractCppCodegen {
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return "std::map<std::string, " + inner + ">()"; return "std::map<std::string, " + inner + ">()";
} else if (ModelUtils.isSet(p)) { } else if (ModelUtils.isSet(p)) {
ArraySchema ap = (ArraySchema) p; String inner = getSchemaType(ModelUtils.getSchemaItems(p));
String inner = getSchemaType(ap.getItems());
return "std::set<" + inner + ">()"; return "std::set<" + inner + ">()";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; String inner = getSchemaType(ModelUtils.getSchemaItems(p));
String inner = getSchemaType(ap.getItems());
return "std::vector<" + inner + ">()"; return "std::vector<" + inner + ">()";
} else if (ModelUtils.isModel(p)) { } else if (ModelUtils.isModel(p)) {
String modelName = getTypeDeclaration(p); String modelName = getTypeDeclaration(p);

View File

@ -351,8 +351,7 @@ public class CppRestbedServerDeprecatedCodegen extends AbstractCppCodegen {
String openAPIType = getSchemaType(p); String openAPIType = getSchemaType(p);
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);
@ -433,8 +432,7 @@ public class CppRestbedServerDeprecatedCodegen extends AbstractCppCodegen {
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return "std::map<std::string, " + inner + ">()"; return "std::map<std::string, " + inner + ">()";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; String inner = getSchemaType(ModelUtils.getSchemaItems(p));
String inner = getSchemaType(ap.getItems());
if (!languageSpecificPrimitives.contains(inner)) { if (!languageSpecificPrimitives.contains(inner)) {
inner = "std::shared_ptr<" + inner + ">"; inner = "std::shared_ptr<" + inner + ">";
} }

View File

@ -416,8 +416,7 @@ public class CppUE4ClientCodegen extends AbstractCppCodegen {
String openAPIType = getSchemaType(p); String openAPIType = getSchemaType(p);
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; return getSchemaType(p) + "<" + getTypeDeclaration(ModelUtils.getSchemaItems(p)) + ">";
return getSchemaType(p) + "<" + getTypeDeclaration(ap.getItems()) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
return getSchemaType(p) + "<FString, " + getTypeDeclaration(ModelUtils.getAdditionalProperties(p)) + ">"; return getSchemaType(p) + "<FString, " + getTypeDeclaration(ModelUtils.getAdditionalProperties(p)) + ">";
} }

View File

@ -814,7 +814,7 @@ public class CrystalClientCodegen extends DefaultCodegen {
@Override @Override
public String getTypeDeclaration(Schema schema) { public String getTypeDeclaration(Schema schema) {
if (ModelUtils.isArraySchema(schema)) { if (ModelUtils.isArraySchema(schema)) {
Schema inner = ((ArraySchema) schema).getItems(); Schema inner = ModelUtils.getSchemaItems(schema);
return getSchemaType(schema) + "(" + getTypeDeclaration(inner) + ")"; return getSchemaType(schema) + "(" + getTypeDeclaration(inner) + ")";
} else if (ModelUtils.isMapSchema(schema)) { } else if (ModelUtils.isMapSchema(schema)) {
Schema inner = ModelUtils.getAdditionalProperties(schema); Schema inner = ModelUtils.getAdditionalProperties(schema);

View File

@ -557,8 +557,7 @@ public class ElixirClientCodegen extends DefaultCodegen {
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return "[" + getTypeDeclaration(inner) + "]"; return "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -244,8 +244,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
@Override @Override
public String toInstantiationType(Schema p) { public String toInstantiationType(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; String inner = getSchemaType(ModelUtils.getSchemaItems(p));
String inner = getSchemaType(ap.getItems());
return instantiationTypes.get("array") + " " + inner; return instantiationTypes.get("array") + " " + inner;
} else { } else {
return null; return null;
@ -464,8 +463,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getTypeDeclaration(inner); return getTypeDeclaration(inner);
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -141,7 +141,7 @@ public class ErlangProperCodegen extends DefaultCodegen implements CodegenConfig
public CodegenModel fromModel(String name, Schema model) { public CodegenModel fromModel(String name, Schema model) {
CodegenModel cm = super.fromModel(name, model); CodegenModel cm = super.fromModel(name, model);
if(ModelUtils.isArraySchema(model)) { if(ModelUtils.isArraySchema(model)) {
return new CodegenArrayModel(cm, (ArraySchema) model); return new CodegenArrayModel(cm, model);
} else { } else {
return cm; return cm;
} }
@ -156,12 +156,9 @@ public class ErlangProperCodegen extends DefaultCodegen implements CodegenConfig
public String getTypeDeclaration(Schema schema) { public String getTypeDeclaration(Schema schema) {
String typeDeclaration = super.getSchemaType(schema); String typeDeclaration = super.getSchemaType(schema);
if(ModelUtils.isArraySchema(schema)) { if(ModelUtils.isArraySchema(schema)) {
ArraySchema arraySchema = (ArraySchema) schema; String complexType = getSchemaType(ModelUtils.getSchemaItems(schema));
String complexType = getSchemaType(arraySchema.getItems());
StringBuilder sb = new StringBuilder("list("); StringBuilder sb = new StringBuilder("list(");
sb.append(complexType); sb.append(complexType);
return sb.append(")").toString(); return sb.append(")").toString();
} else if (typeMapping.containsKey(typeDeclaration)) { } else if (typeMapping.containsKey(typeDeclaration)) {
return typeMapping.get(typeDeclaration); return typeMapping.get(typeDeclaration);
@ -174,8 +171,7 @@ public class ErlangProperCodegen extends DefaultCodegen implements CodegenConfig
public String getSchemaType(Schema schema) { public String getSchemaType(Schema schema) {
String schemaType = super.getSchemaType(schema); String schemaType = super.getSchemaType(schema);
if(ModelUtils.isArraySchema(schema)) { if(ModelUtils.isArraySchema(schema)) {
ArraySchema arraySchema = (ArraySchema) schema; String complexType = getSchemaType(ModelUtils.getSchemaItems(schema));
String complexType = getSchemaType(arraySchema.getItems());
StringBuilder sb = new StringBuilder("list("); StringBuilder sb = new StringBuilder("list(");
sb.append(complexType); sb.append(complexType);
@ -446,7 +442,7 @@ public class ErlangProperCodegen extends DefaultCodegen implements CodegenConfig
Integer minItems; Integer minItems;
Integer maxItems; Integer maxItems;
public CodegenArrayModel(CodegenModel cm, ArraySchema schema) { public CodegenArrayModel(CodegenModel cm, Schema schema) {
super(); super();
// Copy all fields of CodegenModel // Copy all fields of CodegenModel

View File

@ -124,8 +124,7 @@ public class GraphQLNodeJSExpressServerCodegen extends AbstractGraphQLCodegen im
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
// IMPORTANT NOTE we add the braces within template because there we have the possibility to differentiate // IMPORTANT NOTE we add the braces within template because there we have the possibility to differentiate
// between some specific types for GraphQL: // between some specific types for GraphQL:

View File

@ -653,8 +653,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return "[" + getTypeDeclaration(inner) + "]"; return "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);
@ -687,8 +686,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
String inner = getSchemaType(additionalProperties2); String inner = getSchemaType(additionalProperties2);
return "(Map.Map Text " + inner + ")"; return "(Map.Map Text " + inner + ")";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; return getSchemaType(ModelUtils.getSchemaItems(p));
return getSchemaType(ap.getItems());
} else { } else {
return null; return null;
} }

View File

@ -372,8 +372,7 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return "[" + getTypeDeclaration(inner) + "]"; return "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);
@ -419,8 +418,7 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf
String inner = getSchemaType(additionalProperties2); String inner = getSchemaType(additionalProperties2);
return "(Map.Map Text " + inner + ")"; return "(Map.Map Text " + inner + ")";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; String inner = getSchemaType(ModelUtils.getSchemaItems(p));
String inner = getSchemaType(ap.getItems());
// Return only the inner type; the wrapping with QueryList is done // Return only the inner type; the wrapping with QueryList is done
// somewhere else, where we have access to the collection format. // somewhere else, where we have access to the collection format.
return inner; return inner;

View File

@ -295,8 +295,7 @@ public class HaskellYesodServerCodegen extends DefaultCodegen implements Codegen
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return "[" + getTypeDeclaration(inner) + "]"; return "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);
@ -342,8 +341,7 @@ public class HaskellYesodServerCodegen extends DefaultCodegen implements Codegen
String inner = getSchemaType(additionalProperties2); String inner = getSchemaType(additionalProperties2);
return "(Map.Map Text " + inner + ")"; return "(Map.Map Text " + inner + ")";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; String inner = getSchemaType(ModelUtils.getSchemaItems(p));
String inner = getSchemaType(ap.getItems());
// Return only the inner type; the wrapping with QueryList is done // Return only the inner type; the wrapping with QueryList is done
// somewhere else, where we have access to the collection format. // somewhere else, where we have access to the collection format.
return inner; return inner;

View File

@ -210,8 +210,7 @@ public class JMeterClientCodegen extends DefaultCodegen implements CodegenConfig
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -610,8 +610,7 @@ public class JavascriptApolloClientCodegen extends DefaultCodegen implements Cod
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return "[" + getTypeDeclaration(inner) + "]"; return "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);
@ -872,9 +871,9 @@ public class JavascriptApolloClientCodegen extends DefaultCodegen implements Cod
codegenModel = JavascriptApolloClientCodegen.reconcileInlineEnums(codegenModel, parentCodegenModel); codegenModel = JavascriptApolloClientCodegen.reconcileInlineEnums(codegenModel, parentCodegenModel);
} }
if (ModelUtils.isArraySchema(model)) { if (ModelUtils.isArraySchema(model)) {
ArraySchema am = (ArraySchema) model; Schema inner = ModelUtils.getSchemaItems(model);
if (codegenModel != null && am.getItems() != null) { if (codegenModel != null && inner != null) {
String itemType = getSchemaType(am.getItems()); String itemType = getSchemaType(inner);
codegenModel.vendorExtensions.put("x-is-array", true); codegenModel.vendorExtensions.put("x-is-array", true);
codegenModel.vendorExtensions.put("x-item-type", itemType); codegenModel.vendorExtensions.put("x-item-type", itemType);
} }

View File

@ -610,8 +610,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return "[" + getTypeDeclaration(inner) + "]"; return "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);
@ -874,9 +873,8 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo
} }
} }
if (ModelUtils.isArraySchema(model)) { if (ModelUtils.isArraySchema(model)) {
ArraySchema am = (ArraySchema) model; if (codegenModel != null && ModelUtils.getSchemaItems(model) != null) {
if (codegenModel != null && am.getItems() != null) { String itemType = getSchemaType(ModelUtils.getSchemaItems(model));
String itemType = getSchemaType(am.getItems());
codegenModel.vendorExtensions.put("x-is-array", true); codegenModel.vendorExtensions.put("x-is-array", true);
codegenModel.vendorExtensions.put("x-item-type", itemType); codegenModel.vendorExtensions.put("x-item-type", itemType);
} }

View File

@ -225,8 +225,7 @@ public class JavascriptClosureAngularClientCodegen extends DefaultCodegen implem
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "<!" + getTypeDeclaration(inner) + ">"; return getSchemaType(p) + "<!" + getTypeDeclaration(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -383,8 +383,7 @@ public class LuaClientCodegen extends DefaultCodegen implements CodegenConfig {
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getTypeDeclaration(inner); return getTypeDeclaration(inner);
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -513,7 +513,7 @@ public class N4jsClientCodegen extends DefaultCodegen implements CodegenConfig {
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
Schema<?> items = getSchemaItems((ArraySchema) p); Schema<?> items = ModelUtils.getSchemaItems(p);
return getTypeDeclaration(unaliasSchema(items)) + "[]"; return getTypeDeclaration(unaliasSchema(items)) + "[]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
return "~Object+"; return "~Object+";
@ -544,8 +544,7 @@ public class N4jsClientCodegen extends DefaultCodegen implements CodegenConfig {
protected String getParameterDataType(Parameter parameter, Schema p) { protected String getParameterDataType(Parameter parameter, Schema p) {
// handle enums of various data types // handle enums of various data types
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema mp1 = (ArraySchema) p; Schema<?> inner = ModelUtils.getSchemaItems(p);
Schema<?> inner = mp1.getItems();
return getParameterDataType(parameter, inner) + "[]"; return getParameterDataType(parameter, inner) + "[]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
return "~Object+"; return "~Object+";

View File

@ -275,8 +275,7 @@ public class NimClientCodegen extends DefaultCodegen implements CodegenConfig {
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
if (inner == null) { if (inner == null) {
return null; return null;
} }

View File

@ -279,8 +279,8 @@ public class OCamlClientCodegen extends DefaultCodegen implements CodegenConfig
} }
private void collectEnumSchemas(String parentName, String sName, Schema schema) { private void collectEnumSchemas(String parentName, String sName, Schema schema) {
if (schema instanceof ArraySchema) { if (ModelUtils.isArraySchema(schema)) {
collectEnumSchemas(parentName, sName, ((ArraySchema) schema).getItems()); collectEnumSchemas(parentName, sName, ModelUtils.getSchemaItems(schema));
} else if (schema instanceof MapSchema && schema.getAdditionalProperties() instanceof Schema) { } else if (schema instanceof MapSchema && schema.getAdditionalProperties() instanceof Schema) {
collectEnumSchemas(parentName, sName, (Schema) schema.getAdditionalProperties()); collectEnumSchemas(parentName, sName, (Schema) schema.getAdditionalProperties());
} else if (isEnumSchema(schema)) { } else if (isEnumSchema(schema)) {
@ -317,11 +317,10 @@ public class OCamlClientCodegen extends DefaultCodegen implements CodegenConfig
collectEnumSchemas(pName, (Schema) schema.getAdditionalProperties()); collectEnumSchemas(pName, (Schema) schema.getAdditionalProperties());
} }
if (schema instanceof ArraySchema) { if (ModelUtils.isArraySchema(schema)) {
ArraySchema s = (ArraySchema) schema; if (ModelUtils.getSchemaItems(schema) != null) {
if (s.getItems() != null) {
String pName = parentName != null ? parentName + "_" + sName : sName; 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 @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
if (inner == null) { if (inner == null) {
LOGGER.warn("{}(array property) does not have a proper inner type defined.Default to string", 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"); inner = new StringSchema().description("TODO default missing array inner type to string");
} }
return getTypeDeclaration(inner) + " list"; return getTypeDeclaration(inner) + " list";

View File

@ -370,8 +370,7 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
String innerTypeDeclaration = getTypeDeclaration(inner); String innerTypeDeclaration = getTypeDeclaration(inner);
if (innerTypeDeclaration.endsWith("*")) { if (innerTypeDeclaration.endsWith("*")) {
innerTypeDeclaration = innerTypeDeclaration.substring(0, innerTypeDeclaration.length() - 1); innerTypeDeclaration = innerTypeDeclaration.substring(0, innerTypeDeclaration.length() - 1);

View File

@ -261,8 +261,7 @@ public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig {
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -271,7 +271,7 @@ public class PhpDataTransferClientCodegen extends AbstractPhpCodegen {
Schema parameterSchema = ModelUtils.getReferencedSchema(openAPI, parameter.getSchema()); Schema parameterSchema = ModelUtils.getReferencedSchema(openAPI, parameter.getSchema());
// array // array
if (ModelUtils.isArraySchema(parameterSchema)) { if (ModelUtils.isArraySchema(parameterSchema)) {
Schema itemSchema = ((ArraySchema) parameterSchema).getItems(); Schema itemSchema = ModelUtils.getSchemaItems(parameterSchema);
ArraySchema arraySchema = new ArraySchema(); ArraySchema arraySchema = new ArraySchema();
arraySchema.setMinItems(parameterSchema.getMinItems()); arraySchema.setMinItems(parameterSchema.getMinItems());
arraySchema.setMaxItems(parameterSchema.getMaxItems()); arraySchema.setMaxItems(parameterSchema.getMaxItems());
@ -419,7 +419,7 @@ public class PhpDataTransferClientCodegen extends AbstractPhpCodegen {
} }
} else if (ModelUtils.isArraySchema(schema)) { } else if (ModelUtils.isArraySchema(schema)) {
//Recursively process schema of array items //Recursively process schema of array items
generateContainerSchemas(openAPI, visitedSchemas, ((ArraySchema) schema).getItems()); generateContainerSchemas(openAPI, visitedSchemas, ModelUtils.getSchemaItems(schema));
isContainer = Boolean.TRUE; isContainer = Boolean.TRUE;
} else if (ModelUtils.isMapSchema(schema)) { } else if (ModelUtils.isMapSchema(schema)) {
//Recursively process schema of map items //Recursively process schema of map items

View File

@ -248,7 +248,7 @@ public class PhpMezzioPathHandlerServerCodegen extends AbstractPhpCodegen {
Schema parameterSchema = ModelUtils.getReferencedSchema(openAPI, queryParameter.getSchema()); Schema parameterSchema = ModelUtils.getReferencedSchema(openAPI, queryParameter.getSchema());
// array // array
if (ModelUtils.isArraySchema(parameterSchema)) { if (ModelUtils.isArraySchema(parameterSchema)) {
Schema itemSchema = ((ArraySchema) parameterSchema).getItems(); Schema itemSchema = ModelUtils.getSchemaItems(parameterSchema);
ArraySchema arraySchema = new ArraySchema(); ArraySchema arraySchema = new ArraySchema();
arraySchema.setMinItems(parameterSchema.getMinItems()); arraySchema.setMinItems(parameterSchema.getMinItems());
arraySchema.setMaxItems(parameterSchema.getMaxItems()); arraySchema.setMaxItems(parameterSchema.getMaxItems());
@ -397,7 +397,7 @@ public class PhpMezzioPathHandlerServerCodegen extends AbstractPhpCodegen {
} }
} else if (ModelUtils.isArraySchema(schema)) { } else if (ModelUtils.isArraySchema(schema)) {
//Recursively process schema of array items //Recursively process schema of array items
generateContainerSchemas(openAPI, visitedSchemas, ((ArraySchema) schema).getItems()); generateContainerSchemas(openAPI, visitedSchemas, ModelUtils.getSchemaItems(schema));
isContainer = Boolean.TRUE; isContainer = Boolean.TRUE;
} else if (ModelUtils.isMapSchema(schema)) { } else if (ModelUtils.isMapSchema(schema)) {
//Recursively process schema of map items //Recursively process schema of map items

View File

@ -175,8 +175,7 @@ public class PhpSilexServerCodegen extends DefaultCodegen implements CodegenConf
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -538,8 +538,7 @@ public class PhpSymfonyServerCodegen extends AbstractPhpCodegen implements Codeg
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getTypeDeclaration(inner); return getTypeDeclaration(inner);
} }

View File

@ -998,8 +998,7 @@ public class PowerShellClientCodegen extends DefaultCodegen implements CodegenCo
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getTypeDeclaration(inner) + "[]"; return getTypeDeclaration(inner) + "[]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
return "System.Collections.Hashtable"; return "System.Collections.Hashtable";

View File

@ -608,8 +608,7 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -223,8 +223,7 @@ public class PythonFastAPIServerCodegen extends AbstractPythonCodegen {
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -535,8 +535,7 @@ public class RClientCodegen extends DefaultCodegen implements CodegenConfig {
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -682,8 +682,7 @@ public class RustAxumServerCodegen extends AbstractRustCodegen implements Codege
@Override @Override
public String toInstantiationType(Schema p) { public String toInstantiationType(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return instantiationTypes.get("array") + "<" + getSchemaType(inner) + ">"; return instantiationTypes.get("array") + "<" + getSchemaType(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -981,8 +981,7 @@ public class RustServerCodegen extends AbstractRustCodegen implements CodegenCon
@Override @Override
public String toInstantiationType(Schema p) { public String toInstantiationType(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return instantiationTypes.get("array") + "<" + getSchemaType(inner) + ">"; return instantiationTypes.get("array") + "<" + getSchemaType(inner) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);
@ -1000,21 +999,21 @@ public class RustServerCodegen extends AbstractRustCodegen implements CodegenCon
CodegenModel mdl = super.fromModel(name, model); CodegenModel mdl = super.fromModel(name, model);
if (ModelUtils.isArraySchema(model)) { if (ModelUtils.isArraySchema(model)) {
ArraySchema am = (ArraySchema) model; Schema inner = ModelUtils.getSchemaItems(model);
String xmlName = null; String xmlName = null;
// Detect XML list where the inner item is defined directly. // Detect XML list where the inner item is defined directly.
if ((am.getItems() != null) && if ((inner != null) &&
(am.getItems().getXml() != null)) { (inner.getXml() != null)) {
xmlName = am.getItems().getXml().getName(); xmlName = inner.getXml().getName();
} }
// Detect XML list where the inner item is a reference. // Detect XML list where the inner item is a reference.
if (am.getXml() != null && am.getXml().getWrapped() && if (model.getXml() != null && model.getXml().getWrapped() &&
am.getItems() != null && inner != null &&
!StringUtils.isEmpty(am.getItems().get$ref())) { !StringUtils.isEmpty(inner.get$ref())) {
Schema inner_schema = allDefinitions.get( Schema inner_schema = allDefinitions.get(
ModelUtils.getSimpleRef(am.getItems().get$ref())); ModelUtils.getSimpleRef(inner.get$ref()));
if (inner_schema.getXml() != null && if (inner_schema.getXml() != null &&
inner_schema.getXml().getName() != null) { inner_schema.getXml().getName() != null) {

View File

@ -295,9 +295,8 @@ public class ScalaAkkaClientCodegen extends AbstractScalaCodegen implements Code
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return "Map[String, " + inner + "].empty "; return "Map[String, " + inner + "].empty ";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; String inner = getSchemaType(ModelUtils.getSchemaItems(p));
String inner = getSchemaType(ap.getItems()); if (ModelUtils.isSet(p)) {
if (ModelUtils.isSet(ap)) {
return "Set[" + inner + "].empty "; return "Set[" + inner + "].empty ";
} }
return "Seq[" + inner + "].empty "; return "Seq[" + inner + "].empty ";

View File

@ -261,8 +261,7 @@ public class ScalaFinchServerCodegen extends DefaultCodegen implements CodegenCo
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -384,8 +384,7 @@ public class ScalaGatlingCodegen extends AbstractScalaCodegen implements Codegen
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -711,8 +711,7 @@ public class ScalaHttp4sServerCodegen extends DefaultCodegen implements CodegenC
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -295,9 +295,8 @@ public class ScalaPekkoClientCodegen extends AbstractScalaCodegen implements Cod
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return "Map[String, " + inner + "].empty "; return "Map[String, " + inner + "].empty ";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; String inner = getSchemaType(ModelUtils.getSchemaItems(p));
String inner = getSchemaType(ap.getItems()); if (ModelUtils.isSet(p)) {
if (ModelUtils.isSet(ap)) {
return "Set[" + inner + "].empty "; return "Set[" + inner + "].empty ";
} }
return "Seq[" + inner + "].empty "; return "Seq[" + inner + "].empty ";

View File

@ -369,7 +369,7 @@ public class ScalaPlayFrameworkServerCodegen extends AbstractScalaCodegen implem
} }
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
Schema items = ((ArraySchema) p).getItems(); Schema items = ModelUtils.getSchemaItems(p);
String inner = getSchemaType(items); String inner = getSchemaType(items);
if (ModelUtils.isSet(p)) { if (ModelUtils.isSet(p)) {
return "Set.empty[" + inner + "]"; return "Set.empty[" + inner + "]";

View File

@ -413,9 +413,8 @@ public class ScalaSttp4ClientCodegen extends AbstractScalaCodegen implements Cod
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return "Map[String, " + inner + "].empty "; return "Map[String, " + inner + "].empty ";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; String inner = getSchemaType(ModelUtils.getSchemaItems(p));
String inner = getSchemaType(ap.getItems()); if (ModelUtils.isSet(p)) {
if (ModelUtils.isSet(ap)) {
return "Set[" + inner + "].empty "; return "Set[" + inner + "].empty ";
} }
return "Seq[" + inner + "].empty "; return "Seq[" + inner + "].empty ";

View File

@ -431,9 +431,8 @@ public class ScalaSttpClientCodegen extends AbstractScalaCodegen implements Code
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p)); String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
return "Map[String, " + inner + "].empty "; return "Map[String, " + inner + "].empty ";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; String inner = getSchemaType(ModelUtils.getSchemaItems(p));
String inner = getSchemaType(ap.getItems()); if (ModelUtils.isSet(p)) {
if (ModelUtils.isSet(ap)) {
return "Set[" + inner + "].empty "; return "Set[" + inner + "].empty ";
} }
return "Seq[" + inner + "].empty "; return "Seq[" + inner + "].empty ";

View File

@ -193,9 +193,8 @@ public class ScalazClientCodegen extends AbstractScalaCodegen implements Codegen
return "Map.empty[String, " + inner + "] "; return "Map.empty[String, " + inner + "] ";
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; String inner = getSchemaType(ModelUtils.getSchemaItems(p));
String inner = getSchemaType(ap.getItems()); String collectionType = ModelUtils.isSet(p) ? typeMapping.get("set") : typeMapping.get("array");
String collectionType = ModelUtils.isSet(ap) ? typeMapping.get("set") : typeMapping.get("array");
// We assume that users would map these collections to a monoid with an identity function // 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) // There's no reason to assume mutable structure here (which may make consumption more difficult)

View File

@ -133,8 +133,7 @@ public class StaticHtml2Generator extends DefaultCodegen implements CodegenConfi
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -116,8 +116,7 @@ public class StaticHtmlGenerator extends DefaultCodegen implements CodegenConfig
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);

View File

@ -394,8 +394,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig
if (additionalProperties != null) { if (additionalProperties != null) {
Schema inner = null; Schema inner = null;
if (ModelUtils.isArraySchema(schema)) { if (ModelUtils.isArraySchema(schema)) {
ArraySchema ap = (ArraySchema) schema; inner = ModelUtils.getSchemaItems(schema);
inner = ap.getItems();
} else if (ModelUtils.isMapSchema(schema)) { } else if (ModelUtils.isMapSchema(schema)) {
inner = ModelUtils.getAdditionalProperties(schema); inner = ModelUtils.getAdditionalProperties(schema);
} }
@ -676,8 +675,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return ModelUtils.isSet(p) ? "Set<" + getTypeDeclaration(inner) + ">" : "[" + getTypeDeclaration(inner) + "]"; return ModelUtils.isSet(p) ? "Set<" + getTypeDeclaration(inner) + ">" : "[" + getTypeDeclaration(inner) + "]";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
Schema inner = ModelUtils.getAdditionalProperties(p); Schema inner = ModelUtils.getAdditionalProperties(p);
@ -794,8 +792,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig
if (ModelUtils.isMapSchema(p)) { if (ModelUtils.isMapSchema(p)) {
return getSchemaType(ModelUtils.getAdditionalProperties(p)); return getSchemaType(ModelUtils.getAdditionalProperties(p));
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; String inner = getSchemaType(ModelUtils.getSchemaItems(p));
String inner = getSchemaType(ap.getItems());
return ModelUtils.isSet(p) ? "Set<" + inner + ">" : "[" + inner + "]"; return ModelUtils.isSet(p) ? "Set<" + inner + ">" : "[" + inner + "]";
} }
return null; return null;

View File

@ -289,7 +289,7 @@ public class SwiftCombineClientCodegen extends DefaultCodegen implements Codegen
Schema<?> schema = ModelUtils.unaliasSchema(this.openAPI, p, importMapping); Schema<?> schema = ModelUtils.unaliasSchema(this.openAPI, p, importMapping);
Schema<?> target = ModelUtils.isGenerateAliasAsModel() ? p : schema; Schema<?> target = ModelUtils.isGenerateAliasAsModel() ? p : schema;
if (ModelUtils.isArraySchema(target)) { 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) + "]"; return ModelUtils.isSet(target) && ModelUtils.isObjectSchema(items) ? "Set<" + getTypeDeclaration(items) + ">" : "[" + getTypeDeclaration(items) + "]";
} else if (ModelUtils.isMapSchema(target)) { } else if (ModelUtils.isMapSchema(target)) {
// Note: ModelUtils.isMapSchema(p) returns true when p is a composed schema that also defines // 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)) { if (ModelUtils.isMapSchema(p)) {
return getSchemaType(ModelUtils.getAdditionalProperties(p)); return getSchemaType(ModelUtils.getAdditionalProperties(p));
} else if (ModelUtils.isArraySchema(p)) { } else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; String inner = getSchemaType(ModelUtils.getSchemaItems(p));
String inner = getSchemaType(ap.getItems());
return ModelUtils.isSet(p) ? "Set<" + inner + ">" : "[" + inner + "]"; return ModelUtils.isSet(p) ? "Set<" + inner + ">" : "[" + inner + "]";
} }
return null; return null;

View File

@ -482,7 +482,7 @@ public class TypeScriptClientCodegen extends AbstractTypeScriptClientCodegen imp
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
Schema inner; Schema inner;
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
inner = ((ArraySchema) p).getItems(); inner = ModelUtils.getSchemaItems(p);
return this.getSchemaType(p) + "<" + this.getTypeDeclaration(unaliasSchema(inner)) + ">"; return this.getSchemaType(p) + "<" + this.getTypeDeclaration(unaliasSchema(inner)) + ">";
} else if (ModelUtils.isMapSchema(p)) { } else if (ModelUtils.isMapSchema(p)) {
inner = getSchemaAdditionalProperties(p); inner = getSchemaAdditionalProperties(p);
@ -787,8 +787,7 @@ public class TypeScriptClientCodegen extends AbstractTypeScriptClientCodegen imp
} }
return fullPrefix + example + closeChars; return fullPrefix + example + closeChars;
} else if (ModelUtils.isArraySchema(schema)) { } else if (ModelUtils.isArraySchema(schema)) {
ArraySchema arrayschema = (ArraySchema) schema; Schema itemSchema = ModelUtils.getSchemaItems(schema);
Schema itemSchema = arrayschema.getItems();
String itemModelName = getModelName(itemSchema); String itemModelName = getModelName(itemSchema);
if (objExample instanceof Iterable && itemModelName == null) { if (objExample instanceof Iterable && itemModelName == null) {
// If the example is already a list, return it directly instead of wrongly wrap it in another list // 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)) { } else if (simpleStringSchema(schema)) {
return propName + "_example"; return propName + "_example";
} else if (ModelUtils.isArraySchema(schema)) { } else if (ModelUtils.isArraySchema(schema)) {
ArraySchema arraySchema = (ArraySchema) schema; Schema itemSchema = ModelUtils.getSchemaItems(schema);
Schema itemSchema = arraySchema.getItems();
example = getObjectExample(itemSchema); example = getObjectExample(itemSchema);
if (example != null) { if (example != null) {
return example; return example;

View File

@ -337,7 +337,7 @@ public class TypeScriptNodeClientCodegen extends AbstractTypeScriptClientCodegen
Schema additionalProperties = ModelUtils.getAdditionalProperties(schema); Schema additionalProperties = ModelUtils.getAdditionalProperties(schema);
codegenModel.additionalPropertiesType = getSchemaType(additionalProperties); codegenModel.additionalPropertiesType = getSchemaType(additionalProperties);
if ("array".equalsIgnoreCase(codegenModel.additionalPropertiesType)) { if ("array".equalsIgnoreCase(codegenModel.additionalPropertiesType)) {
codegenModel.additionalPropertiesType += '<' + getSchemaType(((ArraySchema) additionalProperties).getItems()) + '>'; codegenModel.additionalPropertiesType += '<' + getSchemaType((ModelUtils.getSchemaItems(additionalProperties))) + '>';
} }
addImport(codegenModel, codegenModel.additionalPropertiesType); addImport(codegenModel, codegenModel.additionalPropertiesType);
} }

View File

@ -235,8 +235,7 @@ public class XojoClientCodegen extends DefaultCodegen implements CodegenConfig {
@Override @Override
public String getTypeDeclaration(Schema p) { public String getTypeDeclaration(Schema p) {
if (ModelUtils.isArraySchema(p)) { if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p; Schema inner = ModelUtils.getSchemaItems(p);
Schema inner = ap.getItems();
return super.getTypeDeclaration(inner); return super.getTypeDeclaration(inner);
} }
return super.getTypeDeclaration(p); return super.getTypeDeclaration(p);

View File

@ -20,6 +20,7 @@ package org.openapitools.codegen.utils;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.v3.core.util.AnnotationsUtils; 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.OpenAPI;
import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.PathItem; import io.swagger.v3.oas.models.PathItem;
@ -356,8 +357,8 @@ public class ModelUtils {
visitSchema(openAPI, s, mimeType, visitedSchemas, visitor); visitSchema(openAPI, s, mimeType, visitedSchemas, visitor);
} }
} }
} else if (schema instanceof ArraySchema) { } else if (ModelUtils.isArraySchema(schema)) {
Schema itemsSchema = ((ArraySchema) schema).getItems(); Schema itemsSchema = ModelUtils.getSchemaItems(schema);
if (itemsSchema != null) { if (itemsSchema != null) {
visitSchema(openAPI, itemsSchema, mimeType, visitedSchemas, visitor); visitSchema(openAPI, itemsSchema, mimeType, visitedSchemas, visitor);
} }
@ -594,7 +595,44 @@ public class ModelUtils {
* @return true if the specified schema is an Array schema. * @return true if the specified schema is an Array schema.
*/ */
public static boolean isArraySchema(Schema 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) { public static boolean isSet(Schema schema) {
@ -1272,7 +1310,7 @@ public class ModelUtils {
} }
} }
} else if (isArraySchema(schema)) { } else if (isArraySchema(schema)) {
Schema itemsSchema = ((ArraySchema) schema).getItems(); Schema itemsSchema = ModelUtils.getSchemaItems(schema);
if (itemsSchema != null) { if (itemsSchema != null) {
return hasSelfReference(openAPI, itemsSchema, visitedSchemaNames); return hasSelfReference(openAPI, itemsSchema, visitedSchemaNames);
} }

View File

@ -589,4 +589,53 @@ public class OpenAPINormalizerTest {
assertEquals(((Schema) schema2.getProperties().get("my_enum")).getAnyOf(), null); assertEquals(((Schema) schema2.getProperties().get("my_enum")).getAnyOf(), null);
assertEquals(((Schema) schema2.getProperties().get("my_enum")).get$ref(), "#/components/schemas/MyEnum"); 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<String, String> 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");
}
} }

View File

@ -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'

View File

@ -909,14 +909,15 @@ components:
properties: {} properties: {}
type: object type: object
title: HTTPValidationError title: HTTPValidationError
AnyOfArray: # okhttp-gson doesnot support array of string
anyOf: #AnyOfArray:
- type: array # anyOf:
items: # - type: array
type: string # items:
- type: array # type: string
items: # - type: array
type: integer # items:
# type: integer
ArrayPrefixItems: ArrayPrefixItems:
type: array type: array
description: | description: |

View File

@ -6,7 +6,6 @@ api/openapi.yaml
build.gradle build.gradle
build.sbt build.sbt
docs/Animal.md docs/Animal.md
docs/AnyOfArray.md
docs/AnyTypeTest.md docs/AnyTypeTest.md
docs/ArrayOfSameRef.md docs/ArrayOfSameRef.md
docs/Cat.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/auth/RetryingOAuth.java
src/main/java/org/openapitools/client/model/AbstractOpenApiSchema.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/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/AnyTypeTest.java
src/main/java/org/openapitools/client/model/ArrayOfSameRef.java src/main/java/org/openapitools/client/model/ArrayOfSameRef.java
src/main/java/org/openapitools/client/model/Cat.java src/main/java/org/openapitools/client/model/Cat.java

View File

@ -145,7 +145,6 @@ Class | Method | HTTP request | Description
## Documentation for Models ## Documentation for Models
- [Animal](docs/Animal.md) - [Animal](docs/Animal.md)
- [AnyOfArray](docs/AnyOfArray.md)
- [AnyTypeTest](docs/AnyTypeTest.md) - [AnyTypeTest](docs/AnyTypeTest.md)
- [ArrayOfSameRef](docs/ArrayOfSameRef.md) - [ArrayOfSameRef](docs/ArrayOfSameRef.md)
- [Cat](docs/Cat.md) - [Cat](docs/Cat.md)

View File

@ -1022,12 +1022,6 @@ components:
properties: {} properties: {}
title: HTTPValidationError title: HTTPValidationError
type: object type: object
AnyOfArray:
anyOf:
- items:
type: string
- items:
type: integer
ArrayPrefixItems: ArrayPrefixItems:
description: | description: |
An item that was added to the queue. An item that was added to the queue.

View File

@ -1,12 +0,0 @@
# AnyOfArray
## Properties
| Name | Type | Description | Notes |
|------------ | ------------- | ------------- | -------------|

View File

@ -129,7 +129,6 @@ public class JSON {
gsonBuilder.registerTypeAdapter(OffsetDateTime.class, offsetDateTimeTypeAdapter); gsonBuilder.registerTypeAdapter(OffsetDateTime.class, offsetDateTimeTypeAdapter);
gsonBuilder.registerTypeAdapter(LocalDate.class, localDateTypeAdapter); gsonBuilder.registerTypeAdapter(LocalDate.class, localDateTypeAdapter);
gsonBuilder.registerTypeAdapter(byte[].class, byteArrayAdapter); 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.AnyTypeTest.CustomTypeAdapterFactory());
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.ArrayOfSameRef.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.ArrayOfSameRef.CustomTypeAdapterFactory());
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Cat.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Cat.CustomTypeAdapterFactory());

View File

@ -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 <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
if (!AnyOfArray.class.isAssignableFrom(type.getRawType())) {
return null; // this class only serializes 'AnyOfArray' and its subtypes
}
final TypeAdapter<JsonElement> elementAdapter = gson.getAdapter(JsonElement.class);
final TypeAdapter<Object> adapterObject = gson.getDelegateAdapter(this, TypeToken.get(Object.class));
return (TypeAdapter<T>) new TypeAdapter<AnyOfArray>() {
@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<String> 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<String, Class<?>> schemas = new HashMap<String, Class<?>>();
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<String, Class<?>> 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<String> 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);
}
}

View File

@ -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
}
}