Support for "x-enum-descriptions" (#1752)

This commit is contained in:
Jérémie Bresson
2019-01-09 17:47:55 +01:00
committed by William Cheng
parent 992ca3e8ed
commit d584833781
4 changed files with 31 additions and 11 deletions
@@ -71,7 +71,6 @@ import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
@@ -83,8 +82,8 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.openapitools.codegen.utils.StringUtils.camelize;
import static org.openapitools.codegen.utils.StringUtils.underscore;
import static org.openapitools.codegen.utils.StringUtils.escape;
import static org.openapitools.codegen.utils.StringUtils.underscore;
public class DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultCodegen.class);
@@ -338,7 +337,7 @@ public class DefaultCodegen implements CodegenConfig {
enumVar.put("isString", isDataTypeString(cm.dataType));
enumVars.add(enumVar);
}
// if "x-enum-varnames" defined, update varnames
// if "x-enum-varnames" or "x-enum-descriptions" defined, update varnames
updateEnumVarsWithExtensions(enumVars, cm.getVendorExtensions());
cm.allowableValues.put("enumVars", enumVars);
}
@@ -4085,7 +4084,7 @@ public class DefaultCodegen implements CodegenConfig {
enumVar.put("isString", isDataTypeString(dataType));
enumVars.add(enumVar);
}
// if "x-enum-varnames" defined, update varnames
// if "x-enum-varnames" or "x-enum-descriptions" defined, update varnames
Map<String, Object> extensions = var.mostInnerItems != null ? var.mostInnerItems.getVendorExtensions() : var.getVendorExtensions();
updateEnumVarsWithExtensions(enumVars, extensions);
allowableValues.put("enumVars", enumVars);
@@ -4105,13 +4104,19 @@ public class DefaultCodegen implements CodegenConfig {
}
}
private void updateEnumVarsWithExtensions
(List<Map<String, Object>> enumVars, Map<String, Object> vendorExtensions) {
if (vendorExtensions != null && vendorExtensions.containsKey("x-enum-varnames")) {
List<String> alias = (List<String>) vendorExtensions.get("x-enum-varnames");
int size = Math.min(enumVars.size(), alias.size());
private void updateEnumVarsWithExtensions(List<Map<String, Object>> enumVars, Map<String, Object> vendorExtensions) {
if (vendorExtensions != null) {
updateEnumVarsWithExtensions(enumVars, vendorExtensions, "x-enum-varnames", "name");
updateEnumVarsWithExtensions(enumVars, vendorExtensions, "x-enum-descriptions", "enumDescription");
}
}
private void updateEnumVarsWithExtensions(List<Map<String, Object>> enumVars, Map<String, Object> vendorExtensions, String extensionKey, String key) {
if (vendorExtensions.containsKey(extensionKey)) {
List<String> values = (List<String>) vendorExtensions.get(extensionKey);
int size = Math.min(enumVars.size(), values.size());
for (int i = 0; i < size; i++) {
enumVars.get(i).put("name", alias.get(i));
enumVars.get(i).put(key, values.get(i));
}
}
}
@@ -18,6 +18,11 @@ import com.google.gson.stream.JsonWriter;
{{/gson}}
public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} {
{{#allowableValues}}{{#enumVars}}
{{#enumDescription}}
/**
* {{enumDescription}}
*/
{{/enumDescription}}
{{{name}}}({{{value}}}){{^-last}},
{{/-last}}{{#-last}};{{/-last}}{{/enumVars}}{{/allowableValues}}
@@ -7,6 +7,11 @@
public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}} {
{{#allowableValues}}
{{#enumVars}}
{{#enumDescription}}
/**
* {{enumDescription}}
*/
{{/enumDescription}}
{{{name}}}({{{value}}}){{^-last}},
{{/-last}}{{#-last}};{{/-last}}
{{/enumVars}}
@@ -353,9 +353,11 @@ public class DefaultCodegenTest {
Assert.assertNotNull(enumVars.get(0));
Assert.assertEquals(enumVars.get(0).getOrDefault("name", ""), "DOGVAR");
Assert.assertEquals(enumVars.get(0).getOrDefault("value", ""), "\"dog\"");
Assert.assertEquals(enumVars.get(0).getOrDefault("enumDescription", ""), "This is a dog");
Assert.assertNotNull(enumVars.get(1));
Assert.assertEquals(enumVars.get(1).getOrDefault("name", ""), "CATVAR");
Assert.assertEquals(enumVars.get(1).getOrDefault("value", ""), "\"cat\"");
Assert.assertEquals(enumVars.get(1).getOrDefault("enumDescription", ""), "This is a cat");
}
@Test
@@ -575,7 +577,10 @@ public class DefaultCodegenTest {
cm.setAllowableValues(allowableValues);
cm.dataType = "String";
final List<String> aliases = Arrays.asList("DOGVAR", "CATVAR");
Map<String, Object> extentions = Collections.singletonMap("x-enum-varnames", aliases);
final List<String> descriptions = Arrays.asList("This is a dog", "This is a cat");
Map<String, Object> extentions = new HashMap<>();
extentions.put("x-enum-varnames", aliases);
extentions.put("x-enum-descriptions", descriptions);
cm.setVendorExtensions(extentions);
cm.setVars(Collections.emptyList());
Map<String, Object> objs = Collections.singletonMap("models", Collections.singletonList(Collections.singletonMap("model", cm)));