Skip to content

Commit f26d0fe

Browse files
committed
Add propertyNames and nameOnlyVars to Model and Property
1 parent 848aecc commit f26d0fe

7 files changed

Lines changed: 97 additions & 13 deletions

File tree

modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
144144
@Getter @Setter
145145
public List<CodegenProperty> nonNullableVars = new ArrayList<>(); // a list of non-nullable properties
146146
@Getter @Setter
147+
public List<String> nameOnlyVars = new ArrayList<>(); // Names of properties specified by propertyNames
148+
@Getter @Setter
147149
public Map<String, Object> allowableValues;
148150

149151
// Sorted sets of required parameters.
@@ -256,6 +258,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
256258
private Number multipleOf;
257259
private CodegenProperty items;
258260
private CodegenProperty additionalProperties;
261+
private CodegenProperty propertyNames;
259262
private boolean isModel;
260263
private boolean hasRequiredVars;
261264
private boolean hasDiscriminatorWithNonEmptyMapping;
@@ -634,6 +637,20 @@ public void setAdditionalProperties(CodegenProperty additionalProperties) {
634637
this.additionalProperties = additionalProperties;
635638
}
636639

640+
@Override
641+
public CodegenProperty getPropertyNames() {
642+
return propertyNames;
643+
}
644+
645+
@Override
646+
public void setPropertyNames(CodegenProperty propertyNames) {
647+
this.propertyNames = propertyNames;
648+
if (!propertyNames.getIsEnum()) {
649+
return;
650+
}
651+
this.nameOnlyVars.addAll(propertyNames.get_enum());
652+
}
653+
637654
@Override
638655
public boolean getHasValidation() {
639656
return hasValidation;
@@ -970,6 +987,7 @@ public boolean equals(Object o) {
970987
Objects.equals(readOnlyVars, that.readOnlyVars) &&
971988
Objects.equals(readWriteVars, that.readWriteVars) &&
972989
Objects.equals(parentVars, that.parentVars) &&
990+
Objects.equals(nameOnlyVars, that.nameOnlyVars) &&
973991
Objects.equals(allowableValues, that.allowableValues) &&
974992
Objects.equals(mandatory, that.mandatory) &&
975993
Objects.equals(allMandatory, that.allMandatory) &&
@@ -978,6 +996,7 @@ public boolean equals(Object o) {
978996
Objects.equals(vendorExtensions, that.vendorExtensions) &&
979997
Objects.equals(additionalPropertiesType, that.additionalPropertiesType) &&
980998
Objects.equals(isAdditionalPropertiesTrue, that.isAdditionalPropertiesTrue) &&
999+
Objects.equals(propertyNames, that.propertyNames) &&
9811000
Objects.equals(getMaxProperties(), that.getMaxProperties()) &&
9821001
Objects.equals(getMinProperties(), that.getMinProperties()) &&
9831002
Objects.equals(getMaxItems(), that.getMaxItems()) &&
@@ -1002,10 +1021,10 @@ public int hashCode() {
10021021
getArrayModelType(), isAlias, isString, isInteger, isLong, isNumber, isNumeric, isFloat, isDouble,
10031022
isDate, isDateTime, isNull, hasValidation, isShort, isUnboundedInteger, isBoolean,
10041023
getVars(), getAllVars(), getNonNullableVars(), getRequiredVars(), getOptionalVars(), getReadOnlyVars(), getReadWriteVars(),
1005-
getParentVars(), getAllowableValues(), getMandatory(), getAllMandatory(), getImports(), hasVars,
1024+
getParentVars(), getNameOnlyVars(), getAllowableValues(), getMandatory(), getAllMandatory(), getImports(), hasVars,
10061025
isEmptyVars(), hasMoreModels, hasEnums, isEnum, isNullable, hasRequired, hasOptional, isArray,
10071026
hasChildren, isMap, isOptional, isDeprecated, hasReadOnly, hasOnlyReadOnly, getExternalDocumentation(), getVendorExtensions(),
1008-
getAdditionalPropertiesType(), getMaxProperties(), getMinProperties(), getUniqueItems(), getMaxItems(),
1027+
getAdditionalPropertiesType(), getPropertyNames(), getMaxProperties(), getMinProperties(), getUniqueItems(), getMaxItems(),
10091028
getMinItems(), getMaxLength(), getMinLength(), getExclusiveMinimum(), getExclusiveMaximum(), getMinimum(),
10101029
getMaximum(), getPattern(), getMultipleOf(), getItems(), getAdditionalProperties(), getIsModel(),
10111030
getAdditionalPropertiesIsAnyType(), hasDiscriminatorWithNonEmptyMapping,

modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
6161
public Map<String, Object> allowableValues;
6262
public CodegenProperty items;
6363
public CodegenProperty additionalProperties;
64+
public CodegenProperty propertyNames;
6465
public List<CodegenProperty> vars = new ArrayList<CodegenProperty>(); // all properties (without parent's properties)
6566
public List<CodegenProperty> requiredVars = new ArrayList<CodegenProperty>();
6667
public CodegenProperty mostInnerItems;
@@ -858,6 +859,16 @@ public void setAdditionalProperties(CodegenProperty additionalProperties) {
858859
this.additionalProperties = additionalProperties;
859860
}
860861

862+
@Override
863+
public CodegenProperty getPropertyNames() {
864+
return propertyNames;
865+
}
866+
867+
@Override
868+
public void setPropertyNames(CodegenProperty propertyNames) {
869+
this.propertyNames = propertyNames;
870+
}
871+
861872
@Override
862873
public List<CodegenProperty> getVars() {
863874
return vars;

modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenProperty.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,10 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
196196
// the undeclared properties.
197197
public CodegenProperty items;
198198
public CodegenProperty additionalProperties;
199+
public CodegenProperty propertyNames;
199200
public List<CodegenProperty> vars = new ArrayList<CodegenProperty>(); // all properties (without parent's properties)
200201
public List<CodegenProperty> requiredVars = new ArrayList<>();
202+
public List<String> nameOnlyVars = new ArrayList<>();
201203
public CodegenProperty mostInnerItems;
202204
@Getter @Setter
203205
public Map<String, Object> vendorExtensions = new HashMap<String, Object>();
@@ -465,6 +467,20 @@ public void setAdditionalProperties(CodegenProperty additionalProperties) {
465467
this.additionalProperties = additionalProperties;
466468
}
467469

470+
@Override
471+
public CodegenProperty getPropertyNames() {
472+
return propertyNames;
473+
}
474+
475+
@Override
476+
public void setPropertyNames(CodegenProperty propertyNames) {
477+
this.propertyNames = propertyNames;
478+
if (!propertyNames.getIsEnum()) {
479+
return;
480+
}
481+
nameOnlyVars.addAll(propertyNames.get_enum());
482+
}
483+
468484
@Override
469485
public boolean getIsModel() {
470486
return isModel;
@@ -1190,6 +1206,7 @@ public boolean equals(Object o) {
11901206
Objects.equals(allowableValues, that.allowableValues) &&
11911207
Objects.equals(items, that.items) &&
11921208
Objects.equals(additionalProperties, that.additionalProperties) &&
1209+
Objects.equals(propertyNames, that.propertyNames) &&
11931210
Objects.equals(vars, that.vars) &&
11941211
Objects.equals(requiredVars, that.requiredVars) &&
11951212
Objects.equals(mostInnerItems, that.mostInnerItems) &&
@@ -1220,7 +1237,7 @@ public int hashCode() {
12201237
isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isPassword, isFreeFormObject,
12211238
isArray, isMap, isOptional, isEnum, isInnerEnum, isEnumRef, isAnyType, isReadOnly, isWriteOnly, isNullable, isShort,
12221239
isUnboundedInteger, isSelfReference, isCircularReference, isDiscriminator, isNew, isOverridden, _enum,
1223-
allowableValues, items, mostInnerItems, additionalProperties, vars, requiredVars,
1240+
allowableValues, items, mostInnerItems, additionalProperties, propertyNames, vars, requiredVars,
12241241
vendorExtensions, hasValidation, isInherited, discriminatorValue, nameInPascalCase, nameInCamelCase,
12251242
nameInSnakeCase, enumName, maxItems, minItems, isXmlAttribute, xmlPrefix, xmlName,
12261243
xmlNamespace, isXmlWrapped, isNull, isVoid, additionalPropertiesIsAnyType, hasVars, hasRequired,

modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenResponse.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties {
9191
public Number multipleOf;
9292
public CodegenProperty items;
9393
public CodegenProperty additionalProperties;
94+
public CodegenProperty propertyNames;
9495
public List<CodegenProperty> vars = new ArrayList<CodegenProperty>(); // all properties (without parent's properties)
9596
public List<CodegenProperty> requiredVars = new ArrayList<CodegenProperty>();
9697
private boolean hasValidation;
@@ -531,6 +532,16 @@ public void setAdditionalProperties(CodegenProperty additionalProperties) {
531532
this.additionalProperties = additionalProperties;
532533
}
533534

535+
@Override
536+
public CodegenProperty getPropertyNames() {
537+
return propertyNames;
538+
}
539+
540+
@Override
541+
public void setPropertyNames(CodegenProperty propertyNames) {
542+
this.propertyNames = propertyNames;
543+
}
544+
534545
@Override
535546
public List<CodegenProperty> getVars() {
536547
return vars;

modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2895,6 +2895,7 @@ protected void updateModelForObject(CodegenModel m, Schema schema) {
28952895
}
28962896
// process 'additionalProperties'
28972897
setAddProps(schema, m);
2898+
setPropNames(schema, m);
28982899
addRequiredVarsMap(schema, m);
28992900
}
29002901

@@ -2916,6 +2917,7 @@ protected void updateModelForAnyType(CodegenModel m, Schema schema) {
29162917
}
29172918
// process 'additionalProperties'
29182919
setAddProps(schema, m);
2920+
setPropNames(schema, m);
29192921
addRequiredVarsMap(schema, m);
29202922
}
29212923

@@ -3232,6 +3234,18 @@ protected void SortModelPropertiesByRequiredFlag(CodegenModel model) {
32323234
Collections.sort(model.allVars, comparator);
32333235
}
32343236

3237+
protected void setPropNames(Schema schema, IJsonSchemaValidationProperties property) {
3238+
if (schema.equals(new Schema())) {
3239+
return;
3240+
}
3241+
3242+
if (schema.getPropertyNames() == null) {
3243+
return;
3244+
}
3245+
CodegenProperty propNamesProp = fromProperty(getPropertyNamesName(), schema.getPropertyNames(), false, false);
3246+
property.setPropertyNames(propNamesProp);
3247+
}
3248+
32353249
protected void setAddProps(Schema schema, IJsonSchemaValidationProperties property) {
32363250
if (schema.equals(new Schema())) {
32373251
// if we are trying to set additionalProperties on an empty schema stop recursing
@@ -3854,7 +3868,7 @@ protected void updatePropertyForObject(CodegenProperty property, Schema p) {
38543868
// an object or anyType composed schema that has additionalProperties set
38553869
updatePropertyForMap(property, p);
38563870
}
3857-
addVarsRequiredVarsAdditionalProps(p, property);
3871+
addVarsRequiredVarsAdditionalPropsPropertyNames(p, property);
38583872
}
38593873

38603874
protected void updatePropertyForAnyType(CodegenProperty property, Schema p) {
@@ -3877,7 +3891,7 @@ protected void updatePropertyForAnyType(CodegenProperty property, Schema p) {
38773891
// even though it should allow in any type and have map constraints for properties
38783892
updatePropertyForMap(property, p);
38793893
}
3880-
addVarsRequiredVarsAdditionalProps(p, property);
3894+
addVarsRequiredVarsAdditionalPropsPropertyNames(p, property);
38813895
}
38823896

38833897
protected void updatePropertyForString(CodegenProperty property, Schema p) {
@@ -5165,9 +5179,9 @@ public CodegenResponse fromResponse(String responseCode, ApiResponse response) {
51655179
r.simpleType = false;
51665180
r.containerType = cp.containerType;
51675181
r.containerTypeMapped = cp.containerTypeMapped;
5168-
addVarsRequiredVarsAdditionalProps(responseSchema, r);
5182+
addVarsRequiredVarsAdditionalPropsPropertyNames(responseSchema, r);
51695183
} else if (ModelUtils.isAnyType(responseSchema)) {
5170-
addVarsRequiredVarsAdditionalProps(responseSchema, r);
5184+
addVarsRequiredVarsAdditionalPropsPropertyNames(responseSchema, r);
51715185
} else if (!ModelUtils.isBooleanSchema(responseSchema)) {
51725186
// referenced schemas
51735187
LOGGER.debug("Property type is not primitive: {}", cp.dataType);
@@ -5478,14 +5492,14 @@ public CodegenParameter fromParameter(Parameter parameter, Set<String> imports)
54785492
if (ModelUtils.isFreeFormObject(parameterSchema, openAPI)) {
54795493
codegenParameter.isFreeFormObject = true;
54805494
}
5481-
addVarsRequiredVarsAdditionalProps(parameterSchema, codegenParameter);
5495+
addVarsRequiredVarsAdditionalPropsPropertyNames(parameterSchema, codegenParameter);
54825496
} else if (ModelUtils.isNullType(parameterSchema)) {
54835497
} else if (ModelUtils.isAnyType(parameterSchema)) {
54845498
// any schema with no type set, composed schemas often do this
54855499
if (ModelUtils.isMapSchema(parameterSchema)) { // for map parameter
54865500
updateParameterForMap(codegenParameter, parameterSchema, imports);
54875501
}
5488-
addVarsRequiredVarsAdditionalProps(parameterSchema, codegenParameter);
5502+
addVarsRequiredVarsAdditionalPropsPropertyNames(parameterSchema, codegenParameter);
54895503
} else if (ModelUtils.isArraySchema(parameterSchema)) {
54905504
Schema inner = ModelUtils.getSchemaItems(parameterSchema);
54915505

@@ -7771,7 +7785,7 @@ protected void updateRequestBodyForObject(CodegenParameter codegenParameter, Sch
77717785
// object type schema or composed schema with properties defined
77727786
this.addBodyModelSchema(codegenParameter, name, schema, imports, bodyParameterName, false);
77737787
}
7774-
addVarsRequiredVarsAdditionalProps(schema, codegenParameter);
7788+
addVarsRequiredVarsAdditionalPropsPropertyNames(schema, codegenParameter);
77757789
}
77767790

77777791
protected void updateRequestBodyForArray(CodegenParameter codegenParameter, Schema schema, String name, Set<String> imports, String bodyParameterName) {
@@ -8056,7 +8070,7 @@ public CodegenParameter fromRequestBody(RequestBody body, Set<String> imports, S
80568070
} else {
80578071
updateRequestBodyForPrimitiveType(codegenParameter, schema, bodyParameterName, imports);
80588072
}
8059-
addVarsRequiredVarsAdditionalProps(schema, codegenParameter);
8073+
addVarsRequiredVarsAdditionalPropsPropertyNames(schema, codegenParameter);
80608074
} else {
80618075
// referenced schemas
80628076
updateRequestBodyForPrimitiveType(codegenParameter, schema, bodyParameterName, imports);
@@ -8174,12 +8188,13 @@ protected void addRequiredVarsMap(Schema schema, IJsonSchemaValidationProperties
81748188
}
81758189
}
81768190

8177-
protected void addVarsRequiredVarsAdditionalProps(Schema schema, IJsonSchemaValidationProperties property) {
8191+
protected void addVarsRequiredVarsAdditionalPropsPropertyNames(Schema schema, IJsonSchemaValidationProperties property) {
81788192
setAddProps(schema, property);
81798193
Set<String> mandatory = schema.getRequired() == null ? Collections.emptySet()
81808194
: new TreeSet<>(schema.getRequired());
81818195
addVars(property, property.getVars(), schema.getProperties(), mandatory);
81828196
addRequiredVarsMap(schema, property);
8197+
setPropNames(schema, property);
81838198
}
81848199

81858200
protected String getItemsName(Schema containingSchema, String containingSchemaName) {
@@ -8194,6 +8209,10 @@ protected String getAdditionalPropertiesName() {
81948209
return "additional_properties";
81958210
}
81968211

8212+
protected String getPropertyNamesName() {
8213+
return "property_names";
8214+
}
8215+
81978216
private void addJsonSchemaForBodyRequestInCaseItsNotPresent(CodegenParameter codegenParameter, RequestBody body) {
81988217
if (codegenParameter.jsonSchema == null)
81998218
codegenParameter.jsonSchema = Json.pretty(body);

modules/openapi-generator/src/main/java/org/openapitools/codegen/IJsonSchemaValidationProperties.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,10 @@ public interface IJsonSchemaValidationProperties {
136136

137137
void setAdditionalProperties(CodegenProperty additionalProperties);
138138

139+
CodegenProperty getPropertyNames();
140+
141+
void setPropertyNames(CodegenProperty propertyNames);
142+
139143
List<CodegenProperty> getVars();
140144

141145
void setVars(List<CodegenProperty> vars);
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
{{#additionalPropertiesType}}
22

3-
[key: string]: {{{additionalPropertiesType}}}{{#hasVars}} | any{{/hasVars}};
3+
[key: string]: {{additionalPropertiesType}}{{#hasVars}} | any{{/hasVars}};
4+
{{#nameOnlyVars}}
5+
{{.}}?: {{additionalPropertiesType}};
6+
{{/nameOnlyVars}}
47

58
{{/additionalPropertiesType}}

0 commit comments

Comments
 (0)