Skip to content

Commit

Permalink
[core] fix referenced enum case (#2175)
Browse files Browse the repository at this point in the history
  • Loading branch information
jmini authored and wing328 committed Feb 19, 2019
1 parent 1dadd45 commit fda867e
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3980,8 +3980,8 @@ public void updateCodegenPropertyEnum(CodegenProperty var) {
Map<String, Object> allowableValues = var.allowableValues;

// handle array
if (var.items != null) {
allowableValues = var.items.allowableValues;
if (var.mostInnerItems != null) {
allowableValues = var.mostInnerItems.allowableValues;
}

if (allowableValues == null) {
Expand All @@ -3993,6 +3993,13 @@ public void updateCodegenPropertyEnum(CodegenProperty var) {
return;
}

String varDataType = var.mostInnerItems != null ? var.mostInnerItems.dataType : var.dataType;
Optional<Schema> referencedSchema = ModelUtils.getSchemas(openAPI).entrySet().stream()
.filter(entry -> Objects.equals(varDataType, toModelName(entry.getKey())))
.map(Map.Entry::getValue)
.findFirst();
String dataType = (referencedSchema.isPresent()) ? getTypeDeclaration(referencedSchema.get()) : varDataType;

// put "enumVars" map into `allowableValues", including `name` and `value`
List<Map<String, Object>> enumVars = new ArrayList<>();
String commonPrefix = findCommonPrefixOfVars(values);
Expand All @@ -4009,22 +4016,30 @@ public void updateCodegenPropertyEnum(CodegenProperty var) {
}
}

final String dataType = var.mostInnerItems != null ? var.mostInnerItems.dataType : var.dataType;
enumVar.put("name", toEnumVarName(enumName, dataType));
enumVar.put("value", toEnumValue(value.toString(), dataType));
enumVar.put("isString", isDataTypeString(dataType));
enumVars.add(enumVar);
}
// if "x-enum-varnames" or "x-enum-descriptions" defined, update varnames
Map<String, Object> extensions = var.mostInnerItems != null ? var.mostInnerItems.getVendorExtensions() : var.getVendorExtensions();
if(referencedSchema.isPresent()) {
extensions = referencedSchema.get().getExtensions();
}
updateEnumVarsWithExtensions(enumVars, extensions);
allowableValues.put("enumVars", enumVars);

// handle default value for enum, e.g. available => StatusEnum.AVAILABLE
if (var.defaultValue != null) {
String enumName = null;
final String enumDefaultValue;
if("string".equalsIgnoreCase(dataType)) {
enumDefaultValue = toEnumValue(var.defaultValue, dataType);
} else {
enumDefaultValue = var.defaultValue;
}
for (Map<String, Object> enumVar : enumVars) {
if (toEnumValue(var.defaultValue, var.dataType).equals(enumVar.get("value"))) {
if (enumDefaultValue.equals(enumVar.get("value"))) {
enumName = (String) enumVar.get("name");
break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -569,7 +569,8 @@ private CodegenProperty codegenPropertyWithArrayOfIntegerValues() {
allowableValues.put("values", Collections.singletonList(1));
items.setAllowableValues(allowableValues);
items.dataType = "Integer";
array.setItems(items);
array.items = items;
array.mostInnerItems = items;
array.dataType = "Array";
return array;
}
Expand Down

0 comments on commit fda867e

Please sign in to comment.