mirror of
https://github.com/OpenAPITools/openapi-generator.git
synced 2025-06-29 12:10:54 +00:00
Better array handling in 3.1 spec (#18313)
* better array detection in 3.1 spec * fix
This commit is contained in:
parent
3d2e38e347
commit
2168851e8a
@ -1092,7 +1092,7 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
addOneOfNameExtension(s, n);
|
||||
}
|
||||
} else if (ModelUtils.isArraySchema(s)) {
|
||||
Schema items = ((ArraySchema) s).getItems();
|
||||
Schema items = ModelUtils.getSchemaItems(s);
|
||||
if (ModelUtils.isComposedSchema(items)) {
|
||||
addOneOfNameExtension(items, nOneOf);
|
||||
addOneOfInterfaceModel(items, nOneOf);
|
||||
@ -2065,8 +2065,7 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
}
|
||||
return inner;
|
||||
} else if (ModelUtils.isArraySchema(schema)) {
|
||||
ArraySchema arraySchema = (ArraySchema) schema;
|
||||
String inner = getSchemaType(getSchemaItems(arraySchema));
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(schema));
|
||||
String parentType;
|
||||
if (ModelUtils.isSet(schema)) {
|
||||
parentType = "set";
|
||||
@ -2372,15 +2371,7 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
|
||||
}
|
||||
|
||||
protected Schema<?> getSchemaItems(ArraySchema schema) {
|
||||
Schema<?> items = schema.getItems();
|
||||
if (items == null) {
|
||||
LOGGER.error("Undefined array inner type for `{}`. Default to String.", schema.getName());
|
||||
items = new StringSchema().description("TODO default missing array inner type to string");
|
||||
schema.setItems(items);
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
|
||||
protected Schema<?> getSchemaAdditionalProperties(Schema schema) {
|
||||
Schema<?> inner = ModelUtils.getAdditionalProperties(schema);
|
||||
@ -3983,7 +3974,7 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
LOGGER.error("Undefined property/schema for `{}`. Default to type:string.", name);
|
||||
return null;
|
||||
}
|
||||
LOGGER.debug("debugging fromProperty for {} : {}", name, p);
|
||||
LOGGER.debug("debugging fromProperty for {}: {}", name, p);
|
||||
NamedSchema ns = new NamedSchema(name, p, required, schemaIsFromAdditionalProperties);
|
||||
CodegenProperty cpc = schemaCodegenPropertyCache.get(ns);
|
||||
if (cpc != null) {
|
||||
@ -4190,8 +4181,7 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
|
||||
// handle inner property
|
||||
String itemName = getItemsName(p, name);
|
||||
ArraySchema arraySchema = (ArraySchema) p;
|
||||
Schema innerSchema = unaliasSchema(getSchemaItems(arraySchema));
|
||||
Schema innerSchema = unaliasSchema(ModelUtils.getSchemaItems(p));
|
||||
CodegenProperty cp = fromProperty(itemName, innerSchema, false);
|
||||
updatePropertyForArray(property, cp);
|
||||
} else if (ModelUtils.isTypeObjectSchema(p)) {
|
||||
@ -4501,8 +4491,7 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
CodegenProperty cm = fromProperty("response", responseSchema, false);
|
||||
|
||||
if (ModelUtils.isArraySchema(responseSchema)) {
|
||||
ArraySchema as = (ArraySchema) responseSchema;
|
||||
CodegenProperty innerProperty = fromProperty("response", getSchemaItems(as), false);
|
||||
CodegenProperty innerProperty = fromProperty("response", ModelUtils.getSchemaItems(responseSchema), false);
|
||||
op.returnBaseType = innerProperty.baseType;
|
||||
} else if (ModelUtils.isMapSchema(responseSchema)) {
|
||||
CodegenProperty innerProperty = fromProperty("response", ModelUtils.getAdditionalProperties(responseSchema), false);
|
||||
@ -5027,8 +5016,7 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
r.isArray = true;
|
||||
r.containerType = cp.containerType;
|
||||
r.containerTypeMapped = typeMapping.get(cp.containerType);
|
||||
ArraySchema as = (ArraySchema) responseSchema;
|
||||
CodegenProperty items = fromProperty("response", getSchemaItems(as), false);
|
||||
CodegenProperty items = fromProperty("response", ModelUtils.getSchemaItems(responseSchema), false);
|
||||
r.setItems(items);
|
||||
CodegenProperty innerCp = items;
|
||||
|
||||
@ -5404,8 +5392,7 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
}
|
||||
addVarsRequiredVarsAdditionalProps(parameterSchema, codegenParameter);
|
||||
} else if (ModelUtils.isArraySchema(parameterSchema)) {
|
||||
final ArraySchema arraySchema = (ArraySchema) parameterSchema;
|
||||
Schema inner = getSchemaItems(arraySchema);
|
||||
Schema inner = ModelUtils.getSchemaItems(parameterSchema);
|
||||
|
||||
collectionFormat = getCollectionFormat(parameter);
|
||||
// default to csv:
|
||||
@ -7291,7 +7278,7 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
} else if (ModelUtils.isAnyType(ps)) {
|
||||
// any schema with no type set, composed schemas often do this
|
||||
} else if (ModelUtils.isArraySchema(ps)) {
|
||||
Schema inner = getSchemaItems((ArraySchema) ps);
|
||||
Schema inner = ModelUtils.getSchemaItems(ps);
|
||||
CodegenProperty arrayInnerProperty = fromProperty("inner", inner, false);
|
||||
codegenParameter.items = arrayInnerProperty;
|
||||
codegenParameter.mostInnerItems = arrayInnerProperty.mostInnerItems;
|
||||
@ -7572,11 +7559,10 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
if (ModelUtils.isGenerateAliasAsModel(schema) && StringUtils.isNotBlank(name)) {
|
||||
this.addBodyModelSchema(codegenParameter, name, schema, imports, bodyParameterName, true);
|
||||
} else {
|
||||
final ArraySchema arraySchema = (ArraySchema) schema;
|
||||
Schema inner = getSchemaItems(arraySchema);
|
||||
CodegenProperty codegenProperty = fromProperty("property", arraySchema, false);
|
||||
Schema inner = ModelUtils.getSchemaItems(schema);
|
||||
CodegenProperty codegenProperty = fromProperty("property", schema, false);
|
||||
if (codegenProperty == null) {
|
||||
throw new RuntimeException("CodegenProperty cannot be null. arraySchema for debugging: " + arraySchema);
|
||||
throw new RuntimeException("CodegenProperty cannot be null. arraySchema for debugging: " + schema);
|
||||
}
|
||||
|
||||
imports.add(codegenProperty.baseType);
|
||||
@ -7609,7 +7595,7 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
|
||||
codegenParameter.items = codegenProperty.items;
|
||||
codegenParameter.mostInnerItems = codegenProperty.mostInnerItems;
|
||||
codegenParameter.dataType = getTypeDeclaration(arraySchema);
|
||||
codegenParameter.dataType = getTypeDeclaration(schema);
|
||||
codegenParameter.baseType = getSchemaType(inner);
|
||||
codegenParameter.isContainer = Boolean.TRUE;
|
||||
codegenParameter.isNullable = codegenProperty.isNullable;
|
||||
|
@ -338,10 +338,9 @@ public class InlineModelResolver {
|
||||
return;
|
||||
}
|
||||
// Check array items
|
||||
if (schema instanceof ArraySchema) {
|
||||
ArraySchema array = (ArraySchema) schema;
|
||||
Schema items = array.getItems();
|
||||
if (items == null && array.getPrefixItems() == null) {
|
||||
if (ModelUtils.isArraySchema(schema)) {
|
||||
Schema items = ModelUtils.getSchemaItems(schema);
|
||||
if (items == null && schema.getPrefixItems() == null) {
|
||||
LOGGER.debug("Incorrect array schema with no items, prefixItems: {}", schema.toString());
|
||||
return;
|
||||
}
|
||||
@ -357,7 +356,7 @@ public class InlineModelResolver {
|
||||
|
||||
if (isModelNeeded(items)) {
|
||||
// If this schema should be split into its own model, do so
|
||||
array.setItems(this.makeSchemaInComponents(schemaName, items));
|
||||
schema.setItems(this.makeSchemaInComponents(schemaName, items));
|
||||
}
|
||||
}
|
||||
// Check allOf, anyOf, oneOf for inline models
|
||||
@ -788,9 +787,8 @@ public class InlineModelResolver {
|
||||
propsToUpdate.put(key, schema);
|
||||
modelsToAdd.put(modelName, model);
|
||||
}
|
||||
} else if (property instanceof ArraySchema) {
|
||||
ArraySchema ap = (ArraySchema) property;
|
||||
Schema inner = ap.getItems();
|
||||
} else if (ModelUtils.isArraySchema(property)) {
|
||||
Schema inner = ModelUtils.getSchemaItems(property);
|
||||
if (inner instanceof ObjectSchema) {
|
||||
ObjectSchema op = (ObjectSchema) inner;
|
||||
if (op.getProperties() != null && op.getProperties().size() > 0) {
|
||||
@ -801,12 +799,12 @@ public class InlineModelResolver {
|
||||
if (existing != null) {
|
||||
Schema schema = new Schema().$ref(existing);
|
||||
schema.setRequired(op.getRequired());
|
||||
ap.setItems(schema);
|
||||
property.setItems(schema);
|
||||
} else {
|
||||
modelName = addSchemas(modelName, innerModel);
|
||||
Schema schema = new Schema().$ref(modelName);
|
||||
schema.setRequired(op.getRequired());
|
||||
ap.setItems(schema);
|
||||
property.setItems(schema);
|
||||
}
|
||||
}
|
||||
} else if (ModelUtils.isComposedSchema(inner)) {
|
||||
@ -815,7 +813,7 @@ public class InlineModelResolver {
|
||||
innerModelName = addSchemas(innerModelName, inner);
|
||||
Schema schema = new Schema().$ref(innerModelName);
|
||||
schema.setRequired(inner.getRequired());
|
||||
ap.setItems(schema);
|
||||
property.setItems(schema);
|
||||
} else {
|
||||
LOGGER.debug("Schema not yet handled in model resolver: {}", inner);
|
||||
}
|
||||
|
@ -509,9 +509,10 @@ public class OpenAPINormalizer {
|
||||
visitedSchemas.add(schema);
|
||||
}
|
||||
|
||||
if (schema instanceof ArraySchema) { // array
|
||||
normalizeArraySchema(schema);
|
||||
normalizeSchema(schema.getItems(), visitedSchemas);
|
||||
if (ModelUtils.isArraySchema(schema)) { // array
|
||||
Schema result = normalizeArraySchema(schema);
|
||||
normalizeSchema(result.getItems(), visitedSchemas);
|
||||
return result;
|
||||
} else if (schema.getAdditionalProperties() instanceof Schema) { // map
|
||||
normalizeMapSchema(schema);
|
||||
normalizeSchema((Schema) schema.getAdditionalProperties(), visitedSchemas);
|
||||
@ -566,7 +567,8 @@ public class OpenAPINormalizer {
|
||||
}
|
||||
|
||||
private Schema normalizeArraySchema(Schema schema) {
|
||||
return processSetArraytoNullable(schema);
|
||||
Schema result = processNormalize31Spec(schema, new HashSet<>());
|
||||
return processSetArraytoNullable(result);
|
||||
}
|
||||
|
||||
private Schema normalizeMapSchema(Schema schema) {
|
||||
@ -1222,7 +1224,7 @@ public class OpenAPINormalizer {
|
||||
// only one item (type) left
|
||||
if (schema.getTypes().size() == 1) {
|
||||
String type = String.valueOf(schema.getTypes().iterator().next());
|
||||
if ("array".equals(type)) {
|
||||
if (ModelUtils.isArraySchema(schema)) {
|
||||
ArraySchema as = new ArraySchema();
|
||||
as.setDescription(schema.getDescription());
|
||||
as.setDefault(schema.getDefault());
|
||||
|
@ -84,10 +84,9 @@ public class ExampleGenerator {
|
||||
}
|
||||
|
||||
if (ModelUtils.isArraySchema(responseSchema)) { // array of schema
|
||||
ArraySchema as = (ArraySchema) responseSchema;
|
||||
if (as.getItems() != null) { // array of primitive types
|
||||
if (ModelUtils.getSchemaItems(responseSchema) != null) { // array of primitive types
|
||||
return generate((Map<String, Object>) responseSchema.getExample(),
|
||||
new ArrayList<>(producesInfo), as);
|
||||
new ArrayList<>(producesInfo), responseSchema);
|
||||
} else {
|
||||
// TODO log warning message as such case is not handled at the moment
|
||||
return null;
|
||||
@ -248,9 +247,9 @@ public class ExampleGenerator {
|
||||
}
|
||||
return Boolean.TRUE;
|
||||
} else if (ModelUtils.isArraySchema(property)) {
|
||||
Schema innerType = ((ArraySchema) property).getItems();
|
||||
Schema innerType = ModelUtils.getSchemaItems(property);
|
||||
if (innerType != null) {
|
||||
int arrayLength = null == ((ArraySchema) property).getMaxItems() ? 2 : ((ArraySchema) property).getMaxItems();
|
||||
int arrayLength = null == property.getMaxItems() ? 2 : property.getMaxItems();
|
||||
// avoid memory issues by limiting to max. 5 items
|
||||
arrayLength = Math.min(arrayLength, 5);
|
||||
Object[] objectProperties = new Object[arrayLength];
|
||||
|
@ -128,8 +128,7 @@ public class XmlExampleGenerator {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
if (ModelUtils.isArraySchema(schema)) {
|
||||
ArraySchema as = (ArraySchema) schema;
|
||||
Schema inner = as.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(schema);
|
||||
boolean wrapped = false;
|
||||
if (schema.getXml() != null && schema.getXml().getWrapped() != null && schema.getXml().getWrapped()) {
|
||||
wrapped = true;
|
||||
|
@ -532,8 +532,7 @@ abstract public class AbstractAdaCodegen extends DefaultCodegen implements Codeg
|
||||
}
|
||||
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
String itemType = getTypeDeclaration(inner);
|
||||
if (itemType.startsWith("OpenAPI.")) {
|
||||
return itemType + "_Vector";
|
||||
|
@ -188,10 +188,9 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
if (inner == null) {
|
||||
LOGGER.warn("{}(array property) does not have a proper inner type defined", ap.getName());
|
||||
LOGGER.warn("{}(array property) does not have a proper inner type defined", p.getName());
|
||||
// TODO maybe better defaulting to StringProperty than returning null
|
||||
return null;
|
||||
}
|
||||
@ -220,13 +219,12 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
|
||||
@Override
|
||||
public String toDefaultValue(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
final ArraySchema ap = (ArraySchema) p;
|
||||
final String pattern = "new ArrayList<%s>()";
|
||||
if (ap.getItems() == null) {
|
||||
if (ModelUtils.getSchemaItems(p) == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return String.format(Locale.ROOT, pattern, getTypeDeclaration(ap.getItems()));
|
||||
return String.format(Locale.ROOT, pattern, getTypeDeclaration(ModelUtils.getSchemaItems(p)));
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
final MapSchema ap = (MapSchema) p;
|
||||
final String pattern = "new HashMap<%s>()";
|
||||
@ -318,7 +316,7 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code
|
||||
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
example = "new " + getTypeDeclaration(p) + "{" + toExampleValue(
|
||||
((ArraySchema) p).getItems()) + "}";
|
||||
ModelUtils.getSchemaItems(p)) + "}";
|
||||
} else if (ModelUtils.isBooleanSchema(p)) {
|
||||
example = String.valueOf(!"false".equals(example));
|
||||
} else if (ModelUtils.isByteArraySchema(p)) {
|
||||
|
@ -1433,12 +1433,12 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
|
||||
* @param arr The input array property
|
||||
* @return The type declaration when the type is an array of arrays.
|
||||
*/
|
||||
private String getArrayTypeDeclaration(ArraySchema arr) {
|
||||
private String getArrayTypeDeclaration(Schema arr) {
|
||||
// TODO: collection type here should be fully qualified namespace to avoid model conflicts
|
||||
// This supports arrays of arrays.
|
||||
String arrayType = typeMapping.get("array");
|
||||
StringBuilder instantiationType = new StringBuilder(arrayType);
|
||||
Schema items = arr.getItems();
|
||||
Schema items = ModelUtils.getSchemaItems(arr);
|
||||
String nestedType = getTypeDeclaration(items);
|
||||
// TODO: We may want to differentiate here between generics and primitive arrays.
|
||||
instantiationType.append("<").append(nestedType).append(">");
|
||||
@ -1448,7 +1448,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
|
||||
@Override
|
||||
public String toInstantiationType(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
return getArrayTypeDeclaration((ArraySchema) p);
|
||||
return getArrayTypeDeclaration(p);
|
||||
}
|
||||
return super.toInstantiationType(p);
|
||||
}
|
||||
@ -1456,7 +1456,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
return getArrayTypeDeclaration((ArraySchema) p);
|
||||
return getArrayTypeDeclaration(p);
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
// Should we also support maps of maps?
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -512,7 +512,7 @@ public abstract class AbstractDartCodegen extends DefaultCodegen {
|
||||
Schema<?> schema = unaliasSchema(p);
|
||||
Schema<?> target = ModelUtils.isGenerateAliasAsModel() ? p : schema;
|
||||
if (ModelUtils.isArraySchema(target)) {
|
||||
Schema<?> items = getSchemaItems((ArraySchema) schema);
|
||||
Schema<?> items = ModelUtils.getSchemaItems(schema);
|
||||
return getSchemaType(target) + "<" + getTypeDeclaration(items) + ">";
|
||||
}
|
||||
if (ModelUtils.isMapSchema(target)) {
|
||||
|
@ -293,8 +293,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return "LIST [" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
@ -578,8 +577,7 @@ public abstract class AbstractEiffelCodegen extends DefaultCodegen implements Co
|
||||
// String inner = toModelName(getSchemaType(additionalProperties2));
|
||||
// return instantiationTypes.get("map") + " [" + inner + "]";
|
||||
// } else if (ModelUtils.isArraySchema(p)) {
|
||||
// ArraySchema ap = (ArraySchema) p;
|
||||
// String inner = toModelName(getSchemaType(ap.getItems()));
|
||||
// String inner = toModelName(getSchemaType(ModelUtils.getSchemaItems(p)));
|
||||
// return instantiationTypes.get("array") + " [" + inner + "]";
|
||||
// } else {
|
||||
// return null;
|
||||
|
@ -855,12 +855,12 @@ public abstract class AbstractFSharpCodegen extends DefaultCodegen implements Co
|
||||
* @param arr The input array property
|
||||
* @return The type declaration when the type is an array of arrays.
|
||||
*/
|
||||
private String getArrayTypeDeclaration(ArraySchema arr) {
|
||||
private String getArrayTypeDeclaration(Schema arr) {
|
||||
// TODO: collection type here should be fully qualified namespace to avoid model conflicts
|
||||
// This supports arrays of arrays.
|
||||
String arrayType = typeMapping.get("array");
|
||||
StringBuilder instantiationType = new StringBuilder(arrayType);
|
||||
Schema items = arr.getItems();
|
||||
Schema items = ModelUtils.getSchemaItems(arr);
|
||||
String nestedType = getTypeDeclaration(items);
|
||||
// TODO: We may want to differentiate here between generics and primitive arrays.
|
||||
return nestedType + "[]";
|
||||
@ -869,7 +869,7 @@ public abstract class AbstractFSharpCodegen extends DefaultCodegen implements Co
|
||||
@Override
|
||||
public String toInstantiationType(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
return getArrayTypeDeclaration((ArraySchema) p);
|
||||
return getArrayTypeDeclaration(p);
|
||||
}
|
||||
return super.toInstantiationType(p);
|
||||
}
|
||||
@ -877,7 +877,7 @@ public abstract class AbstractFSharpCodegen extends DefaultCodegen implements Co
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
return getArrayTypeDeclaration((ArraySchema) p);
|
||||
return getArrayTypeDeclaration(p);
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
// Should we also support maps of maps?
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -360,8 +360,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
// In OAS 3.0.x, the array "items" attribute is required.
|
||||
// In OAS >= 3.1, the array "items" attribute is optional such that the OAS
|
||||
// specification is aligned with the JSON schema specification.
|
||||
|
@ -273,8 +273,7 @@ public abstract class AbstractGraphQLCodegen extends DefaultCodegen implements C
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Object ap = p.getAdditionalProperties();
|
||||
|
@ -946,7 +946,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
|
||||
Schema<?> schema = unaliasSchema(p);
|
||||
Schema<?> target = ModelUtils.isGenerateAliasAsModel() ? p : schema;
|
||||
if (ModelUtils.isArraySchema(target)) {
|
||||
Schema<?> items = getSchemaItems((ArraySchema) schema);
|
||||
Schema<?> items = ModelUtils.getSchemaItems(schema);
|
||||
return getSchemaType(target) + "<" + getBeanValidation(items) + getTypeDeclaration(items) + ">";
|
||||
} else if (ModelUtils.isMapSchema(target)) {
|
||||
// Note: ModelUtils.isMapSchema(p) returns true when p is a composed schema that also defines
|
||||
|
@ -346,8 +346,7 @@ public abstract class AbstractJuliaCodegen extends DefaultCodegen {
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema schema) {
|
||||
if (ModelUtils.isArraySchema(schema)) {
|
||||
ArraySchema ap = (ArraySchema) schema;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(schema);
|
||||
return getSchemaType(schema) + "{" + getTypeDeclaration(inner) + "}";
|
||||
} else if (ModelUtils.isSet(schema)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(schema);
|
||||
|
@ -359,7 +359,7 @@ public abstract class AbstractKotlinCodegen extends DefaultCodegen implements Co
|
||||
Schema<?> schema = unaliasSchema(p);
|
||||
Schema<?> target = ModelUtils.isGenerateAliasAsModel() ? p : schema;
|
||||
if (ModelUtils.isArraySchema(target)) {
|
||||
Schema<?> items = getSchemaItems((ArraySchema) schema);
|
||||
Schema<?> items = ModelUtils.getSchemaItems( schema);
|
||||
return getSchemaType(target) + "<" + getTypeDeclaration(items) + ">";
|
||||
} else if (ModelUtils.isMapSchema(target)) {
|
||||
// Note: ModelUtils.isMapSchema(p) returns true when p is a composed schema that also defines
|
||||
@ -1104,7 +1104,7 @@ public abstract class AbstractKotlinCodegen extends DefaultCodegen implements Co
|
||||
}
|
||||
|
||||
StringBuilder defaultContent = new StringBuilder();
|
||||
Schema<?> itemsSchema = getSchemaItems((ArraySchema) schema);
|
||||
Schema<?> itemsSchema = ModelUtils.getSchemaItems(schema);
|
||||
_default.elements().forEachRemaining((element) -> {
|
||||
String defaultValue = element.asText();
|
||||
if (defaultValue != null) {
|
||||
|
@ -355,11 +355,10 @@ public abstract class AbstractPhpCodegen extends DefaultCodegen implements Codeg
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
if (inner == null) {
|
||||
LOGGER.warn("{}(array property) does not have a proper inner type defined.Default to string",
|
||||
ap.getName());
|
||||
p.getName());
|
||||
inner = new StringSchema().description("TODO default missing array inner type to string");
|
||||
}
|
||||
return getTypeDeclaration(inner) + "[]";
|
||||
|
@ -491,8 +491,7 @@ public abstract class AbstractPythonCodegen extends DefaultCodegen implements Co
|
||||
if (StringUtils.isNotBlank(schema.getTitle()) && !"null".equals(schema.getTitle())) {
|
||||
includedSchemas.add(schema);
|
||||
}
|
||||
ArraySchema arrayschema = (ArraySchema) schema;
|
||||
example = "[\n" + indentationString + toExampleValueRecursive(arrayschema.getItems(), includedSchemas, indentation + 1) + "\n" + indentationString + "]";
|
||||
example = "[\n" + indentationString + toExampleValueRecursive(ModelUtils.getSchemaItems(schema), includedSchemas, indentation + 1) + "\n" + indentationString + "]";
|
||||
} else if (ModelUtils.isMapSchema(schema)) {
|
||||
if (StringUtils.isNotBlank(schema.getTitle()) && !"null".equals(schema.getTitle())) {
|
||||
includedSchemas.add(schema);
|
||||
@ -693,8 +692,7 @@ public abstract class AbstractPythonCodegen extends DefaultCodegen implements Co
|
||||
p = ModelUtils.unaliasSchema(openAPI, p);
|
||||
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "[" + getCollectionItemTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -351,8 +351,7 @@ public abstract class AbstractPythonConnexionServerCodegen extends AbstractPytho
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -454,8 +454,7 @@ public abstract class AbstractPythonPydanticV1Codegen extends DefaultCodegen imp
|
||||
if (StringUtils.isNotBlank(schema.getTitle()) && !"null".equals(schema.getTitle())) {
|
||||
includedSchemas.add(schema);
|
||||
}
|
||||
ArraySchema arrayschema = (ArraySchema) schema;
|
||||
example = "[\n" + indentationString + toExampleValueRecursive(arrayschema.getItems(), includedSchemas, indentation + 1) + "\n" + indentationString + "]";
|
||||
example = "[\n" + indentationString + toExampleValueRecursive(ModelUtils.getSchemaItems(schema), includedSchemas, indentation + 1) + "\n" + indentationString + "]";
|
||||
} else if (ModelUtils.isMapSchema(schema)) {
|
||||
if (StringUtils.isNotBlank(schema.getTitle()) && !"null".equals(schema.getTitle())) {
|
||||
includedSchemas.add(schema);
|
||||
@ -656,8 +655,7 @@ public abstract class AbstractPythonPydanticV1Codegen extends DefaultCodegen imp
|
||||
p = ModelUtils.unaliasSchema(openAPI, p);
|
||||
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -119,7 +119,7 @@ abstract public class AbstractRubyCodegen extends DefaultCodegen implements Code
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema schema) {
|
||||
if (ModelUtils.isArraySchema(schema)) {
|
||||
Schema inner = ((ArraySchema) schema).getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(schema);
|
||||
return getSchemaType(schema) + "<" + getTypeDeclaration(inner) + ">";
|
||||
} else if (ModelUtils.isMapSchema(schema)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(schema);
|
||||
|
@ -236,8 +236,7 @@ public abstract class AbstractRustCodegen extends DefaultCodegen implements Code
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
String innerType = getTypeDeclaration(inner);
|
||||
return typeMapping.get("array") + "<" + innerType + ">";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
|
@ -371,7 +371,7 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen {
|
||||
Schema<?> schema = unaliasSchema(p);
|
||||
Schema<?> target = ModelUtils.isGenerateAliasAsModel() ? p : schema;
|
||||
if (ModelUtils.isArraySchema(target)) {
|
||||
Schema<?> items = getSchemaItems((ArraySchema) schema);
|
||||
Schema<?> items = ModelUtils.getSchemaItems(schema);
|
||||
return getSchemaType(target) + "[" + getTypeDeclaration(items) + "]";
|
||||
} else if (ModelUtils.isMapSchema(target)) {
|
||||
Schema<?> inner = ModelUtils.getAdditionalProperties(target);
|
||||
@ -404,9 +404,8 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen {
|
||||
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
|
||||
return instantiationTypes.get("map") + "[String, " + inner + "]";
|
||||
} else if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
String inner = getSchemaType(ap.getItems());
|
||||
return (ModelUtils.isSet(ap) ? instantiationTypes.get("set") : instantiationTypes.get("array")) + "[" + inner + "]";
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(p));
|
||||
return (ModelUtils.isSet(p) ? instantiationTypes.get("set") : instantiationTypes.get("array")) + "[" + inner + "]";
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
@ -433,10 +432,9 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen {
|
||||
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
|
||||
return "new HashMap[String, " + inner + "]() ";
|
||||
} else if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
String inner = getSchemaType(ap.getItems());
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(p));
|
||||
String genericType;
|
||||
if (ModelUtils.isSet(ap)) {
|
||||
if (ModelUtils.isSet(p)) {
|
||||
genericType = instantiationTypes.get("set");
|
||||
} else {
|
||||
genericType = instantiationTypes.get("array");
|
||||
@ -475,8 +473,7 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen {
|
||||
public CodegenProperty fromProperty(String name, Schema p, boolean required) {
|
||||
CodegenProperty prop = super.fromProperty(name, p, required);
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema as = (ArraySchema) p;
|
||||
if (ModelUtils.isSet(as)) {
|
||||
if (ModelUtils.isSet(p)) {
|
||||
prop.containerType = "set";
|
||||
}
|
||||
}
|
||||
|
@ -624,7 +624,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
Schema<?> items = getSchemaItems((ArraySchema) p);
|
||||
Schema<?> items = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "<" + getTypeDeclaration(unaliasSchema(items)) + ">";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema<?> inner = getSchemaAdditionalProperties(p);
|
||||
@ -647,8 +647,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp
|
||||
// handle enums of various data types
|
||||
Schema inner;
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema mp1 = (ArraySchema) p;
|
||||
inner = mp1.getItems();
|
||||
inner = ModelUtils.getSchemaItems(p);
|
||||
return this.getSchemaType(p) + "<" + this.getParameterDataType(parameter, inner) + ">";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
inner = ModelUtils.getAdditionalProperties(p);
|
||||
@ -1177,8 +1176,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp
|
||||
return filteredSchemas.stream().map(schema -> {
|
||||
String schemaType = getSchemaType(schema);
|
||||
if (ModelUtils.isArraySchema(schema)) {
|
||||
ArraySchema ap = (ArraySchema) schema;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(schema);
|
||||
schemaType = schemaType + "<" + getSchemaType(inner) + ">";
|
||||
}
|
||||
return schemaType;
|
||||
|
@ -221,8 +221,7 @@ public class AndroidClientCodegen extends DefaultCodegen implements CodegenConfi
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -223,7 +223,7 @@ public class ApexClientCodegen extends AbstractApexCodegen {
|
||||
public String toDefaultValue(Schema p) {
|
||||
String out = null;
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
Schema inner = ((ArraySchema) p).getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
out = String.format(
|
||||
Locale.ROOT,
|
||||
"new List<%s>()",
|
||||
|
@ -429,8 +429,7 @@ public class BashClientCodegen extends DefaultCodegen implements CodegenConfig {
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -1515,8 +1515,7 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen {
|
||||
}
|
||||
return instantiationTypes.get("map") + "<String, " + inner + ">";
|
||||
} else if (ModelUtils.isArraySchema(schema)) {
|
||||
ArraySchema arraySchema = (ArraySchema) schema;
|
||||
String inner = getSchemaType(arraySchema.getItems());
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(schema));
|
||||
return instantiationTypes.get("array") + "<" + inner + ">";
|
||||
} else {
|
||||
return null;
|
||||
|
@ -1091,8 +1091,7 @@ public class CSharpReducedClientCodegen extends AbstractCSharpCodegen {
|
||||
}
|
||||
return instantiationTypes.get("map") + "<String, " + inner + ">";
|
||||
} else if (ModelUtils.isArraySchema(schema)) {
|
||||
ArraySchema arraySchema = (ArraySchema) schema;
|
||||
String inner = getSchemaType(arraySchema.getItems());
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(schema));
|
||||
return instantiationTypes.get("array") + "<" + inner + ">";
|
||||
} else {
|
||||
return null;
|
||||
|
@ -165,10 +165,8 @@ public class ClojureClientCodegen extends DefaultCodegen implements CodegenConfi
|
||||
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (p instanceof ArraySchema) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return "(s/coll-of " + getTypeDeclaration(inner) + ")";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Object ap = p.getAdditionalProperties();
|
||||
|
@ -108,8 +108,7 @@ public class ConfluenceWikiCodegen extends DefaultCodegen implements CodegenConf
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -381,8 +381,7 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
|
||||
String openAPIType = getSchemaType(p);
|
||||
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
|
||||
}
|
||||
if (ModelUtils.isMapSchema(p)) {
|
||||
@ -474,8 +473,7 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
|
||||
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
|
||||
return "std::map<std::string, " + inner + ">()";
|
||||
} else if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
String inner = getSchemaType(ap.getItems());
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(p));
|
||||
if (!languageSpecificPrimitives.contains(inner)) {
|
||||
inner = "std::shared_ptr<" + inner + ">";
|
||||
}
|
||||
|
@ -189,8 +189,7 @@ public abstract class CppQtAbstractCodegen extends AbstractCppCodegen implements
|
||||
String openAPIType = getSchemaType(p);
|
||||
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
@ -232,8 +231,7 @@ public abstract class CppQtAbstractCodegen extends AbstractCppCodegen implements
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
return "QMap<QString, " + getTypeDeclaration(inner) + ">()";
|
||||
} else if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return "QList<" + getTypeDeclaration(inner) + ">()";
|
||||
} else if (ModelUtils.isStringSchema(p)) {
|
||||
return "QString(\"\")";
|
||||
|
@ -367,8 +367,7 @@ public class CppRestSdkClientCodegen extends AbstractCppCodegen {
|
||||
String openAPIType = getSchemaType(p);
|
||||
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
@ -407,8 +406,7 @@ public class CppRestSdkClientCodegen extends AbstractCppCodegen {
|
||||
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
|
||||
return "std::map<utility::string_t, " + inner + ">()";
|
||||
} else if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
String inner = getSchemaType(ap.getItems());
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(p));
|
||||
if (!languageSpecificPrimitives.contains(inner)) {
|
||||
inner = "std::shared_ptr<" + inner + ">";
|
||||
}
|
||||
|
@ -379,8 +379,7 @@ public class CppRestbedServerCodegen extends AbstractCppCodegen {
|
||||
String openAPIType = getSchemaType(p);
|
||||
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
@ -469,12 +468,10 @@ public class CppRestbedServerCodegen extends AbstractCppCodegen {
|
||||
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
|
||||
return "std::map<std::string, " + inner + ">()";
|
||||
} else if (ModelUtils.isSet(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
String inner = getSchemaType(ap.getItems());
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(p));
|
||||
return "std::set<" + inner + ">()";
|
||||
} else if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
String inner = getSchemaType(ap.getItems());
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(p));
|
||||
return "std::vector<" + inner + ">()";
|
||||
} else if (ModelUtils.isModel(p)) {
|
||||
String modelName = getTypeDeclaration(p);
|
||||
|
@ -351,8 +351,7 @@ public class CppRestbedServerDeprecatedCodegen extends AbstractCppCodegen {
|
||||
String openAPIType = getSchemaType(p);
|
||||
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
@ -433,8 +432,7 @@ public class CppRestbedServerDeprecatedCodegen extends AbstractCppCodegen {
|
||||
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
|
||||
return "std::map<std::string, " + inner + ">()";
|
||||
} else if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
String inner = getSchemaType(ap.getItems());
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(p));
|
||||
if (!languageSpecificPrimitives.contains(inner)) {
|
||||
inner = "std::shared_ptr<" + inner + ">";
|
||||
}
|
||||
|
@ -416,8 +416,7 @@ public class CppUE4ClientCodegen extends AbstractCppCodegen {
|
||||
String openAPIType = getSchemaType(p);
|
||||
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
return getSchemaType(p) + "<" + getTypeDeclaration(ap.getItems()) + ">";
|
||||
return getSchemaType(p) + "<" + getTypeDeclaration(ModelUtils.getSchemaItems(p)) + ">";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
return getSchemaType(p) + "<FString, " + getTypeDeclaration(ModelUtils.getAdditionalProperties(p)) + ">";
|
||||
}
|
||||
|
@ -814,7 +814,7 @@ public class CrystalClientCodegen extends DefaultCodegen {
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema schema) {
|
||||
if (ModelUtils.isArraySchema(schema)) {
|
||||
Schema inner = ((ArraySchema) schema).getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(schema);
|
||||
return getSchemaType(schema) + "(" + getTypeDeclaration(inner) + ")";
|
||||
} else if (ModelUtils.isMapSchema(schema)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(schema);
|
||||
|
@ -557,8 +557,7 @@ public class ElixirClientCodegen extends DefaultCodegen {
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -244,8 +244,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
|
||||
@Override
|
||||
public String toInstantiationType(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
String inner = getSchemaType(ap.getItems());
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(p));
|
||||
return instantiationTypes.get("array") + " " + inner;
|
||||
} else {
|
||||
return null;
|
||||
@ -464,8 +463,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getTypeDeclaration(inner);
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -141,7 +141,7 @@ public class ErlangProperCodegen extends DefaultCodegen implements CodegenConfig
|
||||
public CodegenModel fromModel(String name, Schema model) {
|
||||
CodegenModel cm = super.fromModel(name, model);
|
||||
if(ModelUtils.isArraySchema(model)) {
|
||||
return new CodegenArrayModel(cm, (ArraySchema) model);
|
||||
return new CodegenArrayModel(cm, model);
|
||||
} else {
|
||||
return cm;
|
||||
}
|
||||
@ -156,12 +156,9 @@ public class ErlangProperCodegen extends DefaultCodegen implements CodegenConfig
|
||||
public String getTypeDeclaration(Schema schema) {
|
||||
String typeDeclaration = super.getSchemaType(schema);
|
||||
if(ModelUtils.isArraySchema(schema)) {
|
||||
ArraySchema arraySchema = (ArraySchema) schema;
|
||||
String complexType = getSchemaType(arraySchema.getItems());
|
||||
|
||||
String complexType = getSchemaType(ModelUtils.getSchemaItems(schema));
|
||||
StringBuilder sb = new StringBuilder("list(");
|
||||
sb.append(complexType);
|
||||
|
||||
return sb.append(")").toString();
|
||||
} else if (typeMapping.containsKey(typeDeclaration)) {
|
||||
return typeMapping.get(typeDeclaration);
|
||||
@ -174,8 +171,7 @@ public class ErlangProperCodegen extends DefaultCodegen implements CodegenConfig
|
||||
public String getSchemaType(Schema schema) {
|
||||
String schemaType = super.getSchemaType(schema);
|
||||
if(ModelUtils.isArraySchema(schema)) {
|
||||
ArraySchema arraySchema = (ArraySchema) schema;
|
||||
String complexType = getSchemaType(arraySchema.getItems());
|
||||
String complexType = getSchemaType(ModelUtils.getSchemaItems(schema));
|
||||
|
||||
StringBuilder sb = new StringBuilder("list(");
|
||||
sb.append(complexType);
|
||||
@ -446,7 +442,7 @@ public class ErlangProperCodegen extends DefaultCodegen implements CodegenConfig
|
||||
Integer minItems;
|
||||
Integer maxItems;
|
||||
|
||||
public CodegenArrayModel(CodegenModel cm, ArraySchema schema) {
|
||||
public CodegenArrayModel(CodegenModel cm, Schema schema) {
|
||||
super();
|
||||
|
||||
// Copy all fields of CodegenModel
|
||||
|
@ -124,8 +124,7 @@ public class GraphQLNodeJSExpressServerCodegen extends AbstractGraphQLCodegen im
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
|
||||
// IMPORTANT NOTE we add the braces within template because there we have the possibility to differentiate
|
||||
// between some specific types for GraphQL:
|
||||
|
@ -653,8 +653,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
@ -687,8 +686,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
|
||||
String inner = getSchemaType(additionalProperties2);
|
||||
return "(Map.Map Text " + inner + ")";
|
||||
} else if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
return getSchemaType(ap.getItems());
|
||||
return getSchemaType(ModelUtils.getSchemaItems(p));
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
@ -372,8 +372,7 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
@ -419,8 +418,7 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf
|
||||
String inner = getSchemaType(additionalProperties2);
|
||||
return "(Map.Map Text " + inner + ")";
|
||||
} else if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
String inner = getSchemaType(ap.getItems());
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(p));
|
||||
// Return only the inner type; the wrapping with QueryList is done
|
||||
// somewhere else, where we have access to the collection format.
|
||||
return inner;
|
||||
|
@ -295,8 +295,7 @@ public class HaskellYesodServerCodegen extends DefaultCodegen implements Codegen
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
@ -342,8 +341,7 @@ public class HaskellYesodServerCodegen extends DefaultCodegen implements Codegen
|
||||
String inner = getSchemaType(additionalProperties2);
|
||||
return "(Map.Map Text " + inner + ")";
|
||||
} else if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
String inner = getSchemaType(ap.getItems());
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(p));
|
||||
// Return only the inner type; the wrapping with QueryList is done
|
||||
// somewhere else, where we have access to the collection format.
|
||||
return inner;
|
||||
|
@ -210,8 +210,7 @@ public class JMeterClientCodegen extends DefaultCodegen implements CodegenConfig
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -610,8 +610,7 @@ public class JavascriptApolloClientCodegen extends DefaultCodegen implements Cod
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
@ -872,9 +871,9 @@ public class JavascriptApolloClientCodegen extends DefaultCodegen implements Cod
|
||||
codegenModel = JavascriptApolloClientCodegen.reconcileInlineEnums(codegenModel, parentCodegenModel);
|
||||
}
|
||||
if (ModelUtils.isArraySchema(model)) {
|
||||
ArraySchema am = (ArraySchema) model;
|
||||
if (codegenModel != null && am.getItems() != null) {
|
||||
String itemType = getSchemaType(am.getItems());
|
||||
Schema inner = ModelUtils.getSchemaItems(model);
|
||||
if (codegenModel != null && inner != null) {
|
||||
String itemType = getSchemaType(inner);
|
||||
codegenModel.vendorExtensions.put("x-is-array", true);
|
||||
codegenModel.vendorExtensions.put("x-item-type", itemType);
|
||||
}
|
||||
|
@ -610,8 +610,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
@ -874,9 +873,8 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo
|
||||
}
|
||||
}
|
||||
if (ModelUtils.isArraySchema(model)) {
|
||||
ArraySchema am = (ArraySchema) model;
|
||||
if (codegenModel != null && am.getItems() != null) {
|
||||
String itemType = getSchemaType(am.getItems());
|
||||
if (codegenModel != null && ModelUtils.getSchemaItems(model) != null) {
|
||||
String itemType = getSchemaType(ModelUtils.getSchemaItems(model));
|
||||
codegenModel.vendorExtensions.put("x-is-array", true);
|
||||
codegenModel.vendorExtensions.put("x-item-type", itemType);
|
||||
}
|
||||
|
@ -225,8 +225,7 @@ public class JavascriptClosureAngularClientCodegen extends DefaultCodegen implem
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "<!" + getTypeDeclaration(inner) + ">";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -383,8 +383,7 @@ public class LuaClientCodegen extends DefaultCodegen implements CodegenConfig {
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getTypeDeclaration(inner);
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -513,7 +513,7 @@ public class N4jsClientCodegen extends DefaultCodegen implements CodegenConfig {
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
Schema<?> items = getSchemaItems((ArraySchema) p);
|
||||
Schema<?> items = ModelUtils.getSchemaItems(p);
|
||||
return getTypeDeclaration(unaliasSchema(items)) + "[]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
return "~Object+";
|
||||
@ -544,8 +544,7 @@ public class N4jsClientCodegen extends DefaultCodegen implements CodegenConfig {
|
||||
protected String getParameterDataType(Parameter parameter, Schema p) {
|
||||
// handle enums of various data types
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema mp1 = (ArraySchema) p;
|
||||
Schema<?> inner = mp1.getItems();
|
||||
Schema<?> inner = ModelUtils.getSchemaItems(p);
|
||||
return getParameterDataType(parameter, inner) + "[]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
return "~Object+";
|
||||
|
@ -275,8 +275,7 @@ public class NimClientCodegen extends DefaultCodegen implements CodegenConfig {
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
if (inner == null) {
|
||||
return null;
|
||||
}
|
||||
|
@ -279,8 +279,8 @@ public class OCamlClientCodegen extends DefaultCodegen implements CodegenConfig
|
||||
}
|
||||
|
||||
private void collectEnumSchemas(String parentName, String sName, Schema schema) {
|
||||
if (schema instanceof ArraySchema) {
|
||||
collectEnumSchemas(parentName, sName, ((ArraySchema) schema).getItems());
|
||||
if (ModelUtils.isArraySchema(schema)) {
|
||||
collectEnumSchemas(parentName, sName, ModelUtils.getSchemaItems(schema));
|
||||
} else if (schema instanceof MapSchema && schema.getAdditionalProperties() instanceof Schema) {
|
||||
collectEnumSchemas(parentName, sName, (Schema) schema.getAdditionalProperties());
|
||||
} else if (isEnumSchema(schema)) {
|
||||
@ -317,11 +317,10 @@ public class OCamlClientCodegen extends DefaultCodegen implements CodegenConfig
|
||||
collectEnumSchemas(pName, (Schema) schema.getAdditionalProperties());
|
||||
}
|
||||
|
||||
if (schema instanceof ArraySchema) {
|
||||
ArraySchema s = (ArraySchema) schema;
|
||||
if (s.getItems() != null) {
|
||||
if (ModelUtils.isArraySchema(schema)) {
|
||||
if (ModelUtils.getSchemaItems(schema) != null) {
|
||||
String pName = parentName != null ? parentName + "_" + sName : sName;
|
||||
collectEnumSchemas(pName, s.getItems());
|
||||
collectEnumSchemas(pName, ModelUtils.getSchemaItems(schema));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -581,11 +580,10 @@ public class OCamlClientCodegen extends DefaultCodegen implements CodegenConfig
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
if (inner == null) {
|
||||
LOGGER.warn("{}(array property) does not have a proper inner type defined.Default to string",
|
||||
ap.getName());
|
||||
p.getName());
|
||||
inner = new StringSchema().description("TODO default missing array inner type to string");
|
||||
}
|
||||
return getTypeDeclaration(inner) + " list";
|
||||
|
@ -370,8 +370,7 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
String innerTypeDeclaration = getTypeDeclaration(inner);
|
||||
if (innerTypeDeclaration.endsWith("*")) {
|
||||
innerTypeDeclaration = innerTypeDeclaration.substring(0, innerTypeDeclaration.length() - 1);
|
||||
|
@ -261,8 +261,7 @@ public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig {
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -271,7 +271,7 @@ public class PhpDataTransferClientCodegen extends AbstractPhpCodegen {
|
||||
Schema parameterSchema = ModelUtils.getReferencedSchema(openAPI, parameter.getSchema());
|
||||
// array
|
||||
if (ModelUtils.isArraySchema(parameterSchema)) {
|
||||
Schema itemSchema = ((ArraySchema) parameterSchema).getItems();
|
||||
Schema itemSchema = ModelUtils.getSchemaItems(parameterSchema);
|
||||
ArraySchema arraySchema = new ArraySchema();
|
||||
arraySchema.setMinItems(parameterSchema.getMinItems());
|
||||
arraySchema.setMaxItems(parameterSchema.getMaxItems());
|
||||
@ -419,7 +419,7 @@ public class PhpDataTransferClientCodegen extends AbstractPhpCodegen {
|
||||
}
|
||||
} else if (ModelUtils.isArraySchema(schema)) {
|
||||
//Recursively process schema of array items
|
||||
generateContainerSchemas(openAPI, visitedSchemas, ((ArraySchema) schema).getItems());
|
||||
generateContainerSchemas(openAPI, visitedSchemas, ModelUtils.getSchemaItems(schema));
|
||||
isContainer = Boolean.TRUE;
|
||||
} else if (ModelUtils.isMapSchema(schema)) {
|
||||
//Recursively process schema of map items
|
||||
|
@ -248,7 +248,7 @@ public class PhpMezzioPathHandlerServerCodegen extends AbstractPhpCodegen {
|
||||
Schema parameterSchema = ModelUtils.getReferencedSchema(openAPI, queryParameter.getSchema());
|
||||
// array
|
||||
if (ModelUtils.isArraySchema(parameterSchema)) {
|
||||
Schema itemSchema = ((ArraySchema) parameterSchema).getItems();
|
||||
Schema itemSchema = ModelUtils.getSchemaItems(parameterSchema);
|
||||
ArraySchema arraySchema = new ArraySchema();
|
||||
arraySchema.setMinItems(parameterSchema.getMinItems());
|
||||
arraySchema.setMaxItems(parameterSchema.getMaxItems());
|
||||
@ -397,7 +397,7 @@ public class PhpMezzioPathHandlerServerCodegen extends AbstractPhpCodegen {
|
||||
}
|
||||
} else if (ModelUtils.isArraySchema(schema)) {
|
||||
//Recursively process schema of array items
|
||||
generateContainerSchemas(openAPI, visitedSchemas, ((ArraySchema) schema).getItems());
|
||||
generateContainerSchemas(openAPI, visitedSchemas, ModelUtils.getSchemaItems(schema));
|
||||
isContainer = Boolean.TRUE;
|
||||
} else if (ModelUtils.isMapSchema(schema)) {
|
||||
//Recursively process schema of map items
|
||||
|
@ -175,8 +175,7 @@ public class PhpSilexServerCodegen extends DefaultCodegen implements CodegenConf
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -538,8 +538,7 @@ public class PhpSymfonyServerCodegen extends AbstractPhpCodegen implements Codeg
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getTypeDeclaration(inner);
|
||||
}
|
||||
|
||||
|
@ -998,8 +998,7 @@ public class PowerShellClientCodegen extends DefaultCodegen implements CodegenCo
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getTypeDeclaration(inner) + "[]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
return "System.Collections.Hashtable";
|
||||
|
@ -608,8 +608,7 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -223,8 +223,7 @@ public class PythonFastAPIServerCodegen extends AbstractPythonCodegen {
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -535,8 +535,7 @@ public class RClientCodegen extends DefaultCodegen implements CodegenConfig {
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -682,8 +682,7 @@ public class RustAxumServerCodegen extends AbstractRustCodegen implements Codege
|
||||
@Override
|
||||
public String toInstantiationType(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return instantiationTypes.get("array") + "<" + getSchemaType(inner) + ">";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -981,8 +981,7 @@ public class RustServerCodegen extends AbstractRustCodegen implements CodegenCon
|
||||
@Override
|
||||
public String toInstantiationType(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return instantiationTypes.get("array") + "<" + getSchemaType(inner) + ">";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
@ -1000,21 +999,21 @@ public class RustServerCodegen extends AbstractRustCodegen implements CodegenCon
|
||||
CodegenModel mdl = super.fromModel(name, model);
|
||||
|
||||
if (ModelUtils.isArraySchema(model)) {
|
||||
ArraySchema am = (ArraySchema) model;
|
||||
Schema inner = ModelUtils.getSchemaItems(model);
|
||||
String xmlName = null;
|
||||
|
||||
// Detect XML list where the inner item is defined directly.
|
||||
if ((am.getItems() != null) &&
|
||||
(am.getItems().getXml() != null)) {
|
||||
xmlName = am.getItems().getXml().getName();
|
||||
if ((inner != null) &&
|
||||
(inner.getXml() != null)) {
|
||||
xmlName = inner.getXml().getName();
|
||||
}
|
||||
|
||||
// Detect XML list where the inner item is a reference.
|
||||
if (am.getXml() != null && am.getXml().getWrapped() &&
|
||||
am.getItems() != null &&
|
||||
!StringUtils.isEmpty(am.getItems().get$ref())) {
|
||||
if (model.getXml() != null && model.getXml().getWrapped() &&
|
||||
inner != null &&
|
||||
!StringUtils.isEmpty(inner.get$ref())) {
|
||||
Schema inner_schema = allDefinitions.get(
|
||||
ModelUtils.getSimpleRef(am.getItems().get$ref()));
|
||||
ModelUtils.getSimpleRef(inner.get$ref()));
|
||||
|
||||
if (inner_schema.getXml() != null &&
|
||||
inner_schema.getXml().getName() != null) {
|
||||
|
@ -295,9 +295,8 @@ public class ScalaAkkaClientCodegen extends AbstractScalaCodegen implements Code
|
||||
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
|
||||
return "Map[String, " + inner + "].empty ";
|
||||
} else if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
String inner = getSchemaType(ap.getItems());
|
||||
if (ModelUtils.isSet(ap)) {
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(p));
|
||||
if (ModelUtils.isSet(p)) {
|
||||
return "Set[" + inner + "].empty ";
|
||||
}
|
||||
return "Seq[" + inner + "].empty ";
|
||||
|
@ -261,8 +261,7 @@ public class ScalaFinchServerCodegen extends DefaultCodegen implements CodegenCo
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -384,8 +384,7 @@ public class ScalaGatlingCodegen extends AbstractScalaCodegen implements Codegen
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -711,8 +711,7 @@ public class ScalaHttp4sServerCodegen extends DefaultCodegen implements CodegenC
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -295,9 +295,8 @@ public class ScalaPekkoClientCodegen extends AbstractScalaCodegen implements Cod
|
||||
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
|
||||
return "Map[String, " + inner + "].empty ";
|
||||
} else if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
String inner = getSchemaType(ap.getItems());
|
||||
if (ModelUtils.isSet(ap)) {
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(p));
|
||||
if (ModelUtils.isSet(p)) {
|
||||
return "Set[" + inner + "].empty ";
|
||||
}
|
||||
return "Seq[" + inner + "].empty ";
|
||||
|
@ -369,7 +369,7 @@ public class ScalaPlayFrameworkServerCodegen extends AbstractScalaCodegen implem
|
||||
}
|
||||
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
Schema items = ((ArraySchema) p).getItems();
|
||||
Schema items = ModelUtils.getSchemaItems(p);
|
||||
String inner = getSchemaType(items);
|
||||
if (ModelUtils.isSet(p)) {
|
||||
return "Set.empty[" + inner + "]";
|
||||
|
@ -413,9 +413,8 @@ public class ScalaSttp4ClientCodegen extends AbstractScalaCodegen implements Cod
|
||||
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
|
||||
return "Map[String, " + inner + "].empty ";
|
||||
} else if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
String inner = getSchemaType(ap.getItems());
|
||||
if (ModelUtils.isSet(ap)) {
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(p));
|
||||
if (ModelUtils.isSet(p)) {
|
||||
return "Set[" + inner + "].empty ";
|
||||
}
|
||||
return "Seq[" + inner + "].empty ";
|
||||
|
@ -431,9 +431,8 @@ public class ScalaSttpClientCodegen extends AbstractScalaCodegen implements Code
|
||||
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));
|
||||
return "Map[String, " + inner + "].empty ";
|
||||
} else if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
String inner = getSchemaType(ap.getItems());
|
||||
if (ModelUtils.isSet(ap)) {
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(p));
|
||||
if (ModelUtils.isSet(p)) {
|
||||
return "Set[" + inner + "].empty ";
|
||||
}
|
||||
return "Seq[" + inner + "].empty ";
|
||||
|
@ -193,9 +193,8 @@ public class ScalazClientCodegen extends AbstractScalaCodegen implements Codegen
|
||||
|
||||
return "Map.empty[String, " + inner + "] ";
|
||||
} else if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
String inner = getSchemaType(ap.getItems());
|
||||
String collectionType = ModelUtils.isSet(ap) ? typeMapping.get("set") : typeMapping.get("array");
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(p));
|
||||
String collectionType = ModelUtils.isSet(p) ? typeMapping.get("set") : typeMapping.get("array");
|
||||
|
||||
// We assume that users would map these collections to a monoid with an identity function
|
||||
// There's no reason to assume mutable structure here (which may make consumption more difficult)
|
||||
|
@ -133,8 +133,7 @@ public class StaticHtml2Generator extends DefaultCodegen implements CodegenConfi
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -116,8 +116,7 @@ public class StaticHtmlGenerator extends DefaultCodegen implements CodegenConfig
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
|
@ -394,8 +394,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig
|
||||
if (additionalProperties != null) {
|
||||
Schema inner = null;
|
||||
if (ModelUtils.isArraySchema(schema)) {
|
||||
ArraySchema ap = (ArraySchema) schema;
|
||||
inner = ap.getItems();
|
||||
inner = ModelUtils.getSchemaItems(schema);
|
||||
} else if (ModelUtils.isMapSchema(schema)) {
|
||||
inner = ModelUtils.getAdditionalProperties(schema);
|
||||
}
|
||||
@ -676,8 +675,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return ModelUtils.isSet(p) ? "Set<" + getTypeDeclaration(inner) + ">" : "[" + getTypeDeclaration(inner) + "]";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
Schema inner = ModelUtils.getAdditionalProperties(p);
|
||||
@ -794,8 +792,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig
|
||||
if (ModelUtils.isMapSchema(p)) {
|
||||
return getSchemaType(ModelUtils.getAdditionalProperties(p));
|
||||
} else if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
String inner = getSchemaType(ap.getItems());
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(p));
|
||||
return ModelUtils.isSet(p) ? "Set<" + inner + ">" : "[" + inner + "]";
|
||||
}
|
||||
return null;
|
||||
|
@ -289,7 +289,7 @@ public class SwiftCombineClientCodegen extends DefaultCodegen implements Codegen
|
||||
Schema<?> schema = ModelUtils.unaliasSchema(this.openAPI, p, importMapping);
|
||||
Schema<?> target = ModelUtils.isGenerateAliasAsModel() ? p : schema;
|
||||
if (ModelUtils.isArraySchema(target)) {
|
||||
Schema<?> items = getSchemaItems((ArraySchema) schema);
|
||||
Schema<?> items = ModelUtils.getSchemaItems(schema);
|
||||
return ModelUtils.isSet(target) && ModelUtils.isObjectSchema(items) ? "Set<" + getTypeDeclaration(items) + ">" : "[" + getTypeDeclaration(items) + "]";
|
||||
} else if (ModelUtils.isMapSchema(target)) {
|
||||
// Note: ModelUtils.isMapSchema(p) returns true when p is a composed schema that also defines
|
||||
@ -422,8 +422,7 @@ public class SwiftCombineClientCodegen extends DefaultCodegen implements Codegen
|
||||
if (ModelUtils.isMapSchema(p)) {
|
||||
return getSchemaType(ModelUtils.getAdditionalProperties(p));
|
||||
} else if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
String inner = getSchemaType(ap.getItems());
|
||||
String inner = getSchemaType(ModelUtils.getSchemaItems(p));
|
||||
return ModelUtils.isSet(p) ? "Set<" + inner + ">" : "[" + inner + "]";
|
||||
}
|
||||
return null;
|
||||
|
@ -482,7 +482,7 @@ public class TypeScriptClientCodegen extends AbstractTypeScriptClientCodegen imp
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
Schema inner;
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
inner = ((ArraySchema) p).getItems();
|
||||
inner = ModelUtils.getSchemaItems(p);
|
||||
return this.getSchemaType(p) + "<" + this.getTypeDeclaration(unaliasSchema(inner)) + ">";
|
||||
} else if (ModelUtils.isMapSchema(p)) {
|
||||
inner = getSchemaAdditionalProperties(p);
|
||||
@ -787,8 +787,7 @@ public class TypeScriptClientCodegen extends AbstractTypeScriptClientCodegen imp
|
||||
}
|
||||
return fullPrefix + example + closeChars;
|
||||
} else if (ModelUtils.isArraySchema(schema)) {
|
||||
ArraySchema arrayschema = (ArraySchema) schema;
|
||||
Schema itemSchema = arrayschema.getItems();
|
||||
Schema itemSchema = ModelUtils.getSchemaItems(schema);
|
||||
String itemModelName = getModelName(itemSchema);
|
||||
if (objExample instanceof Iterable && itemModelName == null) {
|
||||
// If the example is already a list, return it directly instead of wrongly wrap it in another list
|
||||
@ -919,8 +918,7 @@ public class TypeScriptClientCodegen extends AbstractTypeScriptClientCodegen imp
|
||||
} else if (simpleStringSchema(schema)) {
|
||||
return propName + "_example";
|
||||
} else if (ModelUtils.isArraySchema(schema)) {
|
||||
ArraySchema arraySchema = (ArraySchema) schema;
|
||||
Schema itemSchema = arraySchema.getItems();
|
||||
Schema itemSchema = ModelUtils.getSchemaItems(schema);
|
||||
example = getObjectExample(itemSchema);
|
||||
if (example != null) {
|
||||
return example;
|
||||
|
@ -337,7 +337,7 @@ public class TypeScriptNodeClientCodegen extends AbstractTypeScriptClientCodegen
|
||||
Schema additionalProperties = ModelUtils.getAdditionalProperties(schema);
|
||||
codegenModel.additionalPropertiesType = getSchemaType(additionalProperties);
|
||||
if ("array".equalsIgnoreCase(codegenModel.additionalPropertiesType)) {
|
||||
codegenModel.additionalPropertiesType += '<' + getSchemaType(((ArraySchema) additionalProperties).getItems()) + '>';
|
||||
codegenModel.additionalPropertiesType += '<' + getSchemaType((ModelUtils.getSchemaItems(additionalProperties))) + '>';
|
||||
}
|
||||
addImport(codegenModel, codegenModel.additionalPropertiesType);
|
||||
}
|
||||
|
@ -235,8 +235,7 @@ public class XojoClientCodegen extends DefaultCodegen implements CodegenConfig {
|
||||
@Override
|
||||
public String getTypeDeclaration(Schema p) {
|
||||
if (ModelUtils.isArraySchema(p)) {
|
||||
ArraySchema ap = (ArraySchema) p;
|
||||
Schema inner = ap.getItems();
|
||||
Schema inner = ModelUtils.getSchemaItems(p);
|
||||
return super.getTypeDeclaration(inner);
|
||||
}
|
||||
return super.getTypeDeclaration(p);
|
||||
|
@ -20,6 +20,7 @@ package org.openapitools.codegen.utils;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import io.swagger.v3.core.util.AnnotationsUtils;
|
||||
import io.swagger.v3.core.util.Json;
|
||||
import io.swagger.v3.oas.models.OpenAPI;
|
||||
import io.swagger.v3.oas.models.Operation;
|
||||
import io.swagger.v3.oas.models.PathItem;
|
||||
@ -356,8 +357,8 @@ public class ModelUtils {
|
||||
visitSchema(openAPI, s, mimeType, visitedSchemas, visitor);
|
||||
}
|
||||
}
|
||||
} else if (schema instanceof ArraySchema) {
|
||||
Schema itemsSchema = ((ArraySchema) schema).getItems();
|
||||
} else if (ModelUtils.isArraySchema(schema)) {
|
||||
Schema itemsSchema = ModelUtils.getSchemaItems(schema);
|
||||
if (itemsSchema != null) {
|
||||
visitSchema(openAPI, itemsSchema, mimeType, visitedSchemas, visitor);
|
||||
}
|
||||
@ -594,7 +595,44 @@ public class ModelUtils {
|
||||
* @return true if the specified schema is an Array schema.
|
||||
*/
|
||||
public static boolean isArraySchema(Schema schema) {
|
||||
return (schema instanceof ArraySchema);
|
||||
if (schema == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (schema instanceof JsonSchema) { // 3.1 spec
|
||||
if (schema.getTypes() != null && schema.getTypes().contains("array")) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else { // 3.0 spec
|
||||
return (schema instanceof ArraySchema) || "array".equals(schema.getType());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the schema in the array's item. Null if schema is not an array.
|
||||
*
|
||||
* @param schema the OAS schema
|
||||
* @return item schema.
|
||||
*/
|
||||
public static Schema<?> getSchemaItems(Schema schema) {
|
||||
if (!isArraySchema(schema)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Schema<?> items = schema.getItems();
|
||||
if (items == null) {
|
||||
if (schema instanceof JsonSchema) { // 3.1 spec
|
||||
// do nothing as the schema may contain prefixItems only
|
||||
} else { // 3.0 spec, default to string
|
||||
LOGGER.error("Undefined array inner type for `{}`. Default to String.", schema.getName());
|
||||
items = new StringSchema().description("TODO default missing array inner type to string");
|
||||
schema.setItems(items);
|
||||
}
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
public static boolean isSet(Schema schema) {
|
||||
@ -1272,7 +1310,7 @@ public class ModelUtils {
|
||||
}
|
||||
}
|
||||
} else if (isArraySchema(schema)) {
|
||||
Schema itemsSchema = ((ArraySchema) schema).getItems();
|
||||
Schema itemsSchema = ModelUtils.getSchemaItems(schema);
|
||||
if (itemsSchema != null) {
|
||||
return hasSelfReference(openAPI, itemsSchema, visitedSchemaNames);
|
||||
}
|
||||
|
@ -589,4 +589,53 @@ public class OpenAPINormalizerTest {
|
||||
assertEquals(((Schema) schema2.getProperties().get("my_enum")).getAnyOf(), null);
|
||||
assertEquals(((Schema) schema2.getProperties().get("my_enum")).get$ref(), "#/components/schemas/MyEnum");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOpenAPINormalizerProcessingArraySchema31Spec() {
|
||||
// to test array schema processing in 3.1 spec
|
||||
OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_1/issue_18291.yaml");
|
||||
|
||||
Schema schema = openAPI.getComponents().getSchemas().get("Foo");
|
||||
assertEquals(((Schema) schema.getProperties().get("arrayOfStrings")).getTypes().size(), 1);
|
||||
assertEquals(((Schema) schema.getProperties().get("arrayOfStrings")).getTypes().contains("array"), true);
|
||||
assertEquals(((Schema) schema.getProperties().get("arrayOfStrings")).getType(), null);
|
||||
assertEquals(ModelUtils.isArraySchema((Schema) schema.getProperties().get("arrayOfStrings")), true);
|
||||
assertEquals(((Schema) schema.getProperties().get("arrayOfStrings")).getItems().getType(), null);
|
||||
assertEquals(((Schema) schema.getProperties().get("arrayOfStrings")).getItems().getTypes().contains("string"), true);
|
||||
|
||||
Schema schema3 = openAPI.getComponents().getSchemas().get("Bar");
|
||||
assertEquals(((Schema) schema3.getAllOf().get(0)).get$ref(), "#/components/schemas/Foo");
|
||||
|
||||
Schema schema5 = ModelUtils.getSchema(openAPI, ModelUtils.getSimpleRef(((Schema) schema3.getAllOf().get(0)).get$ref()));
|
||||
assertEquals(((Schema) schema5.getProperties().get("arrayOfStrings")).getTypes().size(), 1);
|
||||
assertEquals(((Schema) schema5.getProperties().get("arrayOfStrings")).getTypes().contains("array"), true);
|
||||
assertEquals(((Schema) schema5.getProperties().get("arrayOfStrings")).getType(), null);
|
||||
assertEquals(ModelUtils.isArraySchema((Schema) schema5.getProperties().get("arrayOfStrings")), true);
|
||||
assertEquals(((Schema) schema5.getProperties().get("arrayOfStrings")).getItems().getType(), null);
|
||||
assertEquals(((Schema) schema5.getProperties().get("arrayOfStrings")).getItems().getTypes().contains("string"), true);
|
||||
|
||||
Map<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");
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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'
|
@ -909,14 +909,15 @@ components:
|
||||
properties: {}
|
||||
type: object
|
||||
title: HTTPValidationError
|
||||
AnyOfArray:
|
||||
anyOf:
|
||||
- type: array
|
||||
items:
|
||||
type: string
|
||||
- type: array
|
||||
items:
|
||||
type: integer
|
||||
# okhttp-gson doesnot support array of string
|
||||
#AnyOfArray:
|
||||
# anyOf:
|
||||
# - type: array
|
||||
# items:
|
||||
# type: string
|
||||
# - type: array
|
||||
# items:
|
||||
# type: integer
|
||||
ArrayPrefixItems:
|
||||
type: array
|
||||
description: |
|
||||
|
@ -6,7 +6,6 @@ api/openapi.yaml
|
||||
build.gradle
|
||||
build.sbt
|
||||
docs/Animal.md
|
||||
docs/AnyOfArray.md
|
||||
docs/AnyTypeTest.md
|
||||
docs/ArrayOfSameRef.md
|
||||
docs/Cat.md
|
||||
@ -63,7 +62,6 @@ src/main/java/org/openapitools/client/auth/OAuthOkHttpClient.java
|
||||
src/main/java/org/openapitools/client/auth/RetryingOAuth.java
|
||||
src/main/java/org/openapitools/client/model/AbstractOpenApiSchema.java
|
||||
src/main/java/org/openapitools/client/model/Animal.java
|
||||
src/main/java/org/openapitools/client/model/AnyOfArray.java
|
||||
src/main/java/org/openapitools/client/model/AnyTypeTest.java
|
||||
src/main/java/org/openapitools/client/model/ArrayOfSameRef.java
|
||||
src/main/java/org/openapitools/client/model/Cat.java
|
||||
|
@ -145,7 +145,6 @@ Class | Method | HTTP request | Description
|
||||
## Documentation for Models
|
||||
|
||||
- [Animal](docs/Animal.md)
|
||||
- [AnyOfArray](docs/AnyOfArray.md)
|
||||
- [AnyTypeTest](docs/AnyTypeTest.md)
|
||||
- [ArrayOfSameRef](docs/ArrayOfSameRef.md)
|
||||
- [Cat](docs/Cat.md)
|
||||
|
@ -1022,12 +1022,6 @@ components:
|
||||
properties: {}
|
||||
title: HTTPValidationError
|
||||
type: object
|
||||
AnyOfArray:
|
||||
anyOf:
|
||||
- items:
|
||||
type: string
|
||||
- items:
|
||||
type: integer
|
||||
ArrayPrefixItems:
|
||||
description: |
|
||||
An item that was added to the queue.
|
||||
|
@ -1,12 +0,0 @@
|
||||
|
||||
|
||||
# AnyOfArray
|
||||
|
||||
|
||||
## Properties
|
||||
|
||||
| Name | Type | Description | Notes |
|
||||
|------------ | ------------- | ------------- | -------------|
|
||||
|
||||
|
||||
|
@ -129,7 +129,6 @@ public class JSON {
|
||||
gsonBuilder.registerTypeAdapter(OffsetDateTime.class, offsetDateTimeTypeAdapter);
|
||||
gsonBuilder.registerTypeAdapter(LocalDate.class, localDateTypeAdapter);
|
||||
gsonBuilder.registerTypeAdapter(byte[].class, byteArrayAdapter);
|
||||
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.AnyOfArray.CustomTypeAdapterFactory());
|
||||
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.AnyTypeTest.CustomTypeAdapterFactory());
|
||||
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.ArrayOfSameRef.CustomTypeAdapterFactory());
|
||||
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Cat.CustomTypeAdapterFactory());
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user