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 6db9d65b221c..1c942a4e4468 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 @@ -3980,8 +3980,8 @@ public void updateCodegenPropertyEnum(CodegenProperty var) { Map allowableValues = var.allowableValues; // handle array - if (var.items != null) { - allowableValues = var.items.allowableValues; + if (var.mostInnerItems != null) { + allowableValues = var.mostInnerItems.allowableValues; } if (allowableValues == null) { @@ -3993,6 +3993,13 @@ public void updateCodegenPropertyEnum(CodegenProperty var) { return; } + String varDataType = var.mostInnerItems != null ? var.mostInnerItems.dataType : var.dataType; + Optional 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> enumVars = new ArrayList<>(); String commonPrefix = findCommonPrefixOfVars(values); @@ -4009,7 +4016,6 @@ 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)); @@ -4017,14 +4023,23 @@ public void updateCodegenPropertyEnum(CodegenProperty var) { } // if "x-enum-varnames" or "x-enum-descriptions" defined, update varnames Map 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 enumVar : enumVars) { - if (toEnumValue(var.defaultValue, var.dataType).equals(enumVar.get("value"))) { + if (enumDefaultValue.equals(enumVar.get("value"))) { enumName = (String) enumVar.get("name"); break; } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index 348c41b1f830..c5f7d74284ff 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -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; }