Skip to content

Commit 101da6e

Browse files
authored
Adds getAdditionalPropertiesIsAnyType to java schema classes (#8908)
* Adds getter and setter for AdditionalPropertiesIsAnyType in IJsonSchemaValidationProperties * Removes venv * Implements getter and setter in CodegenModel * Implements getter and setter in CodegenProperty * Implements getter and setter in CodegenParameter * Adds getter and setter in CodegenResponse * Creates setAddProps * Removes comment * Adds setAdditionalPropertiesIsAnyType invocations * Updates samples * Updates tests in testAdditionalPropertiesPresentInResponses * Updates tests in testAdditionalPropertiesPresentInParameters * Updates testAdditionalPropertiesPresentInModelProperties to check getAdditionalPropertiesIsAnyType * Updates testAdditionalPropertiesPresentInModels
1 parent 51a19e1 commit 101da6e

File tree

9 files changed

+137
-51
lines changed

9 files changed

+137
-51
lines changed

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
6565
public String arrayModelType;
6666
public boolean isAlias; // Is this effectively an alias of another simple type
6767
public boolean isString, isInteger, isLong, isNumber, isNumeric, isFloat, isDouble, isDate, isDateTime;
68+
private boolean additionalPropertiesIsAnyType;
6869
public List<CodegenProperty> vars = new ArrayList<CodegenProperty>(); // all properties (without parent's properties)
6970
public List<CodegenProperty> allVars = new ArrayList<CodegenProperty>(); // all properties (with parent's properties)
7071
public List<CodegenProperty> requiredVars = new ArrayList<CodegenProperty>(); // a list of required properties
@@ -712,6 +713,16 @@ public void setIsNull(boolean isNull) {
712713
this.isNull = isNull;
713714
}
714715

716+
@Override
717+
public boolean getAdditionalPropertiesIsAnyType() {
718+
return additionalPropertiesIsAnyType;
719+
}
720+
721+
@Override
722+
public void setAdditionalPropertiesIsAnyType(boolean additionalPropertiesIsAnyType) {
723+
this.additionalPropertiesIsAnyType = additionalPropertiesIsAnyType;
724+
}
725+
715726
@Override
716727
public boolean equals(Object o) {
717728
if (this == o) return true;
@@ -742,6 +753,7 @@ public boolean equals(Object o) {
742753
hasOnlyReadOnly == that.hasOnlyReadOnly &&
743754
isNull == that.isNull &&
744755
hasValidation == that.hasValidation &&
756+
getAdditionalPropertiesIsAnyType() == that.getAdditionalPropertiesIsAnyType() &&
745757
getUniqueItems() == that.getUniqueItems() &&
746758
getExclusiveMinimum() == that.getExclusiveMinimum() &&
747759
getExclusiveMaximum() == that.getExclusiveMaximum() &&
@@ -813,7 +825,8 @@ public int hashCode() {
813825
hasChildren, isMap, isDeprecated, hasOnlyReadOnly, getExternalDocumentation(), getVendorExtensions(),
814826
getAdditionalPropertiesType(), getMaxProperties(), getMinProperties(), getUniqueItems(), getMaxItems(),
815827
getMinItems(), getMaxLength(), getMinLength(), getExclusiveMinimum(), getExclusiveMaximum(), getMinimum(),
816-
getMaximum(), getPattern(), getMultipleOf(), getItems(), getAdditionalProperties(), getIsModel());
828+
getMaximum(), getPattern(), getMultipleOf(), getItems(), getAdditionalProperties(), getIsModel(),
829+
getAdditionalPropertiesIsAnyType());
817830
}
818831

819832
@Override
@@ -899,6 +912,7 @@ public String toString() {
899912
sb.append(", isModel='").append(isModel).append('\'');
900913
sb.append(", isNull='").append(isNull);
901914
sb.append(", hasValidation='").append(hasValidation);
915+
sb.append(", getAdditionalPropertiesIsAnyType=").append(getAdditionalPropertiesIsAnyType());
902916
sb.append('}');
903917
return sb.toString();
904918
}

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
3939
public boolean isArray, isMap;
4040
public boolean isFile;
4141
public boolean isEnum;
42+
private boolean additionalPropertiesIsAnyType;
4243
public List<String> _enum;
4344
public Map<String, Object> allowableValues;
4445
public CodegenProperty items;
@@ -149,6 +150,7 @@ public CodegenParameter copy() {
149150
output.pattern = this.pattern;
150151
output.additionalProperties = this.additionalProperties;
151152
output.isNull = this.isNull;
153+
output.setAdditionalPropertiesIsAnyType(this.getAdditionalPropertiesIsAnyType());
152154

153155
if (this._enum != null) {
154156
output._enum = new ArrayList<String>(this._enum);
@@ -203,7 +205,7 @@ public CodegenParameter copy() {
203205

204206
@Override
205207
public int hashCode() {
206-
return Objects.hash(isFormParam, isQueryParam, isPathParam, isHeaderParam, isCookieParam, isBodyParam, isContainer, isCollectionFormatMulti, isPrimitiveType, isModel, isExplode, baseName, paramName, dataType, datatypeWithEnum, dataFormat, collectionFormat, description, unescapedDescription, baseType, defaultValue, enumName, style, isDeepObject, example, jsonSchema, isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isDecimal, isByteArray, isBinary, isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isFreeFormObject, isAnyType, isArray, isMap, isFile, isEnum, _enum, allowableValues, items, mostInnerItems, additionalProperties, vars, requiredVars, vendorExtensions, hasValidation, getMaxProperties(), getMinProperties(), isNullable, required, getMaximum(), getExclusiveMaximum(), getMinimum(), getExclusiveMinimum(), getMaxLength(), getMinLength(), getPattern(), getMaxItems(), getMinItems(), getUniqueItems(), contentType, multipleOf, isNull);
208+
return Objects.hash(isFormParam, isQueryParam, isPathParam, isHeaderParam, isCookieParam, isBodyParam, isContainer, isCollectionFormatMulti, isPrimitiveType, isModel, isExplode, baseName, paramName, dataType, datatypeWithEnum, dataFormat, collectionFormat, description, unescapedDescription, baseType, defaultValue, enumName, style, isDeepObject, example, jsonSchema, isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isDecimal, isByteArray, isBinary, isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isFreeFormObject, isAnyType, isArray, isMap, isFile, isEnum, _enum, allowableValues, items, mostInnerItems, additionalProperties, vars, requiredVars, vendorExtensions, hasValidation, getMaxProperties(), getMinProperties(), isNullable, required, getMaximum(), getExclusiveMaximum(), getMinimum(), getExclusiveMinimum(), getMaxLength(), getMinLength(), getPattern(), getMaxItems(), getMinItems(), getUniqueItems(), contentType, multipleOf, isNull, getAdditionalPropertiesIsAnyType());
207209
}
208210

209211
@Override
@@ -248,6 +250,7 @@ public boolean equals(Object o) {
248250
isNullable == that.isNullable &&
249251
required == that.required &&
250252
isNull == that.isNull &&
253+
getAdditionalPropertiesIsAnyType() == that.getAdditionalPropertiesIsAnyType() &&
251254
getExclusiveMaximum() == that.getExclusiveMaximum() &&
252255
getExclusiveMinimum() == that.getExclusiveMinimum() &&
253256
getUniqueItems() == that.getUniqueItems() &&
@@ -364,6 +367,7 @@ public String toString() {
364367
sb.append(", contentType=").append(contentType);
365368
sb.append(", multipleOf=").append(multipleOf);
366369
sb.append(", isNull=").append(isNull);
370+
sb.append(", getAdditionalPropertiesIsAnyType=").append(getAdditionalPropertiesIsAnyType());
367371
sb.append('}');
368372
return sb.toString();
369373
}
@@ -591,5 +595,15 @@ public void setIsNull(boolean isNull) {
591595

592596
@Override
593597
public void setHasValidation(boolean hasValidation) { this.hasValidation = hasValidation; }
598+
599+
@Override
600+
public boolean getAdditionalPropertiesIsAnyType() {
601+
return additionalPropertiesIsAnyType;
602+
}
603+
604+
@Override
605+
public void setAdditionalPropertiesIsAnyType(boolean additionalPropertiesIsAnyType) {
606+
this.additionalPropertiesIsAnyType = additionalPropertiesIsAnyType;
607+
}
594608
}
595609

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
185185
public String xmlName;
186186
public String xmlNamespace;
187187
public boolean isXmlWrapped = false;
188+
private boolean additionalPropertiesIsAnyType;
188189

189190
public String getBaseName() {
190191
return baseName;
@@ -693,6 +694,16 @@ public void setIsNull(boolean isNull) {
693694
@Override
694695
public void setHasValidation(boolean hasValidation) { this.hasValidation = hasValidation; }
695696

697+
@Override
698+
public boolean getAdditionalPropertiesIsAnyType() {
699+
return additionalPropertiesIsAnyType;
700+
}
701+
702+
@Override
703+
public void setAdditionalPropertiesIsAnyType(boolean additionalPropertiesIsAnyType) {
704+
this.additionalPropertiesIsAnyType = additionalPropertiesIsAnyType;
705+
}
706+
696707
@Override
697708
public String toString() {
698709
final StringBuilder sb = new StringBuilder("CodegenProperty{");
@@ -782,6 +793,7 @@ public String toString() {
782793
sb.append(", xmlNamespace='").append(xmlNamespace).append('\'');
783794
sb.append(", isXmlWrapped=").append(isXmlWrapped);
784795
sb.append(", isNull=").append(isNull);
796+
sb.append(", getAdditionalPropertiesIsAnyType=").append(getAdditionalPropertiesIsAnyType());
785797
sb.append('}');
786798
return sb.toString();
787799
}
@@ -831,6 +843,7 @@ public boolean equals(Object o) {
831843
isXmlAttribute == that.isXmlAttribute &&
832844
isXmlWrapped == that.isXmlWrapped &&
833845
isNull == that.isNull &&
846+
getAdditionalPropertiesIsAnyType() == that.getAdditionalPropertiesIsAnyType() &&
834847
Objects.equals(openApiType, that.openApiType) &&
835848
Objects.equals(baseName, that.baseName) &&
836849
Objects.equals(complexType, that.complexType) &&
@@ -892,6 +905,6 @@ public int hashCode() {
892905
items, mostInnerItems, additionalProperties, vars, requiredVars,
893906
vendorExtensions, hasValidation, isInherited, discriminatorValue, nameInCamelCase,
894907
nameInSnakeCase, enumName, maxItems, minItems, isXmlAttribute, xmlPrefix, xmlName,
895-
xmlNamespace, isXmlWrapped, isNull);
908+
xmlNamespace, isXmlWrapped, isNull, getAdditionalPropertiesIsAnyType());
896909
}
897910
}

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties {
7979
public List<CodegenProperty> vars = new ArrayList<CodegenProperty>(); // all properties (without parent's properties)
8080
public List<CodegenProperty> requiredVars = new ArrayList<CodegenProperty>();
8181
private boolean hasValidation;
82+
private boolean additionalPropertiesIsAnyType;
8283

8384
@Override
8485
public int hashCode() {
@@ -89,7 +90,7 @@ public int hashCode() {
8990
vars, requiredVars, isNull, hasValidation,
9091
getMaxProperties(), getMinProperties(), uniqueItems, getMaxItems(), getMinItems(), getMaxLength(),
9192
getMinLength(), exclusiveMinimum, exclusiveMaximum, getMinimum(), getMaximum(), getPattern(),
92-
is1xx, is2xx, is3xx, is4xx, is5xx);
93+
is1xx, is2xx, is3xx, is4xx, is5xx, getAdditionalPropertiesIsAnyType());
9394
}
9495

9596
@Override
@@ -131,6 +132,7 @@ public boolean equals(Object o) {
131132
is3xx == that.is3xx &&
132133
is4xx == that.is4xx &&
133134
is5xx == that.is5xx &&
135+
getAdditionalPropertiesIsAnyType() == that.getAdditionalPropertiesIsAnyType() &&
134136
Objects.equals(vars, that.vars) &&
135137
Objects.equals(requiredVars, that.requiredVars) &&
136138
Objects.equals(headers, that.headers) &&
@@ -429,6 +431,7 @@ public String toString() {
429431
sb.append(", requiredVars='").append(requiredVars).append('\'');
430432
sb.append(", isNull='").append(isNull);
431433
sb.append(", hasValidation='").append(hasValidation);
434+
sb.append(", getAdditionalPropertiesIsAnyType=").append(getAdditionalPropertiesIsAnyType());
432435
sb.append('}');
433436
return sb.toString();
434437
}
@@ -465,4 +468,14 @@ public void setIsNull(boolean isNull) {
465468

466469
@Override
467470
public void setHasValidation(boolean hasValidation) { this.hasValidation = hasValidation; }
471+
472+
@Override
473+
public boolean getAdditionalPropertiesIsAnyType() {
474+
return additionalPropertiesIsAnyType;
475+
}
476+
477+
@Override
478+
public void setAdditionalPropertiesIsAnyType(boolean additionalPropertiesIsAnyType) {
479+
this.additionalPropertiesIsAnyType = additionalPropertiesIsAnyType;
480+
}
468481
}

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

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2579,27 +2579,7 @@ public int compare(CodegenProperty one, CodegenProperty another) {
25792579
}
25802580

25812581
// process 'additionalProperties'
2582-
if (schema.getAdditionalProperties() == null) {
2583-
if (disallowAdditionalPropertiesIfNotPresent) {
2584-
m.isAdditionalPropertiesTrue = false;
2585-
} else {
2586-
m.isAdditionalPropertiesTrue = true;
2587-
CodegenProperty cp = fromProperty("", new Schema());
2588-
m.setAdditionalProperties(cp);
2589-
}
2590-
} else if (schema.getAdditionalProperties() instanceof Boolean) {
2591-
if (Boolean.TRUE.equals(schema.getAdditionalProperties())) {
2592-
m.isAdditionalPropertiesTrue = true;
2593-
CodegenProperty cp = fromProperty("", new Schema());
2594-
m.setAdditionalProperties(cp);
2595-
} else {
2596-
m.isAdditionalPropertiesTrue = false;
2597-
}
2598-
} else {
2599-
m.isAdditionalPropertiesTrue = false;
2600-
CodegenProperty cp = fromProperty("", (Schema) schema.getAdditionalProperties());
2601-
m.setAdditionalProperties(cp);
2602-
}
2582+
setAddProps(schema, m);
26032583

26042584
// post process model properties
26052585
if (m.vars != null) {
@@ -2616,15 +2596,48 @@ public int compare(CodegenProperty one, CodegenProperty another) {
26162596
return m;
26172597
}
26182598

2619-
/**
2620-
* Recursively look in Schema sc for the discriminator discPropName
2621-
* and return a CodegenProperty with the dataType and required params set
2622-
* the returned CodegenProperty may not be required and it may not be of type string
2623-
*
2624-
* @param composedSchemaName The name of the sc Schema
2625-
* @param sc The Schema that may contain the discriminator
2626-
* @param discPropName The String that is the discriminator propertyName in the schema
2627-
*/
2599+
private void setAddProps(Schema schema, IJsonSchemaValidationProperties property){
2600+
CodegenModel m = null;
2601+
if (property instanceof CodegenModel) {
2602+
m = (CodegenModel) property;
2603+
}
2604+
boolean isAdditionalPropertiesTrue = false;
2605+
if (schema.getAdditionalProperties() == null) {
2606+
if (!disallowAdditionalPropertiesIfNotPresent) {
2607+
isAdditionalPropertiesTrue = true;
2608+
CodegenProperty cp = fromProperty("", new Schema());
2609+
property.setAdditionalProperties(cp);
2610+
property.setAdditionalPropertiesIsAnyType(true);
2611+
}
2612+
} else if (schema.getAdditionalProperties() instanceof Boolean) {
2613+
if (Boolean.TRUE.equals(schema.getAdditionalProperties())) {
2614+
isAdditionalPropertiesTrue = true;
2615+
CodegenProperty cp = fromProperty("", new Schema());
2616+
property.setAdditionalProperties(cp);
2617+
property.setAdditionalPropertiesIsAnyType(true);
2618+
}
2619+
} else {
2620+
CodegenProperty cp = fromProperty("", (Schema) schema.getAdditionalProperties());
2621+
property.setAdditionalProperties(cp);
2622+
if (isAnyTypeSchema((Schema) schema.getAdditionalProperties())) {
2623+
property.setAdditionalPropertiesIsAnyType(true);
2624+
}
2625+
}
2626+
if (m != null && isAdditionalPropertiesTrue) {
2627+
m.isAdditionalPropertiesTrue = true;
2628+
}
2629+
}
2630+
2631+
2632+
/**
2633+
* Recursively look in Schema sc for the discriminator discPropName
2634+
* and return a CodegenProperty with the dataType and required params set
2635+
* the returned CodegenProperty may not be required and it may not be of type string
2636+
*
2637+
* @param composedSchemaName The name of the sc Schema
2638+
* @param sc The Schema that may contain the discriminator
2639+
* @param discPropName The String that is the discriminator propertyName in the schema
2640+
*/
26282641
private CodegenProperty discriminatorFound(String composedSchemaName, Schema sc, String discPropName, OpenAPI openAPI) {
26292642
Schema refSchema = ModelUtils.getReferencedSchema(openAPI, sc);
26302643
if (refSchema.getProperties() != null && refSchema.getProperties().get(discPropName) != null) {
@@ -6134,20 +6147,7 @@ private void addVarsRequiredVarsAdditionalProps(Schema schema, IJsonSchemaValida
61346147
.filter(p -> Boolean.TRUE.equals(p.required)).collect(Collectors.toList());
61356148
property.setRequiredVars(requireCpVars);
61366149
}
6137-
if (schema.getAdditionalProperties() == null) {
6138-
if (!disallowAdditionalPropertiesIfNotPresent) {
6139-
CodegenProperty cp = fromProperty("", new Schema());
6140-
property.setAdditionalProperties(cp);
6141-
}
6142-
} else if (schema.getAdditionalProperties() instanceof Boolean) {
6143-
if (Boolean.TRUE.equals(schema.getAdditionalProperties())) {
6144-
CodegenProperty cp = fromProperty("", new Schema());
6145-
property.setAdditionalProperties(cp);
6146-
}
6147-
} else {
6148-
CodegenProperty cp = fromProperty("", (Schema) schema.getAdditionalProperties());
6149-
property.setAdditionalProperties(cp);
6150-
}
6150+
setAddProps(schema, property);
61516151
}
61526152

61536153
private void addJsonSchemaForBodyRequestInCaseItsNotPresent(CodegenParameter codegenParameter, RequestBody body) {

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,8 @@ public interface IJsonSchemaValidationProperties {
9898
boolean getHasValidation();
9999

100100
void setHasValidation(boolean hasValidation);
101-
}
101+
102+
boolean getAdditionalPropertiesIsAnyType();
103+
104+
void setAdditionalPropertiesIsAnyType(boolean additionalPropertiesIsAnyType);
105+
}

0 commit comments

Comments
 (0)