Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,8 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
@Getter @Setter
public List<CodegenProperty> nonNullableVars = new ArrayList<>(); // a list of non-nullable properties
@Getter @Setter
public List<String> nameOnlyVars = new ArrayList<>(); // Names of properties specified by propertyNames
@Getter @Setter
public Map<String, Object> allowableValues;

// Sorted sets of required parameters.
Expand Down Expand Up @@ -256,6 +258,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
private Number multipleOf;
private CodegenProperty items;
private CodegenProperty additionalProperties;
private CodegenProperty propertyNames;
private boolean isModel;
private boolean hasRequiredVars;
private boolean hasDiscriminatorWithNonEmptyMapping;
Expand Down Expand Up @@ -634,6 +637,20 @@ public void setAdditionalProperties(CodegenProperty additionalProperties) {
this.additionalProperties = additionalProperties;
}

@Override
public CodegenProperty getPropertyNames() {
return propertyNames;
}

@Override
public void setPropertyNames(CodegenProperty propertyNames) {
this.propertyNames = propertyNames;
if (!propertyNames.getIsEnum()) {
return;
}
this.nameOnlyVars.addAll(propertyNames.get_enum());
}

@Override
public boolean getHasValidation() {
return hasValidation;
Expand Down Expand Up @@ -970,6 +987,7 @@ public boolean equals(Object o) {
Objects.equals(readOnlyVars, that.readOnlyVars) &&
Objects.equals(readWriteVars, that.readWriteVars) &&
Objects.equals(parentVars, that.parentVars) &&
Objects.equals(nameOnlyVars, that.nameOnlyVars) &&
Objects.equals(allowableValues, that.allowableValues) &&
Objects.equals(mandatory, that.mandatory) &&
Objects.equals(allMandatory, that.allMandatory) &&
Expand All @@ -978,6 +996,7 @@ public boolean equals(Object o) {
Objects.equals(vendorExtensions, that.vendorExtensions) &&
Objects.equals(additionalPropertiesType, that.additionalPropertiesType) &&
Objects.equals(isAdditionalPropertiesTrue, that.isAdditionalPropertiesTrue) &&
Objects.equals(propertyNames, that.propertyNames) &&
Objects.equals(getMaxProperties(), that.getMaxProperties()) &&
Objects.equals(getMinProperties(), that.getMinProperties()) &&
Objects.equals(getMaxItems(), that.getMaxItems()) &&
Expand All @@ -1002,10 +1021,10 @@ public int hashCode() {
getArrayModelType(), isAlias, isString, isInteger, isLong, isNumber, isNumeric, isFloat, isDouble,
isDate, isDateTime, isNull, hasValidation, isShort, isUnboundedInteger, isBoolean,
getVars(), getAllVars(), getNonNullableVars(), getRequiredVars(), getOptionalVars(), getReadOnlyVars(), getReadWriteVars(),
getParentVars(), getAllowableValues(), getMandatory(), getAllMandatory(), getImports(), hasVars,
getParentVars(), getNameOnlyVars(), getAllowableValues(), getMandatory(), getAllMandatory(), getImports(), hasVars,
isEmptyVars(), hasMoreModels, hasEnums, isEnum, isNullable, hasRequired, hasOptional, isArray,
hasChildren, isMap, isOptional, isDeprecated, hasReadOnly, hasOnlyReadOnly, getExternalDocumentation(), getVendorExtensions(),
getAdditionalPropertiesType(), getMaxProperties(), getMinProperties(), getUniqueItems(), getMaxItems(),
getAdditionalPropertiesType(), getPropertyNames(), getMaxProperties(), getMinProperties(), getUniqueItems(), getMaxItems(),
getMinItems(), getMaxLength(), getMinLength(), getExclusiveMinimum(), getExclusiveMaximum(), getMinimum(),
getMaximum(), getPattern(), getMultipleOf(), getItems(), getAdditionalProperties(), getIsModel(),
getAdditionalPropertiesIsAnyType(), hasDiscriminatorWithNonEmptyMapping,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
public Map<String, Object> allowableValues;
public CodegenProperty items;
public CodegenProperty additionalProperties;
public CodegenProperty propertyNames;
public List<CodegenProperty> vars = new ArrayList<CodegenProperty>(); // all properties (without parent's properties)
public List<CodegenProperty> requiredVars = new ArrayList<CodegenProperty>();
public CodegenProperty mostInnerItems;
Expand Down Expand Up @@ -193,6 +194,7 @@ public CodegenParameter copy() {
output.minimum = this.minimum;
output.pattern = this.pattern;
output.additionalProperties = this.additionalProperties;
output.propertyNames = this.propertyNames;
output.isNull = this.isNull;
output.isVoid = this.isVoid;
output.nameInPascalCase = this.nameInPascalCase;
Expand Down Expand Up @@ -295,7 +297,7 @@ public int hashCode() {
jsonSchema, isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isDecimal,
isByteArray, isBinary, isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isPassword,
isFreeFormObject, isAnyType, isArray, isMap, queryIsJsonMimeType, isOptional, isFile, isEnum, isEnumRef, _enum, allowableValues,
items, mostInnerItems, additionalProperties, vars, requiredVars, vendorExtensions, hasValidation,
items, mostInnerItems, additionalProperties, propertyNames, vars, requiredVars, vendorExtensions, hasValidation,
getMaxProperties(), getMinProperties(), isNullable, isDeprecated, required, getMaximum(),
getExclusiveMaximum(), getMinimum(), getExclusiveMinimum(), getMaxLength(), getMinLength(),
getPattern(), getMaxItems(), getMinItems(), getUniqueItems(), contentType, multipleOf, isNull, isVoid,
Expand Down Expand Up @@ -398,6 +400,7 @@ public boolean equals(Object o) {
Objects.equals(allowableValues, that.allowableValues) &&
Objects.equals(items, that.items) &&
Objects.equals(additionalProperties, that.additionalProperties) &&
Objects.equals(propertyNames, that.propertyNames) &&
Objects.equals(vars, that.vars) &&
Objects.equals(requiredVars, that.requiredVars) &&
Objects.equals(mostInnerItems, that.mostInnerItems) &&
Expand Down Expand Up @@ -495,6 +498,7 @@ public String toString() {
sb.append(", items=").append(items);
sb.append(", mostInnerItems=").append(mostInnerItems);
sb.append(", additionalProperties=").append(additionalProperties);
sb.append(", propertyNames=").append(propertyNames);
sb.append(", vars=").append(vars);
sb.append(", requiredVars=").append(requiredVars);
sb.append(", vendorExtensions=").append(vendorExtensions);
Expand Down Expand Up @@ -858,6 +862,16 @@ public void setAdditionalProperties(CodegenProperty additionalProperties) {
this.additionalProperties = additionalProperties;
}

@Override
public CodegenProperty getPropertyNames() {
return propertyNames;
}

@Override
public void setPropertyNames(CodegenProperty propertyNames) {
this.propertyNames = propertyNames;
}

@Override
public List<CodegenProperty> getVars() {
return vars;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,8 +196,10 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
// the undeclared properties.
public CodegenProperty items;
public CodegenProperty additionalProperties;
public CodegenProperty propertyNames;
public List<CodegenProperty> vars = new ArrayList<CodegenProperty>(); // all properties (without parent's properties)
public List<CodegenProperty> requiredVars = new ArrayList<>();
public List<String> nameOnlyVars = new ArrayList<>();
public CodegenProperty mostInnerItems;
@Getter @Setter
public Map<String, Object> vendorExtensions = new HashMap<String, Object>();
Expand Down Expand Up @@ -465,6 +467,20 @@ public void setAdditionalProperties(CodegenProperty additionalProperties) {
this.additionalProperties = additionalProperties;
}

@Override
public CodegenProperty getPropertyNames() {
return propertyNames;
}

@Override
public void setPropertyNames(CodegenProperty propertyNames) {
this.propertyNames = propertyNames;
if (!propertyNames.getIsEnum()) {
return;
}
nameOnlyVars.addAll(propertyNames.get_enum());
}

@Override
public boolean getIsModel() {
return isModel;
Expand Down Expand Up @@ -1190,6 +1206,7 @@ public boolean equals(Object o) {
Objects.equals(allowableValues, that.allowableValues) &&
Objects.equals(items, that.items) &&
Objects.equals(additionalProperties, that.additionalProperties) &&
Objects.equals(propertyNames, that.propertyNames) &&
Objects.equals(vars, that.vars) &&
Objects.equals(requiredVars, that.requiredVars) &&
Objects.equals(mostInnerItems, that.mostInnerItems) &&
Expand Down Expand Up @@ -1220,7 +1237,7 @@ public int hashCode() {
isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isPassword, isFreeFormObject,
isArray, isMap, isOptional, isEnum, isInnerEnum, isEnumRef, isAnyType, isReadOnly, isWriteOnly, isNullable, isShort,
isUnboundedInteger, isSelfReference, isCircularReference, isDiscriminator, isNew, isOverridden, _enum,
allowableValues, items, mostInnerItems, additionalProperties, vars, requiredVars,
allowableValues, items, mostInnerItems, additionalProperties, propertyNames, vars, requiredVars,
vendorExtensions, hasValidation, isInherited, discriminatorValue, nameInPascalCase, nameInCamelCase,
nameInSnakeCase, enumName, maxItems, minItems, isXmlAttribute, xmlPrefix, xmlName,
xmlNamespace, isXmlWrapped, isNull, isVoid, additionalPropertiesIsAnyType, hasVars, hasRequired,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties {
public Number multipleOf;
public CodegenProperty items;
public CodegenProperty additionalProperties;
public CodegenProperty propertyNames;
public List<CodegenProperty> vars = new ArrayList<CodegenProperty>(); // all properties (without parent's properties)
public List<CodegenProperty> requiredVars = new ArrayList<CodegenProperty>();
private boolean hasValidation;
Expand All @@ -113,7 +114,7 @@ public int hashCode() {
isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isDecimal, isByteArray, isBoolean, isDate,
isDateTime, isUuid, isEmail, isPassword, isModel, isFreeFormObject, isAnyType, isDefault, simpleType, primitiveType,
isMap, isOptional, isArray, isBinary, isFile, schema, jsonSchema, vendorExtensions, items, additionalProperties,
vars, requiredVars, isNull, isVoid, hasValidation, isShort, isUnboundedInteger,
propertyNames, vars, requiredVars, isNull, isVoid, hasValidation, isShort, isUnboundedInteger,
getMaxProperties(), getMinProperties(), uniqueItems, getMaxItems(), getMinItems(), getMaxLength(),
getMinLength(), exclusiveMinimum, exclusiveMaximum, getMinimum(), getMaximum(), getPattern(),
is1xx, is2xx, is3xx, is4xx, is5xx, additionalPropertiesIsAnyType, hasVars, hasRequired,
Expand Down Expand Up @@ -177,6 +178,7 @@ public boolean equals(Object o) {
Objects.equals(content, that.getContent()) &&
Objects.equals(responseHeaders, that.getResponseHeaders()) &&
Objects.equals(composedSchemas, that.getComposedSchemas()) &&
Objects.equals(propertyNames, that.propertyNames) &&
Objects.equals(vars, that.vars) &&
Objects.equals(requiredVars, that.requiredVars) &&
Objects.equals(headers, that.headers) &&
Expand Down Expand Up @@ -531,6 +533,16 @@ public void setAdditionalProperties(CodegenProperty additionalProperties) {
this.additionalProperties = additionalProperties;
}

@Override
public CodegenProperty getPropertyNames() {
return propertyNames;
}

@Override
public void setPropertyNames(CodegenProperty propertyNames) {
this.propertyNames = propertyNames;
}

@Override
public List<CodegenProperty> getVars() {
return vars;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2895,6 +2895,7 @@ protected void updateModelForObject(CodegenModel m, Schema schema) {
}
// process 'additionalProperties'
setAddProps(schema, m);
setPropNames(schema, m);
addRequiredVarsMap(schema, m);
}

Expand All @@ -2916,6 +2917,7 @@ protected void updateModelForAnyType(CodegenModel m, Schema schema) {
}
// process 'additionalProperties'
setAddProps(schema, m);
setPropNames(schema, m);
addRequiredVarsMap(schema, m);
}

Expand Down Expand Up @@ -3232,6 +3234,18 @@ protected void SortModelPropertiesByRequiredFlag(CodegenModel model) {
Collections.sort(model.allVars, comparator);
}

protected void setPropNames(Schema schema, IJsonSchemaValidationProperties property) {
if (schema.equals(new Schema())) {
return;
}

if (schema.getPropertyNames() == null) {
return;
}
CodegenProperty propNamesProp = fromProperty(getPropertyNamesName(), schema.getPropertyNames(), false, false);
property.setPropertyNames(propNamesProp);
}

protected void setAddProps(Schema schema, IJsonSchemaValidationProperties property) {
if (schema.equals(new Schema())) {
// if we are trying to set additionalProperties on an empty schema stop recursing
Expand Down Expand Up @@ -3854,7 +3868,7 @@ protected void updatePropertyForObject(CodegenProperty property, Schema p) {
// an object or anyType composed schema that has additionalProperties set
updatePropertyForMap(property, p);
}
addVarsRequiredVarsAdditionalProps(p, property);
addVarsRequiredVarsAdditionalPropsPropertyNames(p, property);
}

protected void updatePropertyForAnyType(CodegenProperty property, Schema p) {
Expand All @@ -3877,7 +3891,7 @@ protected void updatePropertyForAnyType(CodegenProperty property, Schema p) {
// even though it should allow in any type and have map constraints for properties
updatePropertyForMap(property, p);
}
addVarsRequiredVarsAdditionalProps(p, property);
addVarsRequiredVarsAdditionalPropsPropertyNames(p, property);
}

protected void updatePropertyForString(CodegenProperty property, Schema p) {
Expand Down Expand Up @@ -5165,9 +5179,9 @@ public CodegenResponse fromResponse(String responseCode, ApiResponse response) {
r.simpleType = false;
r.containerType = cp.containerType;
r.containerTypeMapped = cp.containerTypeMapped;
addVarsRequiredVarsAdditionalProps(responseSchema, r);
addVarsRequiredVarsAdditionalPropsPropertyNames(responseSchema, r);
} else if (ModelUtils.isAnyType(responseSchema)) {
addVarsRequiredVarsAdditionalProps(responseSchema, r);
addVarsRequiredVarsAdditionalPropsPropertyNames(responseSchema, r);
} else if (!ModelUtils.isBooleanSchema(responseSchema)) {
// referenced schemas
LOGGER.debug("Property type is not primitive: {}", cp.dataType);
Expand Down Expand Up @@ -5478,14 +5492,14 @@ public CodegenParameter fromParameter(Parameter parameter, Set<String> imports)
if (ModelUtils.isFreeFormObject(parameterSchema, openAPI)) {
codegenParameter.isFreeFormObject = true;
}
addVarsRequiredVarsAdditionalProps(parameterSchema, codegenParameter);
addVarsRequiredVarsAdditionalPropsPropertyNames(parameterSchema, codegenParameter);
} else if (ModelUtils.isNullType(parameterSchema)) {
} else if (ModelUtils.isAnyType(parameterSchema)) {
// any schema with no type set, composed schemas often do this
if (ModelUtils.isMapSchema(parameterSchema)) { // for map parameter
updateParameterForMap(codegenParameter, parameterSchema, imports);
}
addVarsRequiredVarsAdditionalProps(parameterSchema, codegenParameter);
addVarsRequiredVarsAdditionalPropsPropertyNames(parameterSchema, codegenParameter);
} else if (ModelUtils.isArraySchema(parameterSchema)) {
Schema inner = ModelUtils.getSchemaItems(parameterSchema);

Expand Down Expand Up @@ -7771,7 +7785,7 @@ protected void updateRequestBodyForObject(CodegenParameter codegenParameter, Sch
// object type schema or composed schema with properties defined
this.addBodyModelSchema(codegenParameter, name, schema, imports, bodyParameterName, false);
}
addVarsRequiredVarsAdditionalProps(schema, codegenParameter);
addVarsRequiredVarsAdditionalPropsPropertyNames(schema, codegenParameter);
}

protected void updateRequestBodyForArray(CodegenParameter codegenParameter, Schema schema, String name, Set<String> imports, String bodyParameterName) {
Expand Down Expand Up @@ -8056,7 +8070,7 @@ public CodegenParameter fromRequestBody(RequestBody body, Set<String> imports, S
} else {
updateRequestBodyForPrimitiveType(codegenParameter, schema, bodyParameterName, imports);
}
addVarsRequiredVarsAdditionalProps(schema, codegenParameter);
addVarsRequiredVarsAdditionalPropsPropertyNames(schema, codegenParameter);
} else {
// referenced schemas
updateRequestBodyForPrimitiveType(codegenParameter, schema, bodyParameterName, imports);
Expand Down Expand Up @@ -8174,12 +8188,13 @@ protected void addRequiredVarsMap(Schema schema, IJsonSchemaValidationProperties
}
}

protected void addVarsRequiredVarsAdditionalProps(Schema schema, IJsonSchemaValidationProperties property) {
protected void addVarsRequiredVarsAdditionalPropsPropertyNames(Schema schema, IJsonSchemaValidationProperties property) {
setAddProps(schema, property);
Set<String> mandatory = schema.getRequired() == null ? Collections.emptySet()
: new TreeSet<>(schema.getRequired());
addVars(property, property.getVars(), schema.getProperties(), mandatory);
addRequiredVarsMap(schema, property);
setPropNames(schema, property);
}

protected String getItemsName(Schema containingSchema, String containingSchemaName) {
Expand All @@ -8194,6 +8209,10 @@ protected String getAdditionalPropertiesName() {
return "additional_properties";
}

protected String getPropertyNamesName() {
return "property_names";
}

private void addJsonSchemaForBodyRequestInCaseItsNotPresent(CodegenParameter codegenParameter, RequestBody body) {
if (codegenParameter.jsonSchema == null)
codegenParameter.jsonSchema = Json.pretty(body);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,10 @@ public interface IJsonSchemaValidationProperties {

void setAdditionalProperties(CodegenProperty additionalProperties);

CodegenProperty getPropertyNames();

void setPropertyNames(CodegenProperty propertyNames);

List<CodegenProperty> getVars();

void setVars(List<CodegenProperty> vars);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,9 @@ private boolean isModelNeeded(Schema schema, Set<Schema> visitedSchemas) {
return true;
}
}
if (ModelUtils.hasEnumPropertyNames(schema)) {
return true;
}

return false;
}
Expand Down
Loading