Skip to content

Commit cdfa7fe

Browse files
authored
Using Optional.ofNullable() at the fluent setters to prevent NPE (#20406)
* * Uses Optional.ofNullable() at the fluent setters to prevent NPE * Fixes issue #17538 * updates samples
1 parent 79f70dc commit cdfa7fe

Some content is hidden

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

48 files changed

+133
-132
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ public class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}}{{^parent}}
156156
{{! begin feature: fluent setter methods }}
157157
public {{classname}} {{name}}({{{datatypeWithEnum}}} {{name}}) {
158158
{{#openApiNullable}}
159-
this.{{name}} = {{#isNullable}}JsonNullable.of({{/isNullable}}{{#useOptional}}{{^required}}{{^isNullable}}{{^isContainer}}Optional.of({{/isContainer}}{{/isNullable}}{{/required}}{{/useOptional}}{{name}}{{#isNullable}}){{/isNullable}}{{#useOptional}}{{^required}}{{^isNullable}}{{^isContainer}}){{/isContainer}}{{/isNullable}}{{/required}}{{/useOptional}};
159+
this.{{name}} = {{#isNullable}}JsonNullable.of({{/isNullable}}{{#useOptional}}{{^required}}{{^isNullable}}{{^isContainer}}Optional.ofNullable({{/isContainer}}{{/isNullable}}{{/required}}{{/useOptional}}{{name}}{{#isNullable}}){{/isNullable}}{{#useOptional}}{{^required}}{{^isNullable}}{{^isContainer}}){{/isContainer}}{{/isNullable}}{{/required}}{{/useOptional}};
160160
{{/openApiNullable}}
161161
{{^openApiNullable}}
162162
this.{{name}} = {{name}};

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

+3-2
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ public void doAnnotateDatesOnModelParametersWithOptionalAndJsonNullable() throws
228228
.containsWithNameAndAttributes("DateTimeFormat", ImmutableMap.of("iso", "DateTimeFormat.ISO.DATE_TIME"))
229229
.toProperty().toType()
230230
.assertMethod("born", "LocalDate")
231-
.bodyContainsLines("this.born = Optional.of(born)")
231+
.bodyContainsLines("this.born = Optional.ofNullable(born)")
232232
.doesNotHaveComment();
233233
}
234234

@@ -4397,9 +4397,10 @@ private void assertJsonNullableMethod(JavaFileAssert javaFileAssert, String type
43974397

43984398
private void assertWrapperMethod(JavaFileAssert javaFileAssert, String wrapperType, String type, String expectedName, String getterReturnType){
43994399
String methodName = StringUtils.capitalize(expectedName);
4400+
var of = wrapperType.equals("Optional") ? "ofNullable" : "of";
44004401
javaFileAssert.assertMethod(expectedName)
44014402
.hasReturnType("Animal")
4402-
.bodyContainsLines("this."+expectedName+" = "+wrapperType+".of("+expectedName+");", "return this;")
4403+
.bodyContainsLines("this." + expectedName + " = "+wrapperType+ "." + of + "(" +expectedName+");", "return this;")
44034404
.assertParameter(expectedName)
44044405
.hasType(type)
44054406
.toMethod()

samples/openapi3/client/petstore/spring-cloud-3-with-optional/src/main/java/org/openapitools/model/Category.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public class Category {
2626
private Optional<@Pattern(regexp = "^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$") String> name = Optional.empty();
2727

2828
public Category id(Long id) {
29-
this.id = Optional.of(id);
29+
this.id = Optional.ofNullable(id);
3030
return this;
3131
}
3232

@@ -45,7 +45,7 @@ public void setId(Optional<Long> id) {
4545
}
4646

4747
public Category name(String name) {
48-
this.name = Optional.of(name);
48+
this.name = Optional.ofNullable(name);
4949
return this;
5050
}
5151

samples/openapi3/client/petstore/spring-cloud-3-with-optional/src/main/java/org/openapitools/model/ModelApiResponse.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class ModelApiResponse {
3030
private Optional<String> message = Optional.empty();
3131

3232
public ModelApiResponse code(Integer code) {
33-
this.code = Optional.of(code);
33+
this.code = Optional.ofNullable(code);
3434
return this;
3535
}
3636

@@ -49,7 +49,7 @@ public void setCode(Optional<Integer> code) {
4949
}
5050

5151
public ModelApiResponse type(String type) {
52-
this.type = Optional.of(type);
52+
this.type = Optional.ofNullable(type);
5353
return this;
5454
}
5555

@@ -68,7 +68,7 @@ public void setType(Optional<String> type) {
6868
}
6969

7070
public ModelApiResponse message(String message) {
71-
this.message = Optional.of(message);
71+
this.message = Optional.ofNullable(message);
7272
return this;
7373
}
7474

samples/openapi3/client/petstore/spring-cloud-3-with-optional/src/main/java/org/openapitools/model/Order.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public static StatusEnum fromValue(String value) {
7575
private Optional<Boolean> complete = Optional.of(false);
7676

7777
public Order id(Long id) {
78-
this.id = Optional.of(id);
78+
this.id = Optional.ofNullable(id);
7979
return this;
8080
}
8181

@@ -94,7 +94,7 @@ public void setId(Optional<Long> id) {
9494
}
9595

9696
public Order petId(Long petId) {
97-
this.petId = Optional.of(petId);
97+
this.petId = Optional.ofNullable(petId);
9898
return this;
9999
}
100100

@@ -113,7 +113,7 @@ public void setPetId(Optional<Long> petId) {
113113
}
114114

115115
public Order quantity(Integer quantity) {
116-
this.quantity = Optional.of(quantity);
116+
this.quantity = Optional.ofNullable(quantity);
117117
return this;
118118
}
119119

@@ -132,7 +132,7 @@ public void setQuantity(Optional<Integer> quantity) {
132132
}
133133

134134
public Order shipDate(OffsetDateTime shipDate) {
135-
this.shipDate = Optional.of(shipDate);
135+
this.shipDate = Optional.ofNullable(shipDate);
136136
return this;
137137
}
138138

@@ -151,7 +151,7 @@ public void setShipDate(Optional<OffsetDateTime> shipDate) {
151151
}
152152

153153
public Order status(StatusEnum status) {
154-
this.status = Optional.of(status);
154+
this.status = Optional.ofNullable(status);
155155
return this;
156156
}
157157

@@ -170,7 +170,7 @@ public void setStatus(Optional<StatusEnum> status) {
170170
}
171171

172172
public Order complete(Boolean complete) {
173-
this.complete = Optional.of(complete);
173+
this.complete = Optional.ofNullable(complete);
174174
return this;
175175
}
176176

samples/openapi3/client/petstore/spring-cloud-3-with-optional/src/main/java/org/openapitools/model/Pet.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public Pet(String name, List<String> photoUrls) {
9292
}
9393

9494
public Pet id(Long id) {
95-
this.id = Optional.of(id);
95+
this.id = Optional.ofNullable(id);
9696
return this;
9797
}
9898

@@ -111,7 +111,7 @@ public void setId(Optional<Long> id) {
111111
}
112112

113113
public Pet category(Category category) {
114-
this.category = Optional.of(category);
114+
this.category = Optional.ofNullable(category);
115115
return this;
116116
}
117117

@@ -203,7 +203,7 @@ public void setTags(List<@Valid Tag> tags) {
203203
}
204204

205205
public Pet status(StatusEnum status) {
206-
this.status = Optional.of(status);
206+
this.status = Optional.ofNullable(status);
207207
return this;
208208
}
209209

samples/openapi3/client/petstore/spring-cloud-3-with-optional/src/main/java/org/openapitools/model/Tag.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public class Tag {
2626
private Optional<String> name = Optional.empty();
2727

2828
public Tag id(Long id) {
29-
this.id = Optional.of(id);
29+
this.id = Optional.ofNullable(id);
3030
return this;
3131
}
3232

@@ -45,7 +45,7 @@ public void setId(Optional<Long> id) {
4545
}
4646

4747
public Tag name(String name) {
48-
this.name = Optional.of(name);
48+
this.name = Optional.ofNullable(name);
4949
return this;
5050
}
5151

samples/openapi3/client/petstore/spring-cloud-3-with-optional/src/main/java/org/openapitools/model/User.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public class User {
3838
private Optional<Integer> userStatus = Optional.empty();
3939

4040
public User id(Long id) {
41-
this.id = Optional.of(id);
41+
this.id = Optional.ofNullable(id);
4242
return this;
4343
}
4444

@@ -57,7 +57,7 @@ public void setId(Optional<Long> id) {
5757
}
5858

5959
public User username(String username) {
60-
this.username = Optional.of(username);
60+
this.username = Optional.ofNullable(username);
6161
return this;
6262
}
6363

@@ -76,7 +76,7 @@ public void setUsername(Optional<String> username) {
7676
}
7777

7878
public User firstName(String firstName) {
79-
this.firstName = Optional.of(firstName);
79+
this.firstName = Optional.ofNullable(firstName);
8080
return this;
8181
}
8282

@@ -95,7 +95,7 @@ public void setFirstName(Optional<String> firstName) {
9595
}
9696

9797
public User lastName(String lastName) {
98-
this.lastName = Optional.of(lastName);
98+
this.lastName = Optional.ofNullable(lastName);
9999
return this;
100100
}
101101

@@ -114,7 +114,7 @@ public void setLastName(Optional<String> lastName) {
114114
}
115115

116116
public User email(String email) {
117-
this.email = Optional.of(email);
117+
this.email = Optional.ofNullable(email);
118118
return this;
119119
}
120120

@@ -133,7 +133,7 @@ public void setEmail(Optional<String> email) {
133133
}
134134

135135
public User password(String password) {
136-
this.password = Optional.of(password);
136+
this.password = Optional.ofNullable(password);
137137
return this;
138138
}
139139

@@ -152,7 +152,7 @@ public void setPassword(Optional<String> password) {
152152
}
153153

154154
public User phone(String phone) {
155-
this.phone = Optional.of(phone);
155+
this.phone = Optional.ofNullable(phone);
156156
return this;
157157
}
158158

@@ -171,7 +171,7 @@ public void setPhone(Optional<String> phone) {
171171
}
172172

173173
public User userStatus(Integer userStatus) {
174-
this.userStatus = Optional.of(userStatus);
174+
this.userStatus = Optional.ofNullable(userStatus);
175175
return this;
176176
}
177177

samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class AdditionalPropertiesAnyType {
3030
private Optional<String> name = Optional.empty();
3131

3232
public AdditionalPropertiesAnyType name(String name) {
33-
this.name = Optional.of(name);
33+
this.name = Optional.ofNullable(name);
3434
return this;
3535
}
3636

samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class AdditionalPropertiesArray {
3131
private Optional<String> name = Optional.empty();
3232

3333
public AdditionalPropertiesArray name(String name) {
34-
this.name = Optional.of(name);
34+
this.name = Optional.ofNullable(name);
3535
return this;
3636
}
3737

samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class AdditionalPropertiesBoolean {
3030
private Optional<String> name = Optional.empty();
3131

3232
public AdditionalPropertiesBoolean name(String name) {
33-
this.name = Optional.of(name);
33+
this.name = Optional.ofNullable(name);
3434
return this;
3535
}
3636

samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ public void setMapMapAnytype(Map<String, Map<String, Object>> mapMapAnytype) {
285285
}
286286

287287
public AdditionalPropertiesClass anytype1(Object anytype1) {
288-
this.anytype1 = Optional.of(anytype1);
288+
this.anytype1 = Optional.ofNullable(anytype1);
289289
return this;
290290
}
291291

@@ -325,7 +325,7 @@ public void setAnytype2(JsonNullable<Object> anytype2) {
325325
}
326326

327327
public AdditionalPropertiesClass anytype3(Object anytype3) {
328-
this.anytype3 = Optional.of(anytype3);
328+
this.anytype3 = Optional.ofNullable(anytype3);
329329
return this;
330330
}
331331

samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class AdditionalPropertiesInteger {
3030
private Optional<String> name = Optional.empty();
3131

3232
public AdditionalPropertiesInteger name(String name) {
33-
this.name = Optional.of(name);
33+
this.name = Optional.ofNullable(name);
3434
return this;
3535
}
3636

samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class AdditionalPropertiesNumber {
3131
private Optional<String> name = Optional.empty();
3232

3333
public AdditionalPropertiesNumber name(String name) {
34-
this.name = Optional.of(name);
34+
this.name = Optional.ofNullable(name);
3535
return this;
3636
}
3737

samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class AdditionalPropertiesObject {
3131
private Optional<String> name = Optional.empty();
3232

3333
public AdditionalPropertiesObject name(String name) {
34-
this.name = Optional.of(name);
34+
this.name = Optional.ofNullable(name);
3535
return this;
3636
}
3737

samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesString.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class AdditionalPropertiesString {
3030
private Optional<String> name = Optional.empty();
3131

3232
public AdditionalPropertiesString name(String name) {
33-
this.name = Optional.of(name);
33+
this.name = Optional.ofNullable(name);
3434
return this;
3535
}
3636

samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Animal.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public void setClassName(String className) {
7373
}
7474

7575
public Animal color(String color) {
76-
this.color = Optional.of(color);
76+
this.color = Optional.ofNullable(color);
7777
return this;
7878
}
7979

samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/BigCat.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public BigCat(String className) {
8282
}
8383

8484
public BigCat kind(KindEnum kind) {
85-
this.kind = Optional.of(kind);
85+
this.kind = Optional.ofNullable(kind);
8686
return this;
8787
}
8888

samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Capitalization.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class Capitalization {
3636
private Optional<String> ATT_NAME = Optional.empty();
3737

3838
public Capitalization smallCamel(String smallCamel) {
39-
this.smallCamel = Optional.of(smallCamel);
39+
this.smallCamel = Optional.ofNullable(smallCamel);
4040
return this;
4141
}
4242

@@ -56,7 +56,7 @@ public void setSmallCamel(Optional<String> smallCamel) {
5656
}
5757

5858
public Capitalization capitalCamel(String capitalCamel) {
59-
this.capitalCamel = Optional.of(capitalCamel);
59+
this.capitalCamel = Optional.ofNullable(capitalCamel);
6060
return this;
6161
}
6262

@@ -76,7 +76,7 @@ public void setCapitalCamel(Optional<String> capitalCamel) {
7676
}
7777

7878
public Capitalization smallSnake(String smallSnake) {
79-
this.smallSnake = Optional.of(smallSnake);
79+
this.smallSnake = Optional.ofNullable(smallSnake);
8080
return this;
8181
}
8282

@@ -96,7 +96,7 @@ public void setSmallSnake(Optional<String> smallSnake) {
9696
}
9797

9898
public Capitalization capitalSnake(String capitalSnake) {
99-
this.capitalSnake = Optional.of(capitalSnake);
99+
this.capitalSnake = Optional.ofNullable(capitalSnake);
100100
return this;
101101
}
102102

@@ -116,7 +116,7 @@ public void setCapitalSnake(Optional<String> capitalSnake) {
116116
}
117117

118118
public Capitalization scAETHFlowPoints(String scAETHFlowPoints) {
119-
this.scAETHFlowPoints = Optional.of(scAETHFlowPoints);
119+
this.scAETHFlowPoints = Optional.ofNullable(scAETHFlowPoints);
120120
return this;
121121
}
122122

@@ -136,7 +136,7 @@ public void setScAETHFlowPoints(Optional<String> scAETHFlowPoints) {
136136
}
137137

138138
public Capitalization ATT_NAME(String ATT_NAME) {
139-
this.ATT_NAME = Optional.of(ATT_NAME);
139+
this.ATT_NAME = Optional.ofNullable(ATT_NAME);
140140
return this;
141141
}
142142

0 commit comments

Comments
 (0)