Skip to content

Commit eb96380

Browse files
authored
[Java] Remove bean validation annotations on builder (#19580)
* Revert #18724 Make JAX-RS spec BuilderImpl class final again * Remove bean validation annotations from builder * Also update other java generators * Introduce removeAnnotations lambda * Undo import changes to JavaHelidonClientCodegen * Add javadoc comment, examples and test for AbstractJavaCodegen.removeAnnotations()
1 parent 00c76de commit eb96380

File tree

167 files changed

+233
-208
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

167 files changed

+233
-208
lines changed

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

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,9 @@ public void processOpts() {
657657
}
658658
writer.write(content);
659659
});
660+
additionalProperties.put("removeAnnotations", (Mustache.Lambda) (fragment, writer) -> {
661+
writer.write(removeAnnotations(fragment.execute()));
662+
});
660663
}
661664

662665
/**
@@ -1802,18 +1805,30 @@ public void postProcessResponseWithProperty(CodegenResponse response, CodegenPro
18021805
return;
18031806
}
18041807

1805-
// the response data types should not contain a bean validation annotation.
1806-
if (property.dataType.contains("@")) {
1807-
property.dataType = removeAnnotations(property.dataType);
1808-
}
1809-
// the response data types should not contain a bean validation annotation.
1810-
if (response.dataType.contains("@")) {
1811-
response.dataType = removeAnnotations(response.dataType);
1812-
}
1808+
// the response data types should not contain bean validation annotations.
1809+
property.dataType = removeAnnotations(property.dataType);
1810+
response.dataType = removeAnnotations(response.dataType);
18131811
}
18141812

1815-
private String removeAnnotations(String type) {
1816-
return type.replaceAll("(?:(?i)@[a-z0-9]*+([(].*[)]|\\s*))*+", "");
1813+
/**
1814+
* Remove annotations from the given data type string.
1815+
*
1816+
* For example:
1817+
* <ul>
1818+
* <li>{@code @Min(0) @Max(10)Integer} -> {@code Integer}</li>
1819+
* <li>{@code @Pattern(regexp = "^[a-z]$")String>} -> {@code String}</li>
1820+
* <li>{@code List<@Pattern(regexp = "^[a-z]$")String>}" -> "{@code List<String>}"</li>
1821+
* <li>{@code List<@Valid Pet>}" -> "{@code List<Pet>}"</li>
1822+
* </ul>
1823+
*
1824+
* @param dataType the data type string
1825+
* @return the data type string without annotations
1826+
*/
1827+
public String removeAnnotations(String dataType) {
1828+
if (dataType != null && dataType.contains("@")) {
1829+
return dataType.replaceAll("(?:(?i)@[a-z0-9]*+([(].*[)]|\\s*))*+", "");
1830+
}
1831+
return dataType;
18171832
}
18181833

