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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 3 additions & 2 deletions
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

Lines changed: 2 additions & 2 deletions
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

Lines changed: 3 additions & 3 deletions
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

Lines changed: 6 additions & 6 deletions
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

Lines changed: 3 additions & 3 deletions
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

Lines changed: 2 additions & 2 deletions
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

Lines changed: 8 additions & 8 deletions
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

0 commit comments

Comments
 (0)