Skip to content

Commit cf99d83

Browse files
committed
[java][feign] Fix model combining properties and additional properties
1 parent 38dac13 commit cf99d83

File tree

11 files changed

+50
-62
lines changed

11 files changed

+50
-62
lines changed

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

+8
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,14 @@ public void processOpts() {
506506
supportingFiles.add(new SupportingFile("ParamExpander.mustache", invokerFolder, "ParamExpander.java"));
507507
}
508508
supportingFiles.add(new SupportingFile("EncodingUtils.mustache", invokerFolder, "EncodingUtils.java"));
509+
510+
// Composed schemas can have the 'additionalProperties' keyword, as specified in JSON schema.
511+
// In principle, this should be enabled by default for all code generators. However due to limitations
512+
// in other code generators, support needs to be enabled on a case-by-case basis.
513+
// The flag below should be set for all Java libraries, but the templates need to be ported
514+
// one by one for each library.
515+
supportsAdditionalPropertiesWithComposedSchema = true;
516+
509517
} else if (OKHTTP_GSON.equals(getLibrary()) || StringUtils.isEmpty(getLibrary())) {
510518
// the "okhttp-gson" library template requires "ApiCallback.mustache" for async call
511519
supportingFiles.add(new SupportingFile("ApiCallback.mustache", invokerFolder, "ApiCallback.java"));

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

+6-2
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,8 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
263263
}{{#hasVars}}
264264
{{classname}} {{classVarName}} = ({{classname}}) o;
265265
return {{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}equalsNullable(this.{{name}}, {{classVarName}}.{{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{#isByteArray}}Arrays{{/isByteArray}}{{^isByteArray}}Objects{{/isByteArray}}.equals(this.{{name}}, {{classVarName}}.{{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}} &&
266-
{{/-last}}{{/vars}}{{#parent}} &&
266+
{{/-last}}{{/vars}}{{#additionalPropertiesType}} &&
267+
Objects.equals(this.additionalProperties, {{classVarName}}.additionalProperties){{/additionalPropertiesType}}{{#parent}} &&
267268
super.equals(o){{/parent}};{{/hasVars}}{{^hasVars}}
268269
return {{#parent}}super.equals(o){{/parent}}{{^parent}}true{{/parent}};{{/hasVars}}
269270
{{/useReflectionEqualsHashCode}}
@@ -279,7 +280,7 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
279280
return HashCodeBuilder.reflectionHashCode(this);
280281
{{/useReflectionEqualsHashCode}}
281282
{{^useReflectionEqualsHashCode}}
282-
return Objects.hash({{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}hashCodeNullable({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{^isByteArray}}{{name}}{{/isByteArray}}{{#isByteArray}}Arrays.hashCode({{name}}){{/isByteArray}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}}, {{/-last}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}});
283+
return Objects.hash({{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}hashCodeNullable({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{^isByteArray}}{{name}}{{/isByteArray}}{{#isByteArray}}Arrays.hashCode({{name}}){{/isByteArray}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}}, {{/-last}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}}{{#additionalPropertiesType}}, additionalProperties{{/additionalPropertiesType}});
283284
{{/useReflectionEqualsHashCode}}
284285
}{{#vendorExtensions.x-jackson-optional-nullable-helpers}}
285286
@@ -300,6 +301,9 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
300301
{{#vars}}
301302
sb.append(" {{name}}: ").append({{#isPassword}}"*"{{/isPassword}}{{^isPassword}}toIndentedString({{name}}){{/isPassword}}).append("\n");
302303
{{/vars}}
304+
{{#additionalPropertiesType}}
305+
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
306+
{{/additionalPropertiesType}}
303307
sb.append("}");
304308
return sb.toString();
305309
}

samples/client/petstore/java/feign-no-nullable/src/main/java/org/openapitools/client/model/AdditionalPropertiesAnyType.java

+4-7
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
import com.fasterxml.jackson.annotation.JsonCreator;
2525
import com.fasterxml.jackson.annotation.JsonTypeName;
2626
import com.fasterxml.jackson.annotation.JsonValue;
27-
import java.util.HashMap;
28-
import java.util.Map;
2927
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3028
import com.fasterxml.jackson.annotation.JsonTypeName;
3129

@@ -37,13 +35,12 @@
3735
})
3836
@javax.annotation.concurrent.Immutable
3937
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.10.0-SNAPSHOT")
40-
public class AdditionalPropertiesAnyType extends HashMap<String, Object> {
38+
public class AdditionalPropertiesAnyType {
4139
public static final String JSON_PROPERTY_NAME = "name";
4240
@javax.annotation.Nullable
4341
private String name;
4442

4543
public AdditionalPropertiesAnyType() {
46-
4744
}
4845

4946
public AdditionalPropertiesAnyType name(@javax.annotation.Nullable String name) {
@@ -125,20 +122,20 @@ public boolean equals(Object o) {
125122
}
126123
AdditionalPropertiesAnyType additionalPropertiesAnyType = (AdditionalPropertiesAnyType) o;
127124
return Objects.equals(this.name, additionalPropertiesAnyType.name) &&
128-
super.equals(o);
125+
Objects.equals(this.additionalProperties, additionalPropertiesAnyType.additionalProperties);
129126
}
130127

131128
@Override
132129
public int hashCode() {
133-
return Objects.hash(name, super.hashCode());
130+
return Objects.hash(name, additionalProperties);
134131
}
135132

136133
@Override
137134
public String toString() {
138135
StringBuilder sb = new StringBuilder();
139136
sb.append("class AdditionalPropertiesAnyType {\n");
140-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
141137
sb.append(" name: ").append(toIndentedString(name)).append("\n");
138+
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
142139
sb.append("}");
143140
return sb.toString();
144141
}

samples/client/petstore/java/feign-no-nullable/src/main/java/org/openapitools/client/model/AdditionalPropertiesArray.java

+4-7
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@
2424
import com.fasterxml.jackson.annotation.JsonCreator;
2525
import com.fasterxml.jackson.annotation.JsonTypeName;
2626
import com.fasterxml.jackson.annotation.JsonValue;
27-
import java.util.HashMap;
2827
import java.util.List;
29-
import java.util.Map;
3028
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3129
import com.fasterxml.jackson.annotation.JsonTypeName;
3230

@@ -38,13 +36,12 @@
3836
})
3937
@javax.annotation.concurrent.Immutable
4038
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.10.0-SNAPSHOT")
41-
public class AdditionalPropertiesArray extends HashMap<String, List> {
39+
public class AdditionalPropertiesArray {
4240
public static final String JSON_PROPERTY_NAME = "name";
4341
@javax.annotation.Nullable
4442
private String name;
4543

4644
public AdditionalPropertiesArray() {
47-
4845
}
4946

5047
public AdditionalPropertiesArray name(@javax.annotation.Nullable String name) {
@@ -126,20 +123,20 @@ public boolean equals(Object o) {
126123
}
127124
AdditionalPropertiesArray additionalPropertiesArray = (AdditionalPropertiesArray) o;
128125
return Objects.equals(this.name, additionalPropertiesArray.name) &&
129-
super.equals(o);
126+
Objects.equals(this.additionalProperties, additionalPropertiesArray.additionalProperties);
130127
}
131128

132129
@Override
133130
public int hashCode() {
134-
return Objects.hash(name, super.hashCode());
131+
return Objects.hash(name, additionalProperties);
135132
}
136133

137134
@Override
138135
public String toString() {
139136
StringBuilder sb = new StringBuilder();
140137
sb.append("class AdditionalPropertiesArray {\n");
141-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
142138
sb.append(" name: ").append(toIndentedString(name)).append("\n");
139+
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
143140
sb.append("}");
144141
return sb.toString();
145142
}

samples/client/petstore/java/feign-no-nullable/src/main/java/org/openapitools/client/model/AdditionalPropertiesBoolean.java

+4-7
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
import com.fasterxml.jackson.annotation.JsonCreator;
2525
import com.fasterxml.jackson.annotation.JsonTypeName;
2626
import com.fasterxml.jackson.annotation.JsonValue;
27-
import java.util.HashMap;
28-
import java.util.Map;
2927
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3028
import com.fasterxml.jackson.annotation.JsonTypeName;
3129

@@ -37,13 +35,12 @@
3735
})
3836
@javax.annotation.concurrent.Immutable
3937
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.10.0-SNAPSHOT")
40-
public class AdditionalPropertiesBoolean extends HashMap<String, Boolean> {
38+
public class AdditionalPropertiesBoolean {
4139
public static final String JSON_PROPERTY_NAME = "name";
4240
@javax.annotation.Nullable
4341
private String name;
4442

4543
public AdditionalPropertiesBoolean() {
46-
4744
}
4845

4946
public AdditionalPropertiesBoolean name(@javax.annotation.Nullable String name) {
@@ -125,20 +122,20 @@ public boolean equals(Object o) {
125122
}
126123
AdditionalPropertiesBoolean additionalPropertiesBoolean = (AdditionalPropertiesBoolean) o;
127124
return Objects.equals(this.name, additionalPropertiesBoolean.name) &&
128-
super.equals(o);
125+
Objects.equals(this.additionalProperties, additionalPropertiesBoolean.additionalProperties);
129126
}
130127

131128
@Override
132129
public int hashCode() {
133-
return Objects.hash(name, super.hashCode());
130+
return Objects.hash(name, additionalProperties);
134131
}
135132

136133
@Override
137134
public String toString() {
138135
StringBuilder sb = new StringBuilder();
139136
sb.append("class AdditionalPropertiesBoolean {\n");
140-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
141137
sb.append(" name: ").append(toIndentedString(name)).append("\n");
138+
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
142139
sb.append("}");
143140
return sb.toString();
144141
}

samples/client/petstore/java/feign-no-nullable/src/main/java/org/openapitools/client/model/AdditionalPropertiesInteger.java

+4-7
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
import com.fasterxml.jackson.annotation.JsonCreator;
2525
import com.fasterxml.jackson.annotation.JsonTypeName;
2626
import com.fasterxml.jackson.annotation.JsonValue;
27-
import java.util.HashMap;
28-
import java.util.Map;
2927
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3028
import com.fasterxml.jackson.annotation.JsonTypeName;
3129

@@ -37,13 +35,12 @@
3735
})
3836
@javax.annotation.concurrent.Immutable
3937
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.10.0-SNAPSHOT")
40-
public class AdditionalPropertiesInteger extends HashMap<String, Integer> {
38+
public class AdditionalPropertiesInteger {
4139
public static final String JSON_PROPERTY_NAME = "name";
4240
@javax.annotation.Nullable
4341
private String name;
4442

4543
public AdditionalPropertiesInteger() {
46-
4744
}
4845

4946
public AdditionalPropertiesInteger name(@javax.annotation.Nullable String name) {
@@ -125,20 +122,20 @@ public boolean equals(Object o) {
125122
}
126123
AdditionalPropertiesInteger additionalPropertiesInteger = (AdditionalPropertiesInteger) o;
127124
return Objects.equals(this.name, additionalPropertiesInteger.name) &&
128-
super.equals(o);
125+
Objects.equals(this.additionalProperties, additionalPropertiesInteger.additionalProperties);
129126
}
130127

131128
@Override
132129
public int hashCode() {
133-
return Objects.hash(name, super.hashCode());
130+
return Objects.hash(name, additionalProperties);
134131
}
135132

136133
@Override
137134
public String toString() {
138135
StringBuilder sb = new StringBuilder();
139136
sb.append("class AdditionalPropertiesInteger {\n");
140-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
141137
sb.append(" name: ").append(toIndentedString(name)).append("\n");
138+
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
142139
sb.append("}");
143140
return sb.toString();
144141
}

samples/client/petstore/java/feign-no-nullable/src/main/java/org/openapitools/client/model/AdditionalPropertiesNumber.java

+4-7
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@
2525
import com.fasterxml.jackson.annotation.JsonTypeName;
2626
import com.fasterxml.jackson.annotation.JsonValue;
2727
import java.math.BigDecimal;
28-
import java.util.HashMap;
29-
import java.util.Map;
3028
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3129
import com.fasterxml.jackson.annotation.JsonTypeName;
3230

@@ -38,13 +36,12 @@
3836
})
3937
@javax.annotation.concurrent.Immutable
4038
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.10.0-SNAPSHOT")
41-
public class AdditionalPropertiesNumber extends HashMap<String, BigDecimal> {
39+
public class AdditionalPropertiesNumber {
4240
public static final String JSON_PROPERTY_NAME = "name";
4341
@javax.annotation.Nullable
4442
private String name;
4543

4644
public AdditionalPropertiesNumber() {
47-
4845
}
4946

5047
public AdditionalPropertiesNumber name(@javax.annotation.Nullable String name) {
@@ -126,20 +123,20 @@ public boolean equals(Object o) {
126123
}
127124
AdditionalPropertiesNumber additionalPropertiesNumber = (AdditionalPropertiesNumber) o;
128125
return Objects.equals(this.name, additionalPropertiesNumber.name) &&
129-
super.equals(o);
126+
Objects.equals(this.additionalProperties, additionalPropertiesNumber.additionalProperties);
130127
}
131128

132129
@Override
133130
public int hashCode() {
134-
return Objects.hash(name, super.hashCode());
131+
return Objects.hash(name, additionalProperties);
135132
}
136133

137134
@Override
138135
public String toString() {
139136
StringBuilder sb = new StringBuilder();
140137
sb.append("class AdditionalPropertiesNumber {\n");
141-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
142138
sb.append(" name: ").append(toIndentedString(name)).append("\n");
139+
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
143140
sb.append("}");
144141
return sb.toString();
145142
}

samples/client/petstore/java/feign-no-nullable/src/main/java/org/openapitools/client/model/AdditionalPropertiesObject.java

+4-6
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import com.fasterxml.jackson.annotation.JsonCreator;
2525
import com.fasterxml.jackson.annotation.JsonTypeName;
2626
import com.fasterxml.jackson.annotation.JsonValue;
27-
import java.util.HashMap;
2827
import java.util.Map;
2928
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3029
import com.fasterxml.jackson.annotation.JsonTypeName;
@@ -37,13 +36,12 @@
3736
})
3837
@javax.annotation.concurrent.Immutable
3938
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.10.0-SNAPSHOT")
40-
public class AdditionalPropertiesObject extends HashMap<String, Map> {
39+
public class AdditionalPropertiesObject {
4140
public static final String JSON_PROPERTY_NAME = "name";
4241
@javax.annotation.Nullable
4342
private String name;
4443

4544
public AdditionalPropertiesObject() {
46-
4745
}
4846

4947
public AdditionalPropertiesObject name(@javax.annotation.Nullable String name) {
@@ -125,20 +123,20 @@ public boolean equals(Object o) {
125123
}
126124
AdditionalPropertiesObject additionalPropertiesObject = (AdditionalPropertiesObject) o;
127125
return Objects.equals(this.name, additionalPropertiesObject.name) &&
128-
super.equals(o);
126+
Objects.equals(this.additionalProperties, additionalPropertiesObject.additionalProperties);
129127
}
130128

131129
@Override
132130
public int hashCode() {
133-
return Objects.hash(name, super.hashCode());
131+
return Objects.hash(name, additionalProperties);
134132
}
135133

136134
@Override
137135
public String toString() {
138136
StringBuilder sb = new StringBuilder();
139137
sb.append("class AdditionalPropertiesObject {\n");
140-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
141138
sb.append(" name: ").append(toIndentedString(name)).append("\n");
139+
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
142140
sb.append("}");
143141
return sb.toString();
144142
}

samples/client/petstore/java/feign-no-nullable/src/main/java/org/openapitools/client/model/AdditionalPropertiesString.java

+4-7
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
import com.fasterxml.jackson.annotation.JsonCreator;
2525
import com.fasterxml.jackson.annotation.JsonTypeName;
2626
import com.fasterxml.jackson.annotation.JsonValue;
27-
import java.util.HashMap;
28-
import java.util.Map;
2927
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3028
import com.fasterxml.jackson.annotation.JsonTypeName;
3129

@@ -37,13 +35,12 @@
3735
})
3836
@javax.annotation.concurrent.Immutable
3937
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.10.0-SNAPSHOT")
40-
public class AdditionalPropertiesString extends HashMap<String, String> {
38+
public class AdditionalPropertiesString {
4139
public static final String JSON_PROPERTY_NAME = "name";
4240
@javax.annotation.Nullable
4341
private String name;
4442

4543
public AdditionalPropertiesString() {
46-
4744
}
4845

4946
public AdditionalPropertiesString name(@javax.annotation.Nullable String name) {
@@ -125,20 +122,20 @@ public boolean equals(Object o) {
125122
}
126123
AdditionalPropertiesString additionalPropertiesString = (AdditionalPropertiesString) o;
127124
return Objects.equals(this.name, additionalPropertiesString.name) &&
128-
super.equals(o);
125+
Objects.equals(this.additionalProperties, additionalPropertiesString.additionalProperties);
129126
}
130127

131128
@Override
132129
public int hashCode() {
133-
return Objects.hash(name, super.hashCode());
130+
return Objects.hash(name, additionalProperties);
134131
}
135132

136133
@Override
137134
public String toString() {
138135
StringBuilder sb = new StringBuilder();
139136
sb.append("class AdditionalPropertiesString {\n");
140-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
141137
sb.append(" name: ").append(toIndentedString(name)).append("\n");
138+
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
142139
sb.append("}");
143140
return sb.toString();
144141
}

0 commit comments

Comments
 (0)