Skip to content

Commit cfc1456

Browse files
authored
Support vendor extensions on more objects as per the OAS spec (#15975)
1 parent 00fcaa1 commit cfc1456

6 files changed

Lines changed: 71 additions & 11 deletions

File tree

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ public class CodegenDiscriminator {
3737
// see the method createDiscriminator in DefaultCodegen.java
3838

3939
private Set<MappedModel> mappedModels = new TreeSet<>();
40+
private Map<String, Object> vendorExtensions = new HashMap<>();
41+
4042

4143
public String getPropertyName() {
4244
return propertyName;
@@ -94,6 +96,14 @@ public void setIsEnum(boolean isEnum) {
9496
this.isEnum = isEnum;
9597
}
9698

99+
public Map<String, Object> getVendorExtensions() {
100+
return vendorExtensions;
101+
}
102+
103+
public void setVendorExtensions(Map<String, Object> vendorExtensions) {
104+
this.vendorExtensions = vendorExtensions;
105+
}
106+
97107
/**
98108
* An object to hold discriminator mappings between payload values and schema names or
99109
* references.
@@ -173,13 +183,14 @@ public boolean equals(Object o) {
173183
return Objects.equals(propertyName, that.propertyName) &&
174184
Objects.equals(propertyBaseName, that.propertyBaseName) &&
175185
Objects.equals(mapping, that.mapping) &&
176-
Objects.equals(mappedModels, that.mappedModels);
186+
Objects.equals(mappedModels, that.mappedModels) &&
187+
Objects.equals(vendorExtensions, that.vendorExtensions);
177188
}
178189

179190
@Override
180191
public int hashCode() {
181192

182-
return Objects.hash(propertyName, propertyBaseName, mapping, mappedModels);
193+
return Objects.hash(propertyName, propertyBaseName, mapping, mappedModels, vendorExtensions);
183194
}
184195

185196
@Override
@@ -189,7 +200,8 @@ public String toString() {
189200
sb.append(", propertyBaseName='").append(propertyBaseName).append('\'');
190201
sb.append(", mapping=").append(mapping);
191202
sb.append(", mappedModels=").append(mappedModels);
203+
sb.append(", vendorExtensions=").append(vendorExtensions);
192204
sb.append('}');
193205
return sb.toString();
194206
}
195-
}
207+
}

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.openapitools.codegen;
22

3+
import java.util.HashMap;
34
import java.util.List;
5+
import java.util.Map;
46
import java.util.Objects;
57

68
public class CodegenEncoding {
@@ -9,6 +11,7 @@ public class CodegenEncoding {
911
private String style;
1012
private boolean explode;
1113
private boolean allowReserved;
14+
public Map<String, Object> vendorExtensions = new HashMap<>();
1215

1316
public CodegenEncoding(String contentType, List<CodegenParameter> headers, String style, boolean explode, boolean allowReserved) {
1417
this.contentType = contentType;
@@ -38,13 +41,18 @@ public boolean getAllowReserved() {
3841
return allowReserved;
3942
}
4043

44+
public Map<String, Object> getVendorExtensions() {
45+
return vendorExtensions;
46+
}
47+
4148
public String toString() {
4249
final StringBuilder sb = new StringBuilder("CodegenEncoding{");
4350
sb.append("contentType=").append(contentType);
4451
sb.append(", headers=").append(headers);
4552
sb.append(", style=").append(style);
4653
sb.append(", explode=").append(explode);
4754
sb.append(", allowReserved=").append(allowReserved);
55+
sb.append(", vendorExtensions=").append(vendorExtensions);
4856
sb.append('}');
4957
return sb.toString();
5058
}
@@ -57,11 +65,12 @@ public boolean equals(Object o) {
5765
Objects.equals(headers, that.getHeaders()) &&
5866
style == that.getStyle() &&
5967
explode == that.getExplode() &&
60-
allowReserved == that.getAllowReserved();
68+
allowReserved == that.getAllowReserved() &&
69+
Objects.equals(vendorExtensions, that.vendorExtensions);
6170
}
6271

6372
@Override
6473
public int hashCode() {
65-
return Objects.hash(contentType, headers, style, explode, allowReserved);
74+
return Objects.hash(contentType, headers, style, explode, allowReserved, vendorExtensions);
6675
}
6776
}

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public class CodegenMediaType {
1313
private HashMap<String, SchemaTestCase> testCases = new HashMap<>();
1414
private Map<String, Example> examples = null;
1515
private Object example = null;
16+
public Map<String, Object> vendorExtensions = new HashMap<>();
1617

1718
public CodegenMediaType(CodegenProperty schema, LinkedHashMap<String, CodegenEncoding> encoding, HashMap<String, SchemaTestCase> testCases) {
1819
this.schema = schema;
@@ -50,10 +51,15 @@ public Object getExample() {
5051
return example;
5152
}
5253

54+
public Map<String, Object> getVendorExtensions() {
55+
return vendorExtensions;
56+
}
57+
5358
public String toString() {
5459
final StringBuilder sb = new StringBuilder("CodegenMediaType{");
5560
sb.append("schema=").append(schema);
5661
sb.append(", encoding=").append(encoding);
62+
sb.append(", vendorExtensions=").append(vendorExtensions);
5763
sb.append('}');
5864
return sb.toString();
5965
}
@@ -63,12 +69,13 @@ public boolean equals(Object o) {
6369
if (o == null || getClass() != o.getClass()) return false;
6470
CodegenMediaType that = (CodegenMediaType) o;
6571
return Objects.equals(schema,that.getSchema()) &&
66-
Objects.equals(encoding, that.getEncoding());
72+
Objects.equals(encoding, that.getEncoding()) &&
73+
Objects.equals(vendorExtensions, that.vendorExtensions);
6774
}
6875

6976
@Override
7077
public int hashCode() {
71-
return Objects.hash(schema, encoding);
78+
return Objects.hash(schema, encoding, vendorExtensions);
7279
}
7380
}
7481

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package org.openapitools.codegen;
22

3+
import java.util.HashMap;
34
import java.util.List;
5+
import java.util.Map;
46
import java.util.Objects;
57

68
public class CodegenServer {
79
public String url;
810
public String description;
911
public List<CodegenServerVariable> variables;
12+
public Map<String, Object> vendorExtensions = new HashMap<>();
1013

1114
@Override
1215
public boolean equals(Object o) {
@@ -15,13 +18,14 @@ public boolean equals(Object o) {
1518
CodegenServer that = (CodegenServer) o;
1619
return Objects.equals(url, that.url) &&
1720
Objects.equals(description, that.description) &&
18-
Objects.equals(variables, that.variables);
21+
Objects.equals(variables, that.variables) &&
22+
Objects.equals(vendorExtensions, that.vendorExtensions);
1923
}
2024

2125
@Override
2226
public int hashCode() {
2327

24-
return Objects.hash(url, description, variables);
28+
return Objects.hash(url, description, variables, vendorExtensions);
2529
}
2630

2731
@Override
@@ -30,6 +34,7 @@ public String toString() {
3034
sb.append("url='").append(url).append('\'');
3135
sb.append(", description='").append(description).append('\'');
3236
sb.append(", variables=").append(variables);
37+
sb.append(", vendorExtensions=").append(vendorExtensions);
3338
sb.append('}');
3439
return sb.toString();
3540
}

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.openapitools.codegen;
22

3+
import java.util.HashMap;
34
import java.util.List;
5+
import java.util.Map;
46
import java.util.Objects;
57

68
public class CodegenServerVariable {
@@ -9,6 +11,7 @@ public class CodegenServerVariable {
911
public String description;
1012
public List<String> enumValues;
1113
public String value;
14+
public Map<String, Object> vendorExtensions = new HashMap<>();
1215

1316
@Override
1417
public boolean equals(Object o) {
@@ -19,13 +22,14 @@ public boolean equals(Object o) {
1922
Objects.equals(defaultValue, that.defaultValue) &&
2023
Objects.equals(description, that.description) &&
2124
Objects.equals(enumValues, that.enumValues) &&
22-
Objects.equals(value, that.value);
25+
Objects.equals(value, that.value) &&
26+
Objects.equals(vendorExtensions, that.vendorExtensions);
2327
}
2428

2529
@Override
2630
public int hashCode() {
2731

28-
return Objects.hash(name, defaultValue, description, enumValues, value);
32+
return Objects.hash(name, defaultValue, description, enumValues, value, vendorExtensions);
2933
}
3034

3135
@Override
@@ -36,6 +40,7 @@ public String toString() {
3640
sb.append(", description='").append(description).append('\'');
3741
sb.append(", enumValues=").append(enumValues);
3842
sb.append(", value='").append(value).append('\'');
43+
sb.append(", vendorExtensions=").append(vendorExtensions);
3944
sb.append('}');
4045
return sb.toString();
4146
}

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3531,6 +3531,10 @@ protected CodegenDiscriminator createDiscriminator(String schemaName, Schema sch
35313531
discriminator.setPropertyBaseName(sourceDiscriminator.getPropertyName());
35323532
discriminator.setPropertyGetter(toGetter(discriminator.getPropertyName()));
35333533

3534+
if (sourceDiscriminator.getExtensions() != null) {
3535+
discriminator.setVendorExtensions(sourceDiscriminator.getExtensions());
3536+
}
3537+
35343538
// FIXME: for now, we assume that the discriminator property is String
35353539
discriminator.setPropertyType(typeMapping.get("string"));
35363540

@@ -7381,6 +7385,11 @@ protected LinkedHashMap<String, CodegenMediaType> getContent(Content content, Se
73817385
enc.getExplode() == null ? false : enc.getExplode().booleanValue(),
73827386
enc.getAllowReserved() == null ? false : enc.getAllowReserved().booleanValue()
73837387
);
7388+
7389+
if (enc.getExtensions() != null) {
7390+
ce.vendorExtensions = enc.getExtensions();
7391+
}
7392+
73847393
String propName = encodingEntry.getKey();
73857394
ceMap.put(propName, ce);
73867395
}
@@ -7412,6 +7421,10 @@ protected LinkedHashMap<String, CodegenMediaType> getContent(Content content, Se
74127421
codegenMt = new CodegenMediaType(schemaProp, ceMap, schemaTestCases);
74137422
}
74147423

7424+
if (mt.getExtensions() != null) {
7425+
codegenMt.vendorExtensions = mt.getExtensions();
7426+
}
7427+
74157428
cmtContent.put(contentType, codegenMt);
74167429
if (schemaProp != null) {
74177430
addImports(imports, schemaProp.getImports(true, importBaseType, generatorMetadata.getFeatureSet()));
@@ -7683,6 +7696,11 @@ public List<CodegenServer> fromServers(List<Server> servers) {
76837696
cs.description = escapeText(server.getDescription());
76847697
cs.url = server.getUrl();
76857698
cs.variables = this.fromServerVariables(server.getVariables());
7699+
7700+
if (server.getExtensions() != null) {
7701+
cs.vendorExtensions = server.getExtensions();
7702+
}
7703+
76867704
codegenServers.add(cs);
76877705
}
76887706
return codegenServers;
@@ -7707,6 +7725,10 @@ public List<CodegenServerVariable> fromServerVariables(Map<String, ServerVariabl
77077725
codegenServerVariable.enumValues = enums;
77087726
codegenServerVariable.name = variableEntry.getKey();
77097727

7728+
if (variable.getExtensions() != null) {
7729+
codegenServerVariable.vendorExtensions = variable.getExtensions();
7730+
}
7731+
77107732
// Sets the override value for a server variable pattern.
77117733
// NOTE: OpenAPI Specification doesn't prevent multiple server URLs with variables. If multiple objects have the same
77127734
// variables pattern, user overrides will apply to _all_ of these patterns. We may want to consider indexed overrides.

0 commit comments

Comments
 (0)