Skip to content

Commit 5029c6a

Browse files
committed
support x-class-extra-annotation annotation lists in java codegen
1 parent c22c0f5 commit 5029c6a

31 files changed

Lines changed: 114 additions & 27 deletions

File tree

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2088,6 +2088,20 @@ public ModelsMap postProcessModels(ModelsMap objs) {
20882088
}
20892089
}
20902090

2091+
// normalize x-class-extra-annotation to always be a List<String> so that
2092+
// mustache templates can iterate over it for both single and multiple annotations.
2093+
// This also ensures allOf schemas with x-class-extra-annotation are handled correctly.
2094+
for (ModelMap mo : objs.getModels()) {
2095+
CodegenModel cm = mo.getModel();
2096+
Object annotation = cm.getVendorExtensions().get(VendorExtension.X_CLASS_EXTRA_ANNOTATION.getName());
2097+
if (annotation instanceof String) {
2098+
cm.getVendorExtensions().put(
2099+
VendorExtension.X_CLASS_EXTRA_ANNOTATION.getName(),
2100+
Collections.singletonList(annotation));
2101+
}
2102+
// if annotation is already a List (e.g. from a YAML sequence), leave it as-is
2103+
}
2104+
20912105
// skip interfaces predefined in open api spec in x-implements via additional property xImplementsSkip
20922106
if (!this.xImplementsSkip.isEmpty()) {
20932107
for (ModelMap mo : objs.getModels()) {

modules/openapi-generator/src/main/resources/Java/libraries/feign/pojo.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
{{/jackson}}
2323
{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{>xmlAnnotation}}
2424
{{#vendorExtensions.x-class-extra-annotation}}
25-
{{{vendorExtensions.x-class-extra-annotation}}}
25+
{{{.}}}
2626
{{/vendorExtensions.x-class-extra-annotation}}
2727
public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtensions.x-implements}}{{#-first}}implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{
2828
{{#serializableModel}}

modules/openapi-generator/src/main/resources/Java/libraries/jersey2/pojo.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
{{/jackson}}
2626
{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{>xmlAnnotation}}
2727
{{#vendorExtensions.x-class-extra-annotation}}
28-
{{{vendorExtensions.x-class-extra-annotation}}}
28+
{{{.}}}
2929
{{/vendorExtensions.x-class-extra-annotation}}
3030
public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtensions.x-implements}}{{#-first}}implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{
3131
{{#serializableModel}}

modules/openapi-generator/src/main/resources/Java/libraries/jersey3/pojo.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
{{/jackson}}
2626
{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{>xmlAnnotation}}
2727
{{#vendorExtensions.x-class-extra-annotation}}
28-
{{{vendorExtensions.x-class-extra-annotation}}}
28+
{{{.}}}
2929
{{/vendorExtensions.x-class-extra-annotation}}
3030
public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtensions.x-implements}}{{#-first}}implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{
3131
{{#serializableModel}}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
{{/description}}
2626
{{>additionalModelTypeAnnotations}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}
2727
{{#vendorExtensions.x-class-extra-annotation}}
28-
{{{vendorExtensions.x-class-extra-annotation}}}
28+
{{{.}}}
2929
{{/vendorExtensions.x-class-extra-annotation}}
3030
public class {{classname}} {{#parent}}extends {{{.}}}{{/parent}}{{#vendorExtensions.x-implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} {
3131
{{#vars}}{{#isEnum}}{{^isContainer}}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import {{invokerPackage}}.ApiClient;
2828
{{/jackson}}
2929
{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{>xmlAnnotation}}
3030
{{#vendorExtensions.x-class-extra-annotation}}
31-
{{{vendorExtensions.x-class-extra-annotation}}}
31+
{{{.}}}
3232
{{/vendorExtensions.x-class-extra-annotation}}
3333
public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtensions.x-implements}}{{#-first}}implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{
3434
{{#serializableModel}}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import {{invokerPackage}}.JSON;
3838
{{/swagger2AnnotationLibrary}}
3939
{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{>xmlAnnotation}}
4040
{{#vendorExtensions.x-class-extra-annotation}}
41-
{{{vendorExtensions.x-class-extra-annotation}}}
41+
{{{.}}}
4242
{{/vendorExtensions.x-class-extra-annotation}}
4343
public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtensions.x-implements}}{{#-first}}implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{
4444
{{#serializableModel}}

modules/openapi-generator/src/main/resources/Java/libraries/restclient/pojo.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
{{/jackson}}
2828
{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{>xmlAnnotation}}
2929
{{#vendorExtensions.x-class-extra-annotation}}
30-
{{{vendorExtensions.x-class-extra-annotation}}}
30+
{{{.}}}
3131
{{/vendorExtensions.x-class-extra-annotation}}
3232
public {{>sealed}}class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtensions.x-implements}}{{#-first}}implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{{>permits}}{
3333
{{#serializableModel}}

modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/pojo.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
{{/jackson}}
2828
{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{>xmlAnnotation}}
2929
{{#vendorExtensions.x-class-extra-annotation}}
30-
{{{vendorExtensions.x-class-extra-annotation}}}
30+
{{{.}}}
3131
{{/vendorExtensions.x-class-extra-annotation}}
3232
public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtensions.x-implements}}{{#-first}}implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{
3333
{{#serializableModel}}

modules/openapi-generator/src/main/resources/Java/libraries/webclient/pojo.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
{{/jackson}}
2828
{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{>xmlAnnotation}}
2929
{{#vendorExtensions.x-class-extra-annotation}}
30-
{{{vendorExtensions.x-class-extra-annotation}}}
30+
{{{.}}}
3131
{{/vendorExtensions.x-class-extra-annotation}}
3232
public {{>sealed}}class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtensions.x-implements}}{{#-first}}implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{{>permits}}{
3333
{{#serializableModel}}

0 commit comments

Comments
 (0)