Skip to content

Commit 76ee401

Browse files
committed
Add propertyNames and nameOnlyVars to Model and Property
1 parent 561e5bf commit 76ee401

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
@@ -2923,6 +2923,7 @@ protected void updateModelForObject(CodegenModel m, Schema schema) {
29232923
}
29242924
// process 'additionalProperties'
29252925
setAddProps(schema, m);
2926+
setPropNames(schema, m);
29262927
addRequiredVarsMap(schema, m);
29272928
}
29282929

@@ -2944,6 +2945,7 @@ protected void updateModelForAnyType(CodegenModel m, Schema schema) {
29442945
}
29452946
// process 'additionalProperties'
29462947
setAddProps(schema, m);
2948+
setPropNames(schema, m);
29472949
addRequiredVarsMap(schema, m);
29482950
}
29492951

@@ -3260,6 +3262,18 @@ protected void SortModelPropertiesByRequiredFlag(CodegenModel model) {
32603262
Collections.sort(model.allVars, comparator);
32613263
}
32623264

3265+
protected void setPropNames(Schema schema, IJsonSchemaValidationProperties property) {
3266+
if (schema.equals(new Schema())) {
3267+
return;
3268+
}
3269+
3270+
if (schema.getPropertyNames() == null) {
3271+
return;
3272+
}
3273+
CodegenProperty propNamesProp = fromProperty(getPropertyNamesName(), schema.getPropertyNames(), false, false);
3274+
property.setPropertyNames(propNamesProp);
3275+
}
3276+
32633277
protected void setAddProps(Schema schema, IJsonSchemaValidationProperties property) {
32643278
if (schema.equals(new Schema())) {
32653279
// if we are trying to set additionalProperties on an empty schema stop recursing
@@ -3882,7 +3896,7 @@ protected void updatePropertyForObject(CodegenProperty property, Schema p) {
38823896
// an object or anyType composed schema that has additionalProperties set
38833897
updatePropertyForMap(property, p);
38843898
}
3885-
addVarsRequiredVarsAdditionalProps(p, property);
3899+
addVarsRequiredVarsAdditionalPropsPropertyNames(p, property);
38863900
}
38873901

38883902
protected void updatePropertyForAnyType(CodegenProperty property, Schema p) {
@@ -3905,7 +3919,7 @@ protected void updatePropertyForAnyType(CodegenProperty property, Schema p) {
39053919
// even though it should allow in any type and have map constraints for properties
39063920
updatePropertyForMap(property, p);
39073921
}
3908-
addVarsRequiredVarsAdditionalProps(p, property);
3922+
addVarsRequiredVarsAdditionalPropsPropertyNames(p, property);
39093923
}
39103924

39113925
protected void updatePropertyForString(CodegenProperty property, Schema p) {
@@ -5192,9 +5206,9 @@ public CodegenResponse fromResponse(String responseCode, ApiResponse response) {
51925206
r.simpleType = false;
51935207
r.containerType = cp.containerType;
51945208
r.containerTypeMapped = cp.containerTypeMapped;
5195-
addVarsRequiredVarsAdditionalProps(responseSchema, r);
5209+
addVarsRequiredVarsAdditionalPropsPropertyNames(responseSchema, r);
51965210
} else if (ModelUtils.isAnyType(responseSchema)) {
5197-
addVarsRequiredVarsAdditionalProps(responseSchema, r);
5211+
addVarsRequiredVarsAdditionalPropsPropertyNames(responseSchema, r);
51985212
} else if (!ModelUtils.isBooleanSchema(responseSchema)) {
51995213
// referenced schemas
52005214
LOGGER.debug("Property type is not primitive: {}", cp.dataType);
@@ -5505,14 +5519,14 @@ public CodegenParameter fromParameter(Parameter parameter, Set<String> imports)
55055519
if (ModelUtils.isFreeFormObject(parameterSchema, openAPI)) {
55065520
codegenParameter.isFreeFormObject = true;
55075521
}
5508-
addVarsRequiredVarsAdditionalProps(parameterSchema, codegenParameter);
5522+
addVarsRequiredVarsAdditionalPropsPropertyNames(parameterSchema, codegenParameter);
55095523
} else if (ModelUtils.isNullType(parameterSchema)) {
55105524
} else if (ModelUtils.isAnyType(parameterSchema)) {
55115525
// any schema with no type set, composed schemas often do this
55125526
if (ModelUtils.isMapSchema(parameterSchema)) { // for map parameter
55135527
updateParameterForMap(codegenParameter, parameterSchema, imports);
55145528
}
5515-
addVarsRequiredVarsAdditionalProps(parameterSchema, codegenParameter);
5529+
addVarsRequiredVarsAdditionalPropsPropertyNames(parameterSchema, codegenParameter);
55165530
} else if (ModelUtils.isArraySchema(parameterSchema)) {
55175531
Schema inner = ModelUtils.getSchemaItems(parameterSchema);
55185532

@@ -7859,7 +7873,7 @@ protected void updateRequestBodyForObject(CodegenParameter codegenParameter, Sch
78597873
// object type schema or composed schema with properties defined
78607874
this.addBodyModelSchema(codegenParameter, name, schema, imports, bodyParameterName, false);
78617875
}
7862-
addVarsRequiredVarsAdditionalProps(schema, codegenParameter);
7876+
addVarsRequiredVarsAdditionalPropsPropertyNames(schema, codegenParameter);
78637877
}
78647878

78657879
protected void updateRequestBodyForArray(CodegenParameter codegenParameter, Schema schema, String name, Set<String> imports, String bodyParameterName) {
@@ -8144,7 +8158,7 @@ public CodegenParameter fromRequestBody(RequestBody body, Set<String> imports, S
81448158
} else {
81458159
updateRequestBodyForPrimitiveType(codegenParameter, schema, bodyParameterName, imports);
81468160
}
8147-
addVarsRequiredVarsAdditionalProps(schema, codegenParameter);
8161+
addVarsRequiredVarsAdditionalPropsPropertyNames(schema, codegenParameter);
81488162
} else {
81498163
// referenced schemas
81508164
updateRequestBodyForPrimitiveType(codegenParameter, schema, bodyParameterName, imports);
@@ -8262,12 +8276,13 @@ protected void addRequiredVarsMap(Schema schema, IJsonSchemaValidationProperties
82628276
}
82638277
}
82648278

8265-
protected void addVarsRequiredVarsAdditionalProps(Schema schema, IJsonSchemaValidationProperties property) {
8279+
protected void addVarsRequiredVarsAdditionalPropsPropertyNames(Schema schema, IJsonSchemaValidationProperties property) {
82668280
setAddProps(schema, property);
82678281
Set<String> mandatory = schema.getRequired() == null ? Collections.emptySet()
82688282
: new TreeSet<>(schema.getRequired());
82698283
addVars(property, property.getVars(), schema.getProperties(), mandatory);
82708284
addRequiredVarsMap(schema, property);
8285+
setPropNames(schema, property);
82718286
}
82728287

82738288
protected String getItemsName(Schema containingSchema, String containingSchemaName) {
@@ -8282,6 +8297,10 @@ protected String getAdditionalPropertiesName() {
82828297
return "additional_properties";
82838298
}
82848299

8300+
protected String getPropertyNamesName() {
8301+
return "property_names";
8302+
}
8303+
82858304
private void addJsonSchemaForBodyRequestInCaseItsNotPresent(CodegenParameter codegenParameter, RequestBody body) {
82868305
if (codegenParameter.jsonSchema == null)
82878306
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)