18191834
@Override

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,30 +14,30 @@ public static class Builder {{#parentModel}}extends {{classname}}.Builder {{/par
1414
}
1515

1616
{{#vars}}
17-
public {{classname}}.Builder {{name}}({{{datatypeWithEnum}}} {{name}}) {
17+
public {{classname}}.Builder {{name}}({{#removeAnnotations}}{{{datatypeWithEnum}}}{{/removeAnnotations}} {{name}}) {
1818
{{#vendorExtensions.x-is-jackson-optional-nullable}}
19-
this.instance.{{name}} = JsonNullable.<{{{datatypeWithEnum}}}>of({{name}});
19+
this.instance.{{name}} = JsonNullable.<{{#removeAnnotations}}{{{datatypeWithEnum}}}{{/removeAnnotations}}>of({{name}});
2020
{{/vendorExtensions.x-is-jackson-optional-nullable}}
2121
{{^vendorExtensions.x-is-jackson-optional-nullable}}
2222
this.instance.{{name}} = {{name}};
2323
{{/vendorExtensions.x-is-jackson-optional-nullable}}
2424
return this;
2525
}
2626
{{#vendorExtensions.x-is-jackson-optional-nullable}}
27-
public {{classname}}.Builder {{name}}(JsonNullable<{{{datatypeWithEnum}}}> {{name}}) {
27+
public {{classname}}.Builder {{name}}(JsonNullable<{{#removeAnnotations}}{{{datatypeWithEnum}}}{{/removeAnnotations}}> {{name}}) {
2828
this.instance.{{name}} = {{name}};
2929
return this;
3030
}
3131
{{/vendorExtensions.x-is-jackson-optional-nullable}}
3232
{{/vars}}
3333

3434
{{#parentVars}}
35-
public {{classname}}.Builder {{name}}({{{datatypeWithEnum}}} {{name}}) { // inherited: {{isInherited}}
35+
public {{classname}}.Builder {{name}}({{#removeAnnotations}}{{{datatypeWithEnum}}}{{/removeAnnotations}} {{name}}) { // inherited: {{isInherited}}
3636
super.{{name}}({{name}});
3737
return this;
3838
}
3939
{{#vendorExtensions.x-is-jackson-optional-nullable}}
40-
public {{classname}}.Builder {{name}}(JsonNullable<{{{datatypeWithEnum}}}> {{name}}) {
40+
public {{classname}}.Builder {{name}}(JsonNullable<{{#removeAnnotations}}{{{datatypeWithEnum}}}{{/removeAnnotations}}> {{name}}) {
4141
this.instance.{{name}} = {{name}};
4242
return this;
4343
}

modules/openapi-generator/src/main/resources/JavaJaxRS/spec/pojo.mustache

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ public class {{classname}} {{#parent}}extends {{{.}}}{{/parent}} {{#vendorExtens
188188
return new {{classname}}BuilderImpl();
189189
}
190190

191-
private static class {{classname}}BuilderImpl extends {{classname}}Builder<{{classname}}, {{classname}}BuilderImpl> {
191+
private static final class {{classname}}BuilderImpl extends {{classname}}Builder<{{classname}}, {{classname}}BuilderImpl> {
192192
193193
@Override
194194
protected {{classname}}BuilderImpl self() {
@@ -203,7 +203,7 @@ public class {{classname}} {{#parent}}extends {{{.}}}{{/parent}} {{#vendorExtens
203203

204204
public static abstract class {{classname}}Builder<C extends {{classname}}, B extends {{classname}}Builder<C, B>> {{#parent}}extends {{{.}}}Builder<C, B>{{/parent}} {
205205
{{#vars}}
206-
private {{{datatypeWithEnum}}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}};
206+
private {{#removeAnnotations}}{{{datatypeWithEnum}}}{{/removeAnnotations}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}};
207207
{{/vars}}
208208
{{^parent}}
209209
protected abstract B self();
@@ -212,7 +212,7 @@ public class {{classname}} {{#parent}}extends {{{.}}}{{/parent}} {{#vendorExtens
212212
{{/parent}}
213213

214214
{{#vars}}
215-
public B {{name}}({{{datatypeWithEnum}}} {{name}}) {
215+
public B {{name}}({{#removeAnnotations}}{{{datatypeWithEnum}}}{{/removeAnnotations}} {{name}}) {
216216
this.{{name}} = {{name}};
217217
return self();
218218
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,25 +24,25 @@
2424
{{#deprecated}}
2525
@Deprecated
2626
{{/deprecated}}
27-
public {{classname}}.Builder {{name}}({{{datatypeWithEnum}}} {{name}}) {
27+
public {{classname}}.Builder {{name}}({{#removeAnnotations}}{{{datatypeWithEnum}}}{{/removeAnnotations}} {{name}}) {
2828
this.instance.{{name}}({{name}});
2929
return this;
3030
}
3131
{{#openApiNullable}}{{#isNullable}}
32-
public {{classname}}.Builder {{name}}(JsonNullable<{{{datatypeWithEnum}}}> {{name}}) {
32+
public {{classname}}.Builder {{name}}(JsonNullable<{{#removeAnnotations}}{{{datatypeWithEnum}}}{{/removeAnnotations}}> {{name}}) {
3333
this.instance.{{name}} = {{name}};
3434
return this;
3535
}
3636
{{/isNullable}}{{/openApiNullable}}
3737
{{/vars}}
3838
{{#parentVars}}
3939
@Override
40-
public {{classname}}.Builder {{name}}({{{datatypeWithEnum}}} {{name}}) {
40+
public {{classname}}.Builder {{name}}({{#removeAnnotations}}{{{datatypeWithEnum}}}{{/removeAnnotations}} {{name}}) {
4141
this.instance.{{name}}({{name}});
4242
return this;
4343
}
4444
{{#openApiNullable}}{{#isNullable}}
45-
public {{classname}}.Builder {{name}}(JsonNullable<{{{datatypeWithEnum}}}> {{name}}) {
45+
public {{classname}}.Builder {{name}}(JsonNullable<{{#removeAnnotations}}{{{datatypeWithEnum}}}{{/removeAnnotations}}> {{name}}) {
4646
this.instance.{{setter}}({{name}});
4747
return this;
4848
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -955,4 +955,14 @@ public void AnnotationsContainerTest() {
955955
defaultValue = codegen.getTypeDeclaration(schema);
956956
Assert.assertEquals(defaultValue, "List<@Max(10)Integer>");
957957
}
958+
959+
@Test
960+
public void removeAnnotationsTest() {
961+
Assert.assertEquals(codegen.removeAnnotations("@Min(0) @Max(10)Integer"), "Integer");
962+
Assert.assertEquals(codegen.removeAnnotations("@Pattern(regexp = \"^[a-z]$\")String"), "String");
963+
Assert.assertEquals(codegen.removeAnnotations("List<@Min(0) @Max(10)Integer>"), "List<Integer>");
964+
Assert.assertEquals(codegen.removeAnnotations("List<@Pattern(regexp = \"^[a-z]$\")String>"), "List<String>");
965+
Assert.assertEquals(codegen.removeAnnotations("List<@Valid Pet>"), "List<Pet>");
966+
}
967+
958968
}

samples/openapi3/server/petstore/springboot-3/src/main/java/org/openapitools/model/Pet.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ public Pet.Builder photoUrls(List<String> photoUrls) {
359359
return this;
360360
}
361361

362-
public Pet.Builder tags(List<@Valid Tag> tags) {
362+
public Pet.Builder tags(List<Tag> tags) {
363363
this.instance.tags(tags);
364364
return this;
365365
}

samples/server/petstore/jaxrs-spec-jakarta/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ private String toIndentedString(Object o) {
452452
return new AdditionalPropertiesClassBuilderImpl();
453453
}
454454

455-
private static class AdditionalPropertiesClassBuilderImpl extends AdditionalPropertiesClassBuilder<AdditionalPropertiesClass, AdditionalPropertiesClassBuilderImpl> {
455+
private static final class AdditionalPropertiesClassBuilderImpl extends AdditionalPropertiesClassBuilder<AdditionalPropertiesClass, AdditionalPropertiesClassBuilderImpl> {
456456

457457
@Override
458458
protected AdditionalPropertiesClassBuilderImpl self() {

samples/server/petstore/jaxrs-spec-jakarta/src/gen/java/org/openapitools/model/Animal.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ private String toIndentedString(Object o) {
129129
return new AnimalBuilderImpl();
130130
}
131131

132-
private static class AnimalBuilderImpl extends AnimalBuilder<Animal, AnimalBuilderImpl> {
132+
private static final class AnimalBuilderImpl extends AnimalBuilder<Animal, AnimalBuilderImpl> {
133133

134134
@Override
135135
protected AnimalBuilderImpl self() {

samples/server/petstore/jaxrs-spec-jakarta/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ private String toIndentedString(Object o) {
110110
return new ArrayOfArrayOfNumberOnlyBuilderImpl();
111111
}
112112

113-
private static class ArrayOfArrayOfNumberOnlyBuilderImpl extends ArrayOfArrayOfNumberOnlyBuilder<ArrayOfArrayOfNumberOnly, ArrayOfArrayOfNumberOnlyBuilderImpl> {
113+
private static final class ArrayOfArrayOfNumberOnlyBuilderImpl extends ArrayOfArrayOfNumberOnlyBuilder<ArrayOfArrayOfNumberOnly, ArrayOfArrayOfNumberOnlyBuilderImpl> {
114114

115115
@Override
116116
protected ArrayOfArrayOfNumberOnlyBuilderImpl self() {

samples/server/petstore/jaxrs-spec-jakarta/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ private String toIndentedString(Object o) {
110110
return new ArrayOfNumberOnlyBuilderImpl();
111111
}
112112

113-
private static class ArrayOfNumberOnlyBuilderImpl extends ArrayOfNumberOnlyBuilder<ArrayOfNumberOnly, ArrayOfNumberOnlyBuilderImpl> {
113+
private static final class ArrayOfNumberOnlyBuilderImpl extends ArrayOfNumberOnlyBuilder<ArrayOfNumberOnly, ArrayOfNumberOnlyBuilderImpl> {
114114

115115
@Override
116116
protected ArrayOfNumberOnlyBuilderImpl self() {

0 commit comments

Comments
 (0)