Skip to content

Commit d584833

Browse files
jminiwing328
authored andcommitted
Support for "x-enum-descriptions" (#1752)
1 parent 992ca3e commit d584833

File tree

4 files changed

+31
-11
lines changed

4 files changed

+31
-11
lines changed

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

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@
7171
import java.util.LinkedHashMap;
7272
import java.util.LinkedList;
7373
import java.util.List;
74-
import java.util.ListIterator;
7574
import java.util.Locale;
7675
import java.util.Map;
7776
import java.util.Map.Entry;
@@ -83,8 +82,8 @@
8382
import java.util.stream.Stream;
8483

8584
import static org.openapitools.codegen.utils.StringUtils.camelize;
86-
import static org.openapitools.codegen.utils.StringUtils.underscore;
8785
import static org.openapitools.codegen.utils.StringUtils.escape;
86+
import static org.openapitools.codegen.utils.StringUtils.underscore;
8887

8988
public class DefaultCodegen implements CodegenConfig {
9089
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultCodegen.class);
@@ -338,7 +337,7 @@ public Map<String, Object> postProcessModelsEnum(Map<String, Object> objs) {
338337
enumVar.put("isString", isDataTypeString(cm.dataType));
339338
enumVars.add(enumVar);
340339
}
341-
// if "x-enum-varnames" defined, update varnames
340+
// if "x-enum-varnames" or "x-enum-descriptions" defined, update varnames
342341
updateEnumVarsWithExtensions(enumVars, cm.getVendorExtensions());
343342
cm.allowableValues.put("enumVars", enumVars);
344343
}
@@ -4085,7 +4084,7 @@ public void updateCodegenPropertyEnum(CodegenProperty var) {
40854084
enumVar.put("isString", isDataTypeString(dataType));
40864085
enumVars.add(enumVar);
40874086
}
4088-
// if "x-enum-varnames" defined, update varnames
4087+
// if "x-enum-varnames" or "x-enum-descriptions" defined, update varnames
40894088
Map<String, Object> extensions = var.mostInnerItems != null ? var.mostInnerItems.getVendorExtensions() : var.getVendorExtensions();
40904089
updateEnumVarsWithExtensions(enumVars, extensions);
40914090
allowableValues.put("enumVars", enumVars);
@@ -4105,13 +4104,19 @@ public void updateCodegenPropertyEnum(CodegenProperty var) {
41054104
}
41064105
}
41074106

4108-
private void updateEnumVarsWithExtensions
4109-
(List<Map<String, Object>> enumVars, Map<String, Object> vendorExtensions) {
4110-
if (vendorExtensions != null && vendorExtensions.containsKey("x-enum-varnames")) {
4111-
List<String> alias = (List<String>) vendorExtensions.get("x-enum-varnames");
4112-
int size = Math.min(enumVars.size(), alias.size());
4107+
private void updateEnumVarsWithExtensions(List<Map<String, Object>> enumVars, Map<String, Object> vendorExtensions) {
4108+
if (vendorExtensions != null) {
4109+
updateEnumVarsWithExtensions(enumVars, vendorExtensions, "x-enum-varnames", "name");
4110+
updateEnumVarsWithExtensions(enumVars, vendorExtensions, "x-enum-descriptions", "enumDescription");
4111+
}
4112+
}
4113+
4114+
private void updateEnumVarsWithExtensions(List<Map<String, Object>> enumVars, Map<String, Object> vendorExtensions, String extensionKey, String key) {
4115+
if (vendorExtensions.containsKey(extensionKey)) {
4116+
List<String> values = (List<String>) vendorExtensions.get(extensionKey);
4117+
int size = Math.min(enumVars.size(), values.size());
41134118
for (int i = 0; i < size; i++) {
4114-
enumVars.get(i).put("name", alias.get(i));
4119+
enumVars.get(i).put(key, values.get(i));
41154120
}
41164121
}
41174122
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ import com.google.gson.stream.JsonWriter;
1818
{{/gson}}
1919
public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} {
2020
{{#allowableValues}}{{#enumVars}}
21+
{{#enumDescription}}
22+
/**
23+
* {{enumDescription}}
24+
*/
25+
{{/enumDescription}}
2126
{{{name}}}({{{value}}}){{^-last}},
2227
{{/-last}}{{#-last}};{{/-last}}{{/enumVars}}{{/allowableValues}}
2328

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@
77
public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}} {
88
{{#allowableValues}}
99
{{#enumVars}}
10+
{{#enumDescription}}
11+
/**
12+
* {{enumDescription}}
13+
*/
14+
{{/enumDescription}}
1015
{{{name}}}({{{value}}}){{^-last}},
1116
{{/-last}}{{#-last}};{{/-last}}
1217
{{/enumVars}}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,9 +353,11 @@ public void postProcessModelsEnumWithExtention() {
353353
Assert.assertNotNull(enumVars.get(0));
354354
Assert.assertEquals(enumVars.get(0).getOrDefault("name", ""), "DOGVAR");
355355
Assert.assertEquals(enumVars.get(0).getOrDefault("value", ""), "\"dog\"");
356+
Assert.assertEquals(enumVars.get(0).getOrDefault("enumDescription", ""), "This is a dog");
356357
Assert.assertNotNull(enumVars.get(1));
357358
Assert.assertEquals(enumVars.get(1).getOrDefault("name", ""), "CATVAR");
358359
Assert.assertEquals(enumVars.get(1).getOrDefault("value", ""), "\"cat\"");
360+
Assert.assertEquals(enumVars.get(1).getOrDefault("enumDescription", ""), "This is a cat");
359361
}
360362

361363
@Test
@@ -575,7 +577,10 @@ private Map<String, Object> codegenModelWithXEnumVarName() {
575577
cm.setAllowableValues(allowableValues);
576578
cm.dataType = "String";
577579
final List<String> aliases = Arrays.asList("DOGVAR", "CATVAR");
578-
Map<String, Object> extentions = Collections.singletonMap("x-enum-varnames", aliases);
580+
final List<String> descriptions = Arrays.asList("This is a dog", "This is a cat");
581+
Map<String, Object> extentions = new HashMap<>();
582+
extentions.put("x-enum-varnames", aliases);
583+
extentions.put("x-enum-descriptions", descriptions);
579584
cm.setVendorExtensions(extentions);
580585
cm.setVars(Collections.emptyList());
581586
Map<String, Object> objs = Collections.singletonMap("models", Collections.singletonList(Collections.singletonMap("model", cm)));

0 commit comments

Comments
 (0)