diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java index 82167228647..6c2b91caa93 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenDiscriminator.java @@ -37,6 +37,8 @@ public class CodegenDiscriminator { // see the method createDiscriminator in DefaultCodegen.java private Set mappedModels = new TreeSet<>(); + private Map vendorExtensions = new HashMap<>(); + public String getPropertyName() { return propertyName; @@ -94,6 +96,14 @@ public class CodegenDiscriminator { this.isEnum = isEnum; } + public Map getVendorExtensions() { + return vendorExtensions; + } + + public void setVendorExtensions(Map vendorExtensions) { + this.vendorExtensions = vendorExtensions; + } + /** * An object to hold discriminator mappings between payload values and schema names or * references. @@ -173,13 +183,14 @@ public class CodegenDiscriminator { return Objects.equals(propertyName, that.propertyName) && Objects.equals(propertyBaseName, that.propertyBaseName) && Objects.equals(mapping, that.mapping) && - Objects.equals(mappedModels, that.mappedModels); + Objects.equals(mappedModels, that.mappedModels) && + Objects.equals(vendorExtensions, that.vendorExtensions); } @Override public int hashCode() { - return Objects.hash(propertyName, propertyBaseName, mapping, mappedModels); + return Objects.hash(propertyName, propertyBaseName, mapping, mappedModels, vendorExtensions); } @Override @@ -189,7 +200,8 @@ public class CodegenDiscriminator { sb.append(", propertyBaseName='").append(propertyBaseName).append('\''); sb.append(", mapping=").append(mapping); sb.append(", mappedModels=").append(mappedModels); + sb.append(", vendorExtensions=").append(vendorExtensions); sb.append('}'); return sb.toString(); } -} \ No newline at end of file +} diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenEncoding.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenEncoding.java index efd5b0f16ab..d53ee21cc57 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenEncoding.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenEncoding.java @@ -1,6 +1,8 @@ package org.openapitools.codegen; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; public class CodegenEncoding { @@ -9,6 +11,7 @@ public class CodegenEncoding { private String style; private boolean explode; private boolean allowReserved; + public Map vendorExtensions = new HashMap<>(); public CodegenEncoding(String contentType, List headers, String style, boolean explode, boolean allowReserved) { this.contentType = contentType; @@ -38,6 +41,10 @@ public class CodegenEncoding { return allowReserved; } + public Map getVendorExtensions() { + return vendorExtensions; + } + public String toString() { final StringBuilder sb = new StringBuilder("CodegenEncoding{"); sb.append("contentType=").append(contentType); @@ -45,6 +52,7 @@ public class CodegenEncoding { sb.append(", style=").append(style); sb.append(", explode=").append(explode); sb.append(", allowReserved=").append(allowReserved); + sb.append(", vendorExtensions=").append(vendorExtensions); sb.append('}'); return sb.toString(); } @@ -57,11 +65,12 @@ public class CodegenEncoding { Objects.equals(headers, that.getHeaders()) && style == that.getStyle() && explode == that.getExplode() && - allowReserved == that.getAllowReserved(); + allowReserved == that.getAllowReserved() && + Objects.equals(vendorExtensions, that.vendorExtensions); } @Override public int hashCode() { - return Objects.hash(contentType, headers, style, explode, allowReserved); + return Objects.hash(contentType, headers, style, explode, allowReserved, vendorExtensions); } } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenMediaType.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenMediaType.java index ec30f32aa1f..e314daf14b4 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenMediaType.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenMediaType.java @@ -13,6 +13,7 @@ public class CodegenMediaType { private HashMap testCases = new HashMap<>(); private Map examples = null; private Object example = null; + public Map vendorExtensions = new HashMap<>(); public CodegenMediaType(CodegenProperty schema, LinkedHashMap encoding, HashMap testCases) { this.schema = schema; @@ -50,10 +51,15 @@ public class CodegenMediaType { return example; } + public Map getVendorExtensions() { + return vendorExtensions; + } + public String toString() { final StringBuilder sb = new StringBuilder("CodegenMediaType{"); sb.append("schema=").append(schema); sb.append(", encoding=").append(encoding); + sb.append(", vendorExtensions=").append(vendorExtensions); sb.append('}'); return sb.toString(); } @@ -63,12 +69,13 @@ public class CodegenMediaType { if (o == null || getClass() != o.getClass()) return false; CodegenMediaType that = (CodegenMediaType) o; return Objects.equals(schema,that.getSchema()) && - Objects.equals(encoding, that.getEncoding()); + Objects.equals(encoding, that.getEncoding()) && + Objects.equals(vendorExtensions, that.vendorExtensions); } @Override public int hashCode() { - return Objects.hash(schema, encoding); + return Objects.hash(schema, encoding, vendorExtensions); } } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenServer.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenServer.java index f1116546028..0a7c2455e0c 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenServer.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenServer.java @@ -1,12 +1,15 @@ package org.openapitools.codegen; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; public class CodegenServer { public String url; public String description; public List variables; + public Map vendorExtensions = new HashMap<>(); @Override public boolean equals(Object o) { @@ -15,13 +18,14 @@ public class CodegenServer { CodegenServer that = (CodegenServer) o; return Objects.equals(url, that.url) && Objects.equals(description, that.description) && - Objects.equals(variables, that.variables); + Objects.equals(variables, that.variables) && + Objects.equals(vendorExtensions, that.vendorExtensions); } @Override public int hashCode() { - return Objects.hash(url, description, variables); + return Objects.hash(url, description, variables, vendorExtensions); } @Override @@ -30,6 +34,7 @@ public class CodegenServer { sb.append("url='").append(url).append('\''); sb.append(", description='").append(description).append('\''); sb.append(", variables=").append(variables); + sb.append(", vendorExtensions=").append(vendorExtensions); sb.append('}'); return sb.toString(); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenServerVariable.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenServerVariable.java index 0cd643e2723..b95aef2bbd8 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenServerVariable.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenServerVariable.java @@ -1,6 +1,8 @@ package org.openapitools.codegen; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; public class CodegenServerVariable { @@ -9,6 +11,7 @@ public class CodegenServerVariable { public String description; public List enumValues; public String value; + public Map vendorExtensions = new HashMap<>(); @Override public boolean equals(Object o) { @@ -19,13 +22,14 @@ public class CodegenServerVariable { Objects.equals(defaultValue, that.defaultValue) && Objects.equals(description, that.description) && Objects.equals(enumValues, that.enumValues) && - Objects.equals(value, that.value); + Objects.equals(value, that.value) && + Objects.equals(vendorExtensions, that.vendorExtensions); } @Override public int hashCode() { - return Objects.hash(name, defaultValue, description, enumValues, value); + return Objects.hash(name, defaultValue, description, enumValues, value, vendorExtensions); } @Override @@ -36,6 +40,7 @@ public class CodegenServerVariable { sb.append(", description='").append(description).append('\''); sb.append(", enumValues=").append(enumValues); sb.append(", value='").append(value).append('\''); + sb.append(", vendorExtensions=").append(vendorExtensions); sb.append('}'); return sb.toString(); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index bccd4fb6e82..9f9609b6f26 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -3531,6 +3531,10 @@ public class DefaultCodegen implements CodegenConfig { discriminator.setPropertyBaseName(sourceDiscriminator.getPropertyName()); discriminator.setPropertyGetter(toGetter(discriminator.getPropertyName())); + if (sourceDiscriminator.getExtensions() != null) { + discriminator.setVendorExtensions(sourceDiscriminator.getExtensions()); + } + // FIXME: for now, we assume that the discriminator property is String discriminator.setPropertyType(typeMapping.get("string")); @@ -7381,6 +7385,11 @@ public class DefaultCodegen implements CodegenConfig { enc.getExplode() == null ? false : enc.getExplode().booleanValue(), enc.getAllowReserved() == null ? false : enc.getAllowReserved().booleanValue() ); + + if (enc.getExtensions() != null) { + ce.vendorExtensions = enc.getExtensions(); + } + String propName = encodingEntry.getKey(); ceMap.put(propName, ce); } @@ -7412,6 +7421,10 @@ public class DefaultCodegen implements CodegenConfig { codegenMt = new CodegenMediaType(schemaProp, ceMap, schemaTestCases); } + if (mt.getExtensions() != null) { + codegenMt.vendorExtensions = mt.getExtensions(); + } + cmtContent.put(contentType, codegenMt); if (schemaProp != null) { addImports(imports, schemaProp.getImports(true, importBaseType, generatorMetadata.getFeatureSet())); @@ -7683,6 +7696,11 @@ public class DefaultCodegen implements CodegenConfig { cs.description = escapeText(server.getDescription()); cs.url = server.getUrl(); cs.variables = this.fromServerVariables(server.getVariables()); + + if (server.getExtensions() != null) { + cs.vendorExtensions = server.getExtensions(); + } + codegenServers.add(cs); } return codegenServers; @@ -7707,6 +7725,10 @@ public class DefaultCodegen implements CodegenConfig { codegenServerVariable.enumValues = enums; codegenServerVariable.name = variableEntry.getKey(); + if (variable.getExtensions() != null) { + codegenServerVariable.vendorExtensions = variable.getExtensions(); + } + // Sets the override value for a server variable pattern. // NOTE: OpenAPI Specification doesn't prevent multiple server URLs with variables. If multiple objects have the same // variables pattern, user overrides will apply to _all_ of these patterns. We may want to consider indexed overrides.