Skip to content

Commit 53a6178

Browse files
jpfinnekpy3
authored andcommitted
Add x-implements for java enums (OpenAPITools#20778)
1 parent 09eebf6 commit 53a6178

File tree

13 files changed

+69
-10
lines changed

13 files changed

+69
-10
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1113,7 +1113,7 @@ public ModelsMap postProcessModels(ModelsMap objs) {
11131113
cm.anyOf.remove("ModelNull");
11141114
}
11151115
}
1116-
if (this.parcelableModel) {
1116+
if (this.parcelableModel && !cm.isEnum) {
11171117
((ArrayList<String>) cm.getVendorExtensions().get("x-implements")).add("Parcelable");
11181118
}
11191119
}

modules/openapi-generator/src/main/resources/Java/libraries/microprofile/enumClass.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
@JsonbTypeDeserializer({{datatypeWithEnum}}.Deserializer.class)
99
{{/jsonb}}
1010
{{/withXml}}
11-
{{>additionalEnumTypeAnnotations}}public enum {{datatypeWithEnum}} {
11+
{{>additionalEnumTypeAnnotations}}public enum {{datatypeWithEnum}}{{#vendorExtensions.x-implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} {
1212
1313
{{#allowableValues}}
1414
{{#withXml}}

modules/openapi-generator/src/main/resources/Java/libraries/microprofile/enumOuterClass.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import java.net.URI;
1313
@JsonbTypeSerializer({{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.Serializer.class)
1414
@JsonbTypeDeserializer({{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.Deserializer.class)
1515
{{/jsonb}}
16-
{{>additionalEnumTypeAnnotations}}public enum {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} {
16+
{{>additionalEnumTypeAnnotations}}public enum {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}{{#vendorExtensions.x-implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} {
1717
{{#gson}}
1818
{{#allowableValues}}{{#enumVars}}
1919
@SerializedName({{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}}{{{value}}}{{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}})

modules/openapi-generator/src/main/resources/Java/libraries/native/modelEnum.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import java.net.URI;
2323
@JsonbTypeSerializer({{datatypeWithEnum}}.Serializer.class)
2424
@JsonbTypeDeserializer({{datatypeWithEnum}}.Deserializer.class)
2525
{{/jsonb}}
26-
{{>additionalEnumTypeAnnotations}}public enum {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} {
26+
{{>additionalEnumTypeAnnotations}}public enum {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}{{#vendorExtensions.x-implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} {
2727
{{#allowableValues}}{{#enumVars}}
2828
{{#enumDescription}}
2929
/**

modules/openapi-generator/src/main/resources/Java/libraries/okhttp-gson/modelEnum.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import com.google.gson.stream.JsonWriter;
1212
* {{description}}{{^description}}Gets or Sets {{{name}}}{{/description}}
1313
*/
1414
@JsonAdapter({{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.Adapter.class)
15-
{{>additionalEnumTypeAnnotations}}public enum {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} {
15+
{{>additionalEnumTypeAnnotations}}public enum {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}{{#vendorExtensions.x-implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} {
1616
{{#allowableValues}}{{#enumVars}}
1717
{{#enumDescription}}
1818
/**

modules/openapi-generator/src/main/resources/Java/libraries/okhttp-gson/modelInnerEnum.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
@XmlType(name="{{datatypeWithEnum}}")
77
@XmlEnum({{dataType}}.class)
88
{{/withXml}}
9-
{{>additionalEnumTypeAnnotations}}public enum {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}} {
9+
{{>additionalEnumTypeAnnotations}}public enum {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}{{#vendorExtensions.x-implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} {
1010
{{#allowableValues}}
1111
{{#enumVars}}
1212
{{#enumDescription}}

modules/openapi-generator/src/main/resources/Java/modelEnum.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import java.net.URI;
2323
@JsonbTypeSerializer({{datatypeWithEnum}}.Serializer.class)
2424
@JsonbTypeDeserializer({{datatypeWithEnum}}.Deserializer.class)
2525
{{/jsonb}}
26-
{{>additionalEnumTypeAnnotations}}public enum {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} {
26+
{{>additionalEnumTypeAnnotations}}public enum {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}{{#vendorExtensions.x-implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} {
2727
{{#allowableValues}}{{#enumVars}}
2828
{{#enumDescription}}
2929
/**

modules/openapi-generator/src/main/resources/Java/modelInnerEnum.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
@XmlType(name="{{datatypeWithEnum}}")
1313
@XmlEnum({{dataType}}.class)
1414
{{/withXml}}
15-
{{>additionalEnumTypeAnnotations}}public enum {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}} {
15+
{{>additionalEnumTypeAnnotations}}public enum {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}{{#vendorExtensions.x-implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} {
1616
{{#allowableValues}}
1717
{{#enumVars}}
1818
{{#enumDescription}}

modules/openapi-generator/src/main/resources/JavaSpring/enumClass.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* {{^description}}Gets or Sets {{{name}}}{{/description}}{{{description}}}
33
*/
4-
{{>additionalEnumTypeAnnotations}}public enum {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}} {
4+
{{>additionalEnumTypeAnnotations}}public enum {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}{{#vendorExtensions.x-implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} {
55
{{#gson}}
66
{{#allowableValues}}
77
{{#enumVars}}

modules/openapi-generator/src/main/resources/JavaSpring/enumOuterClass.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import com.fasterxml.jackson.annotation.JsonValue;
88
*/
99
{{>additionalEnumTypeAnnotations}}
1010
{{>generatedAnnotation}}
11-
public enum {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} {
11+
public enum {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}{{#vendorExtensions.x-implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} {
1212
{{#gson}}
1313
{{#allowableValues}}{{#enumVars}}
1414
{{#enumDescription}}

modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3463,4 +3463,17 @@ public void callNativeServiceWithEmptyResponseAsync() throws IOException {
34633463
"responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference<LocationData>() {})"
34643464
);
34653465
}
3466+
3467+
@Test
3468+
public void testEnumWithImplements() {
3469+
final Path output = newTempFolder();
3470+
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/enum-implements.yaml");
3471+
JavaClientCodegen codegen = new JavaClientCodegen();
3472+
codegen.setOutputDir(output.toString());
3473+
3474+
Map<String, File> files = new DefaultGenerator().opts(new ClientOptInput().openAPI(openAPI).config(codegen))
3475+
.generate().stream().collect(Collectors.toMap(File::getName, Function.identity()));
3476+
3477+
JavaFileAssert.assertThat(files.get("Type.java")).fileContains("Type implements org.openapitools.java.EnumInterface {");
3478+
}
34663479
}

modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5370,4 +5370,17 @@ public void shouldAcceptNullValues() throws IOException {
53705370
"this.name = Optional.of(name);"
53715371
);
53725372
}
5373+
5374+
@Test
5375+
public void testEnumWithImplements() {
5376+
final Path output = newTempFolder();
5377+
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/enum-implements.yaml");
5378+
SpringCodegen codegen = new SpringCodegen();
5379+
codegen.setOutputDir(output.toString());
5380+
5381+
Map<String, File> files = new DefaultGenerator().opts(new ClientOptInput().openAPI(openAPI).config(codegen))
5382+
.generate().stream().collect(Collectors.toMap(File::getName, Function.identity()));
5383+
5384+
JavaFileAssert.assertThat(files.get("Type.java")).fileContains("Type implements org.openapitools.java.EnumInterface {");
5385+
}
53735386
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
openapi: 3.0.0
2+
info:
3+
title: Sample API
4+
description: API description in Markdown.
5+
version: 1.0.0
6+
paths:
7+
/ponies:
8+
get:
9+
summary: Returns all animals.
10+
description: Optional extended description in Markdown.
11+
responses:
12+
200:
13+
description: OK
14+
content:
15+
application/json:
16+
schema:
17+
type: array
18+
items:
19+
$ref: '#/components/schemas/Pony'
20+
components:
21+
schemas:
22+
Pony:
23+
type: object
24+
properties:
25+
type:
26+
$ref: '#/components/schemas/Type'
27+
Type:
28+
type: string
29+
x-implements: org.openapitools.java.EnumInterface
30+
enum:
31+
- Earth
32+
- Pegasi
33+
- Unicorn

0 commit comments

Comments
 (0)