Skip to content

Commit f2adecb

Browse files
authored
Merge pull request #806 from swagger-api/codegen-enum-values-issue
fixed java, javascript and kotlin enumeration issue
2 parents a0b1a60 + e969141 commit f2adecb

File tree

6 files changed

+45
-6
lines changed

6 files changed

+45
-6
lines changed

src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,12 @@ public void processModelEnums(Map<String, Object> objs) {
362362
}
363363
}
364364

365+
public boolean isPrimivite(String datatype) {
366+
return "number".equalsIgnoreCase(datatype)
367+
|| "integer".equalsIgnoreCase(datatype)
368+
|| "boolean".equalsIgnoreCase(datatype);
369+
}
370+
365371
/**
366372
* update codegen property enum with proper naming convention
367373
* and handling of numbers, special characters
@@ -1465,6 +1471,9 @@ else if (schema instanceof ComposedSchema) {
14651471
// comment out below as allowableValues is not set in post processing model enum
14661472
codegenModel.allowableValues = new HashMap<String, Object>();
14671473
codegenModel.allowableValues.put("values", schema.getEnum());
1474+
if (codegenModel.dataType.equals("BigDecimal")) {
1475+
addImport(codegenModel, "BigDecimal");
1476+
}
14681477
}
14691478
addVars(codegenModel, schema.getProperties(), schema.getRequired());
14701479
}
@@ -1474,6 +1483,15 @@ else if (schema instanceof ComposedSchema) {
14741483
postProcessModelProperty(codegenModel, prop);
14751484
}
14761485
}
1486+
1487+
System.out.println(codegenModel.name);
1488+
System.out.println(codegenModel.dataType);
1489+
System.out.println(codegenModel.getIsInteger());
1490+
System.out.println(codegenModel.getIsNumber());
1491+
System.out.println(codegenModel.getIsBoolean());
1492+
System.out.println("--------");
1493+
1494+
14771495
return codegenModel;
14781496
}
14791497

src/main/java/io/swagger/codegen/v3/generators/java/AbstractJavaCodegen.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1258,8 +1258,7 @@ public String toEnumVarName(String value, String datatype) {
12581258
}
12591259

12601260
// number
1261-
if ("Integer".equals(datatype) || "Long".equals(datatype) ||
1262-
"Float".equals(datatype) || "Double".equals(datatype)) {
1261+
if ("Integer".equals(datatype) || "Long".equals(datatype) || "Float".equals(datatype) || "Double".equals(datatype) || "BigDecimal".equals(datatype)) {
12631262
String varName = "NUMBER_" + value;
12641263
varName = varName.replaceAll("-", "MINUS_");
12651264
varName = varName.replaceAll("\\+", "PLUS_");
@@ -1281,14 +1280,17 @@ public String toEnumValue(String value, String datatype) {
12811280
if (value == null) {
12821281
return null;
12831282
}
1284-
if ("Integer".equals(datatype) || "Double".equals(datatype)) {
1283+
System.out.println("|||||||||||||||||||||||||||| datatype: " + datatype);
1284+
if ("Integer".equals(datatype) || "Double".equals(datatype) || "Boolean".equals(datatype)) {
12851285
return value;
12861286
} else if ("Long".equals(datatype)) {
12871287
// add l to number, e.g. 2048 => 2048l
12881288
return value + "l";
12891289
} else if ("Float".equals(datatype)) {
12901290
// add f to number, e.g. 3.14 => 3.14f
12911291
return value + "f";
1292+
} else if ("BigDecimal".equals(datatype)) {
1293+
return "new BigDecimal(" + escapeText(value) + ")";
12921294
} else {
12931295
return "\"" + escapeText(value) + "\"";
12941296
}

src/main/java/io/swagger/codegen/v3/generators/javascript/JavaScriptClientCodegen.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1064,7 +1064,7 @@ public String toEnumVarName(String value, String datatype) {
10641064

10651065
@Override
10661066
public String toEnumValue(String value, String datatype) {
1067-
if ("Integer".equals(datatype) || "Number".equals(datatype)) {
1067+
if ("Integer".equals(datatype) || "Number".equals(datatype) || "Boolean".equals(datatype)) {
10681068
return value;
10691069
} else {
10701070
return "\"" + escapeText(value) + "\"";

src/main/java/io/swagger/codegen/v3/generators/kotlin/AbstractKotlinCodegen.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,25 @@ public String toEnumVarName(String value, String datatype) {
467467
return modified;
468468
}
469469

470+
@Override
471+
public String toEnumValue(String value, String datatype) {
472+
if (isPrimivite(datatype)) {
473+
return value;
474+
}
475+
return super.toEnumValue(value, datatype);
476+
}
477+
478+
@Override
479+
public boolean isPrimivite(String datatype) {
480+
return "kotlin.Byte".equalsIgnoreCase(datatype)
481+
|| "kotlin.Short".equalsIgnoreCase(datatype)
482+
|| "kotlin.Int".equalsIgnoreCase(datatype)
483+
|| "kotlin.Long".equalsIgnoreCase(datatype)
484+
|| "kotlin.Float".equalsIgnoreCase(datatype)
485+
|| "kotlin.Double".equalsIgnoreCase(datatype)
486+
|| "kotlin.Boolean".equalsIgnoreCase(datatype);
487+
}
488+
470489
@Override
471490
public String toInstantiationType(Schema p) {
472491
if (p instanceof ArraySchema) {

src/main/resources/handlebars/Java/modelEnum.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum
6262

6363
@Override
6464
public {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} read(final JsonReader jsonReader) throws IOException {
65-
{{{dataType}}} value = jsonReader.{{#is this 'integer'}}nextInt(){{/is}}{{#isNot this 'integer'}}next{{{dataType}}}(){{/isNot}};
65+
{{{dataType}}} value = {{#isNumber}}new BigDecimal(jsonReader.nextDouble()){{/isNumber}}{{^isNumber}}jsonReader.{{#isInteger}}nextInt(){{/isInteger}}{{^isInteger}}next{{{dataType}}}(){{/isInteger}}{{/isNumber}};
6666
return {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.fromValue(String.valueOf(value));
6767
}
6868
}

src/main/resources/handlebars/Java/modelInnerEnum.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545

4646
@Override
4747
public {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}} read(final JsonReader jsonReader) throws IOException {
48-
{{{datatype}}} value = jsonReader.{{#is ../this 'integer'}}nextInt(){{/is}}{{#isNot ../this 'integer'}}next{{{datatype}}}(){{/isNot}};
48+
{{{dataType}}} value = {{#isNumber}}new BigDecimal(jsonReader.nextDouble()){{/isNumber}}{{^isNumber}}jsonReader.{{#isInteger}}nextInt(){{/isInteger}}{{^isInteger}}next{{{dataType}}}(){{/isInteger}}{{/isNumber}};
4949
return {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}.fromValue(String.valueOf(value));
5050
}
5151
}{{/gson}}

0 commit comments

Comments
 (0)