Skip to content

Commit 81a9246

Browse files
authored
Merge pull request #619 from swagger-api/swos-188
Allow nullable enums
2 parents 859b5d8 + ef1b80a commit 81a9246

26 files changed

+82
-54
lines changed

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

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,11 @@ public void processModelEnums(Map<String, Object> objs) {
305305
Map<String, String> enumVar = new HashMap<String, String>();
306306
String enumName = findEnumName(truncateIdx, value);
307307
enumVar.put("name", toEnumVarName(enumName, cm.dataType));
308-
enumVar.put("value", toEnumValue(value.toString(), cm.dataType));
308+
if (value == null) {
309+
enumVar.put("value", toEnumValue(null, cm.dataType));
310+
} else {
311+
enumVar.put("value", toEnumValue(value.toString(), cm.dataType));
312+
}
309313
enumVars.add(enumVar);
310314
}
311315
cm.allowableValues.put("enumVars", enumVars);
@@ -320,6 +324,9 @@ public void processModelEnums(Map<String, Object> objs) {
320324
}
321325

322326
private String findEnumName(int truncateIdx, Object value) {
327+
if (value == null) {
328+
return "null";
329+
}
323330
String enumName;
324331
if (truncateIdx == 0) {
325332
enumName = value.toString();
@@ -370,6 +377,9 @@ public String toEnumDefaultValue(String value, String datatype) {
370377
* @return the sanitized value for enum
371378
*/
372379
public String toEnumValue(String value, String datatype) {
380+
if (value == null) {
381+
return null;
382+
}
373383
if ("number".equalsIgnoreCase(datatype)) {
374384
return value;
375385
} else {
@@ -3778,7 +3788,11 @@ public void updateCodegenPropertyEnum(CodegenProperty var) {
37783788
Map<String, String> enumVar = new HashMap<String, String>();
37793789
String enumName = findEnumName(truncateIdx, value);
37803790
enumVar.put("name", toEnumVarName(enumName, var.datatype));
3781-
enumVar.put("value", toEnumValue(value.toString(), var.datatype));
3791+
if (value == null) {
3792+
enumVar.put("value", toEnumValue(null, var.datatype));
3793+
} else {
3794+
enumVar.put("value", toEnumValue(value.toString(), var.datatype));
3795+
}
37823796
enumVars.add(enumVar);
37833797
}
37843798
allowableValues.put("enumVars", enumVars);

src/main/java/io/swagger/codegen/v3/generators/dotnet/AbstractCSharpCodegen.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -915,6 +915,9 @@ public CodegenModel fromModel(String name, Schema schema, Map<String, Schema> al
915915

916916
@Override
917917
public String toEnumValue(String value, String datatype) {
918+
if (value == null) {
919+
return null;
920+
}
918921
// C# only supports enums as literals for int, int?, long, long?, byte, and byte?. All else must be treated as strings.
919922
// Per: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/enum
920923
// The approved types for an enum are byte, sbyte, short, ushort, int, uint, long, or ulong.

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1105,6 +1105,9 @@ public String toEnumVarName(String value, String datatype) {
11051105

11061106
@Override
11071107
public String toEnumValue(String value, String datatype) {
1108+
if (value == null) {
1109+
return null;
1110+
}
11081111
if ("Integer".equals(datatype) || "Double".equals(datatype)) {
11091112
return value;
11101113
} else if ("Long".equals(datatype)) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import com.google.gson.stream.JsonWriter;
1919
public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} {
2020
{{#allowableValues}}
2121
{{#enumVars}}
22-
{{{name}}}({{{value}}}){{^@last}},{{/@last}}{{#@last}};{{/@last}}
22+
{{{name}}}({{#value}}{{{value}}}{{/value}}{{^value}}null{{/value}}){{^@last}},{{/@last}}{{#@last}};{{/@last}}
2323
{{/enumVars}}
2424
{{/allowableValues}}
2525

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}} {
66
{{#allowableValues}}
77
{{#enumVars}}
8-
{{{name}}}({{{value}}}){{^@last}},{{/@last}}{{#@last}};{{/@last}}
8+
{{{name}}}({{#value}}{{{value}}}{{/value}}{{^value}}null{{/value}}){{^@last}},{{/@last}}{{#@last}};{{/@last}}
99
{{/enumVars}}
1010
{{/allowableValues}}
1111

src/main/resources/handlebars/JavaJaxRS/cxf-cdi/api.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public class {{classname}} {
7979
@ApiResponse(responseCode = "{{{code}}}", description = "{{{message}}}"{{^vendorExtensions.x-java-is-response-void}}, content = @Content({{^containerType}}schema = @Schema(implementation = {{{baseType}}}.class)){{/containerType}}{{#containerType}}array = @ArraySchema(schema = @Schema(implementation = {{{baseType}}}.class))){{/containerType}}{{/vendorExtensions.x-java-is-response-void}}){{#hasMore}},{{/hasMore}}{{/responses}} })
8080
{{/useOas2}}
8181
public Response {{nickname}}({{#parameters}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{#hasMore}}, {{/hasMore}}{{/parameters}}) {
82-
return delegate.{{nickname}}({{#parameters}}{{#isBinary}}{{paramName}}InputStream, {{paramName}}Detail{{/isBinary}}{{^isBinary}}{{paramName}}{{/isBinary}}, {{/parameters}}securityContext);
82+
return delegate.{{nickname}}({{#parameters}}{{#isFile}}{{paramName}}InputStream, {{paramName}}Detail{{/isFile}}{{^isFile}}{{paramName}}{{/isFile}}, {{/parameters}}securityContext);
8383
}
8484
{{/contents}}
8585
{{/operation}}

src/main/resources/handlebars/JavaJaxRS/cxf-cdi/enumClass.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
public enum {{datatypeWithEnum}} {
44
55
{{#allowableValues}}
6-
{{#enumVars}}@XmlEnumValue({{{value}}}) {{name}}({{datatype}}.valueOf({{{value}}})){{^@last}}, {{/@last}}{{#@last}};{{/@last}}{{/enumVars}}
6+
{{#enumVars}}{{#value}}@XmlEnumValue({{{value}}}) {{name}}({{datatype}}.valueOf({{{value}}})){{/value}}{{^value}}@XmlEnumValue("") {{name}}(null){{/value}}{{^@last}}, {{/@last}}{{#@last}};{{/@last}}{{/enumVars}}
77
{{/allowableValues}}
88

99

src/main/resources/handlebars/JavaJaxRS/cxf/enumClass.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
public enum {{datatypeWithEnum}} {
44
55
{{#allowableValues}}
6-
{{#enumVars}}@XmlEnumValue({{#is ../../this 'integer'}}"{{/is}}{{#is ../../this 'double'}}"{{/is}}{{#is ../../this 'long'}}"{{/is}}{{#is ../../this 'float'}}"{{/is}}{{{value}}}{{#is ../../this 'integer'}}"{{/is}}{{#is ../../this 'double'}}"{{/is}}{{#is ../../this 'long'}}"{{/is}}{{#is ../../this 'float'}}"{{/is}}) {{name}}({{datatype}}.valueOf({{{value}}})){{^@last}}, {{/@last}}{{#@last}};{{/@last}}{{/enumVars}}
6+
{{#enumVars}}@XmlEnumValue({{#is ../../this 'integer'}}"{{/is}}{{#is ../../this 'double'}}"{{/is}}{{#is ../../this 'long'}}"{{/is}}{{#is ../../this 'float'}}"{{/is}}{{{value}}}{{#is ../../this 'integer'}}"{{/is}}{{#is ../../this 'double'}}"{{/is}}{{#is ../../this 'long'}}"{{/is}}{{#is ../../this 'float'}}"{{/is}}) {{name}}({{#value}}{{datatype}}.valueOf({{{value}}}){{/value}}{{^value}}null{{/value}})){{^@last}}, {{/@last}}{{#@last}};{{/@last}}{{/enumVars}}
77
{{/allowableValues}}
88

99

src/main/resources/handlebars/JavaJaxRS/cxf/enumOuterClass.mustache

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,30 @@ import javax.xml.bind.annotation.XmlEnumValue;
1414
{{#if withXml}}
1515
@XmlType(name="{{classname}}")
1616
@XmlEnum({{dataType}}.class)
17-
{{/if~}}
17+
{{/if}}
1818
public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} {
1919
{{#if gson}}
20-
{{#allowableValues}}{{#enumVars}}
20+
{{#allowableValues}}
21+
{{#enumVars}}
2122
@SerializedName({{#is ../../this 'integer'}}"{{/is}}{{#is ../../this 'double'}}"{{/is}}{{#is ../../this 'long'}}"{{/is}}{{#is ../../this 'float'}}"{{/is}}{{{value}}}{{#is ../../this 'integer'}}"{{/is}}{{#is ../../this 'double'}}"{{/is}}{{#is ../../this 'long'}}"{{/is}}{{#is ../../this 'float'}}"{{/is}})
2223
{{#if withXml}}
23-
@XmlEnumValue({{{value}}})
24-
{{/if~}}
25-
{{{name}}}({{{value}}}){{^@last}},
26-
{{/@last}}{{#@last}};{{/@last}}{{/enumVars}}{{/allowableValues}}
24+
@XmlEnumValue({{#value}}{{{value}}}{{/value}}{{^value}}""{{/value}})
25+
{{/if}}
26+
{{{name}}}({{#value}}{{{value}}}{{/value}}{{^value}}null{{/value}}){{^@last}},
27+
{{/@last}}{{#@last}};{{/@last}}
28+
{{/enumVars}}
29+
{{/allowableValues}}
2730
{{/if}}
2831
{{#unless gson}}
29-
{{#allowableValues}}{{#enumVars}}
32+
{{#allowableValues}}
33+
{{#enumVars}}
3034
{{#if withXml}}
31-
@XmlEnumValue({{{value}}})
32-
{{/if~}}
33-
{{{name}}}({{{value}}}){{^@last}},
34-
{{/@last}}{{#@last}};{{/@last}}{{/enumVars}}{{/allowableValues}}
35+
@XmlEnumValue({{#value}}{{{value}}}{{/value}}{{^value}}""{{/value}})
36+
{{/if}}
37+
{{{name}}}({{#value}}{{{value}}}{{/value}}{{^value}}null{{/value}}){{^@last}},
38+
{{/@last}}{{#@last}};{{/@last}}
39+
{{/enumVars}}
40+
{{/allowableValues}}
3541
{{/unless}}
3642

3743
private {{{dataType}}} value;

src/main/resources/handlebars/JavaJaxRS/cxf/modelInnerEnum.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}} {
22
{{#allowableValues}}
33
{{#enumVars}}
4-
{{{name}}}({{{value}}}){{^@last}},{{/@last}}{{#@last}};{{/@last}}
4+
{{{name}}}({{#value}}{{{value}}}{{/value}}{{^value}}null{{/value}}){{^@last}},{{/@last}}{{#@last}};{{/@last}}
55
{{/enumVars}}
66
{{/allowableValues}}
77

0 commit comments

Comments
 (0)