Skip to content

Commit 9fa032b

Browse files
authored
add isOverridden, update java pojo with setter for parent prop (#15051)
1 parent 3633233 commit 9fa032b

850 files changed

Lines changed: 645 additions & 796 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
159159
public boolean isCircularReference;
160160
public boolean isDiscriminator;
161161
public boolean isNew; // true when this property overrides an inherited property
162+
public Boolean isOverridden; // true if the property is a parent property (not defined in child/current schema)
162163
public List<String> _enum;
163164
public Map<String, Object> allowableValues;
164165
// If 'additionalProperties' is not set, items is null.
@@ -1067,6 +1068,7 @@ public String toString() {
10671068
sb.append(", isCircularReference=").append(isCircularReference);
10681069
sb.append(", isDiscriminator=").append(isDiscriminator);
10691070
sb.append(", isNew=").append(isNew);
1071+
sb.append(", isOverridden=").append(isOverridden);
10701072
sb.append(", _enum=").append(_enum);
10711073
sb.append(", allowableValues=").append(allowableValues);
10721074
sb.append(", items=").append(items);
@@ -1159,6 +1161,7 @@ public boolean equals(Object o) {
11591161
isCircularReference == that.isCircularReference &&
11601162
isDiscriminator == that.isDiscriminator &&
11611163
isNew == that.isNew &&
1164+
isOverridden == that.isOverridden &&
11621165
hasValidation == that.hasValidation &&
11631166
isInherited == that.isInherited &&
11641167
isXmlAttribute == that.isXmlAttribute &&
@@ -1236,7 +1239,7 @@ public int hashCode() {
12361239
isInteger, isLong, isNumber, isFloat, isDouble, isDecimal, isByteArray, isBinary, isFile,
12371240
isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isPassword, isFreeFormObject,
12381241
isArray, isMap, isEnum, isInnerEnum, isEnumRef, isAnyType, isReadOnly, isWriteOnly, isNullable, isShort,
1239-
isUnboundedInteger, isSelfReference, isCircularReference, isDiscriminator, isNew, _enum,
1242+
isUnboundedInteger, isSelfReference, isCircularReference, isDiscriminator, isNew, isOverridden, _enum,
12401243
allowableValues, items, mostInnerItems, additionalProperties, vars, requiredVars,
12411244
vendorExtensions, hasValidation, isInherited, discriminatorValue, nameInCamelCase,
12421245
nameInSnakeCase, enumName, maxItems, minItems, isXmlAttribute, xmlPrefix, xmlName,

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5724,6 +5724,7 @@ protected void addVars(IJsonSchemaValidationProperties m, List<CodegenProperty>
57245724
for (CodegenProperty var : cm.vars) {
57255725
// create a map of codegen properties for lookup later
57265726
varsMap.put(var.baseName, var);
5727+
var.isOverridden = false;
57275728
}
57285729
}
57295730
}
@@ -5748,6 +5749,10 @@ protected void addVars(IJsonSchemaValidationProperties m, List<CodegenProperty>
57485749
cp = fromProperty(key, prop, mandatory.contains(key));
57495750
}
57505751

5752+
if (cm != null && cm.allVars == vars && cp.isOverridden == null) { // processing allVars and it's a parent property
5753+
cp.isOverridden = true;
5754+
}
5755+
57515756
vars.add(cp);
57525757
m.setHasVars(true);
57535758

modules/openapi-generator/src/main/resources/Java/pojo.mustache

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,23 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
270270
{{/isReadOnly}}
271271
272272
{{/vars}}
273+
{{#parent}}
274+
{{#allVars}}
275+
{{#isOverridden}}
276+
@Override
277+
public {{classname}} {{name}}({{{datatypeWithEnum}}} {{name}}) {
278+
{{#vendorExtensions.x-is-jackson-optional-nullable}}
279+
this.{{setter}}(JsonNullable.<{{{datatypeWithEnum}}}>of({{name}}));
280+
{{/vendorExtensions.x-is-jackson-optional-nullable}}
281+
{{^vendorExtensions.x-is-jackson-optional-nullable}}
282+
this.{{setter}}({{name}});
283+
{{/vendorExtensions.x-is-jackson-optional-nullable}}
284+
return this;
285+
}
273286
287+
{{/isOverridden}}
288+
{{/allVars}}
289+
{{/parent}}
274290
@Override
275291
public boolean equals(Object o) {
276292
{{#useReflectionEqualsHashCode}}

modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1908,4 +1908,50 @@ public void testForJavaApacheHttpClientJsonSubtype() throws IOException {
19081908
assertFileNotContains(Paths.get(outputPath + "/src/main/java/org/openapitools/client/model/Pet.java"), "@JsonSubTypes.Type(value = Dog.class, name = \"Dog\")");
19091909
assertFileNotContains(Paths.get(outputPath + "/src/main/java/org/openapitools/client/model/Pet.java"), "@JsonSubTypes.Type(value = Lizard.class, name = \"Lizard\")");
19101910
}
1911+
1912+
@Test
1913+
public void testIsOverriddenProperty() {
1914+
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/allOf_composition_discriminator.yaml");
1915+
JavaClientCodegen codegen = new JavaClientCodegen();
1916+
1917+
Schema test1 = openAPI.getComponents().getSchemas().get("Cat");
1918+
codegen.setOpenAPI(openAPI);
1919+
CodegenModel cm1 = codegen.fromModel("Cat", test1);
1920+
1921+
CodegenProperty cp0 = cm1.getAllVars().get(0);
1922+
Assert.assertEquals(cp0.getName(), "petType");
1923+
Assert.assertEquals(cp0.isOverridden, true);
1924+
1925+
CodegenProperty cp1 = cm1.getAllVars().get(1);
1926+
Assert.assertEquals(cp1.getName(), "name");
1927+
Assert.assertEquals(cp1.isOverridden, false);
1928+
}
1929+
1930+
@Test
1931+
public void testForJavaApacheHttpClientOverrideSetter() throws IOException {
1932+
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
1933+
output.deleteOnExit();
1934+
String outputPath = output.getAbsolutePath().replace('\\', '/');
1935+
OpenAPI openAPI = new OpenAPIParser()
1936+
.readLocation("src/test/resources/3_0/allOf_composition_discriminator.yaml", null, new ParseOptions()).getOpenAPI();
1937+
1938+
JavaClientCodegen codegen = new JavaClientCodegen();
1939+
codegen.setOutputDir(output.getAbsolutePath());
1940+
1941+
ClientOptInput input = new ClientOptInput();
1942+
input.openAPI(openAPI);
1943+
input.config(codegen);
1944+
1945+
DefaultGenerator generator = new DefaultGenerator();
1946+
codegen.setLibrary(JavaClientCodegen.APACHE);
1947+
1948+
generator.opts(input).generate();
1949+
1950+
assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/client/model/Cat.java"), " @Override\n" +
1951+
" public Cat petType(String petType) {");
1952+
assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/client/model/Pet.java"), " }\n" +
1953+
"\n" +
1954+
" public Pet petType(String petType) {\n");
1955+
1956+
}
19111957
}

samples/client/echo_api/java/apache-httpclient/src/main/java/org/openapitools/client/model/Bird.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@ public void setColor(String color) {
9595
this.color = color;
9696
}
9797

98-
9998
@Override
10099
public boolean equals(Object o) {
101100
if (this == o) {

samples/client/echo_api/java/apache-httpclient/src/main/java/org/openapitools/client/model/Category.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@ public void setName(String name) {
9595
this.name = name;
9696
}
9797

98-
9998
@Override
10099
public boolean equals(Object o) {
101100
if (this == o) {

samples/client/echo_api/java/apache-httpclient/src/main/java/org/openapitools/client/model/DataQuery.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,17 @@ public void setDate(OffsetDateTime date) {
130130
this.date = date;
131131
}
132132

133+
@Override
134+
public DataQuery id(Long id) {
135+
this.setId(id);
136+
return this;
137+
}
138+
139+
@Override
140+
public DataQuery outcomes(List<OutcomesEnum> outcomes) {
141+
this.setOutcomes(outcomes);
142+
return this;
143+
}
133144

134145
@Override
135146
public boolean equals(Object o) {

samples/client/echo_api/java/apache-httpclient/src/main/java/org/openapitools/client/model/DataQueryAllOf.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,6 @@ public void setDate(OffsetDateTime date) {
127127
this.date = date;
128128
}
129129

130-
131130
@Override
132131
public boolean equals(Object o) {
133132
if (this == o) {

samples/client/echo_api/java/apache-httpclient/src/main/java/org/openapitools/client/model/DefaultValue.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,6 @@ public void setStringNullable(String stringNullable) {
407407
this.stringNullable = JsonNullable.<String>of(stringNullable);
408408
}
409409

410-
411410
@Override
412411
public boolean equals(Object o) {
413412
if (this == o) {

samples/client/echo_api/java/apache-httpclient/src/main/java/org/openapitools/client/model/Pet.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,6 @@ public void setStatus(StatusEnum status) {
272272
this.status = status;
273273
}
274274

275-
276275
@Override
277276
public boolean equals(Object o) {
278277
if (this == o) {

0 commit comments

Comments
 (0)