Skip to content

Commit 8a57997

Browse files
committed
Avoid use of Objects.requireNonNull plus related polishing
1 parent 0be610b commit 8a57997

File tree

1 file changed

+27
-59
lines changed

1 file changed

+27
-59
lines changed

spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilder.java

Lines changed: 27 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import java.util.Arrays;
2525
import java.util.LinkedHashSet;
2626
import java.util.List;
27-
import java.util.Objects;
2827
import java.util.Set;
2928
import java.util.concurrent.CompletionStage;
3029
import java.util.function.Consumer;
@@ -67,7 +66,9 @@
6766
*/
6867
final class DefaultEntityResponseBuilder<T> implements EntityResponse.Builder<T> {
6968

70-
private static final boolean reactiveStreamsPresent;
69+
private static final boolean reactiveStreamsPresent = ClassUtils.isPresent(
70+
"org.reactivestreams.Publisher", DefaultEntityResponseBuilder.class.getClassLoader());
71+
7172

7273
private final T entity;
7374

@@ -79,11 +80,6 @@ final class DefaultEntityResponseBuilder<T> implements EntityResponse.Builder<T>
7980

8081
private final MultiValueMap<String, Cookie> cookies = new LinkedMultiValueMap<>();
8182

82-
static {
83-
ClassLoader classLoader = DefaultEntityResponseBuilder.class.getClassLoader();
84-
reactiveStreamsPresent = ClassUtils.isPresent("org.reactivestreams.Publisher", classLoader);
85-
}
86-
8783

8884
private DefaultEntityResponseBuilder(T entity, @Nullable Type entityType) {
8985
this.entity = entity;
@@ -205,15 +201,12 @@ public EntityResponse<T> build() {
205201
return new CompletionStageEntityResponse(this.status, this.headers, this.cookies,
206202
completionStage, this.entityType);
207203
}
208-
else if (reactiveStreamsPresent &&
209-
PublisherEntityResponse.isPublisher(this.entity)) {
204+
else if (reactiveStreamsPresent && PublisherEntityResponse.isPublisher(this.entity)) {
210205
Publisher publisher = (Publisher) this.entity;
211-
return new PublisherEntityResponse(this.status, this.headers, this.cookies, publisher,
212-
this.entityType);
206+
return new PublisherEntityResponse(this.status, this.headers, this.cookies, publisher, this.entityType);
213207
}
214208
else {
215-
return new DefaultEntityResponse<>(this.status, this.headers, this.cookies, this.entity,
216-
this.entityType);
209+
return new DefaultEntityResponse<>(this.status, this.headers, this.cookies, this.entity, this.entityType);
217210
}
218211
}
219212

@@ -232,18 +225,17 @@ public static <T> EntityResponse.Builder<T> fromObject(T t, ParameterizedTypeRef
232225
return new DefaultEntityResponseBuilder<>(t, bodyType.getType());
233226
}
234227

228+
235229
/**
236230
* Default {@link EntityResponse} implementation for synchronous bodies.
237231
*/
238-
private static class DefaultEntityResponse<T>
239-
extends DefaultServerResponseBuilder.AbstractServerResponse
232+
private static class DefaultEntityResponse<T> extends DefaultServerResponseBuilder.AbstractServerResponse
240233
implements EntityResponse<T> {
241234

242235
private final T entity;
243236

244237
private final Type entityType;
245238

246-
247239
public DefaultEntityResponse(int statusCode, HttpHeaders headers,
248240
MultiValueMap<String, Cookie> cookies, T entity, Type entityType) {
249241

@@ -263,18 +255,15 @@ protected ModelAndView writeToInternal(HttpServletRequest servletRequest,
263255
throws ServletException, IOException {
264256

265257
writeEntityWithMessageConverters(this.entity, servletRequest,servletResponse, context);
266-
267258
return null;
268259
}
269260

270261
@SuppressWarnings("unchecked")
271-
protected void writeEntityWithMessageConverters(Object entity,
272-
HttpServletRequest request, HttpServletResponse response,
273-
ServerResponse.Context context)
262+
protected void writeEntityWithMessageConverters(Object entity, HttpServletRequest request,
263+
HttpServletResponse response, ServerResponse.Context context)
274264
throws ServletException, IOException {
275265

276266
ServletServerHttpResponse serverResponse = new ServletServerHttpResponse(response);
277-
278267
MediaType contentType = getContentType(response);
279268
Class<?> entityClass = entity.getClass();
280269

@@ -307,9 +296,8 @@ private static MediaType getContentType(HttpServletResponse response) {
307296
}
308297
}
309298

310-
protected void tryWriteEntityWithMessageConverters(Object entity,
311-
HttpServletRequest request, HttpServletResponse response,
312-
ServerResponse.Context context) {
299+
protected void tryWriteEntityWithMessageConverters(Object entity, HttpServletRequest request,
300+
HttpServletResponse response, ServerResponse.Context context) {
313301
try {
314302
writeEntityWithMessageConverters(entity, request, response, context);
315303
}
@@ -334,12 +322,11 @@ private static List<MediaType> producibleMediaTypes(
334322
/**
335323
* {@link EntityResponse} implementation for asynchronous {@link CompletionStage} bodies.
336324
*/
337-
private static class CompletionStageEntityResponse<T>
338-
extends DefaultEntityResponse<CompletionStage<T>> {
325+
private static class CompletionStageEntityResponse<T> extends DefaultEntityResponse<CompletionStage<T>> {
339326

340327
public CompletionStageEntityResponse(int statusCode, HttpHeaders headers,
341-
MultiValueMap<String, Cookie> cookies, CompletionStage<T> entity,
342-
Type entityType) {
328+
MultiValueMap<String, Cookie> cookies, CompletionStage<T> entity, Type entityType) {
329+
343330
super(statusCode, headers, cookies, entity, entityType);
344331
}
345332

@@ -348,7 +335,6 @@ protected ModelAndView writeToInternal(HttpServletRequest servletRequest,
348335
HttpServletResponse servletResponse, Context context) {
349336

350337
AsyncContext asyncContext = servletRequest.startAsync(servletRequest, servletResponse);
351-
352338
entity().whenComplete((entity, throwable) -> {
353339
try {
354340
if (entity != null) {
@@ -370,11 +356,12 @@ else if (throwable != null) {
370356
}
371357
}
372358

359+
373360
private static class PublisherEntityResponse<T> extends DefaultEntityResponse<Publisher<T>> {
374361

375362
public PublisherEntityResponse(int statusCode, HttpHeaders headers,
376-
MultiValueMap<String, Cookie> cookies, Publisher<T> entity,
377-
Type entityType) {
363+
MultiValueMap<String, Cookie> cookies, Publisher<T> entity, Type entityType) {
364+
378365
super(statusCode, headers, cookies, entity, entityType);
379366
}
380367

@@ -384,14 +371,12 @@ protected ModelAndView writeToInternal(HttpServletRequest servletRequest,
384371

385372
AsyncContext asyncContext = servletRequest.startAsync(servletRequest,
386373
new NoContentLengthResponseWrapper(servletResponse));
387-
388374
entity().subscribe(new ProducingSubscriber(asyncContext, context));
389-
390375
return null;
391376
}
392377

393-
public static boolean isPublisher(Object o) {
394-
return (o instanceof Publisher);
378+
public static boolean isPublisher(Object entity) {
379+
return (entity instanceof Publisher);
395380
}
396381

397382

@@ -405,16 +390,13 @@ private class ProducingSubscriber implements Subscriber<T> {
405390
@Nullable
406391
private Subscription subscription;
407392

408-
public ProducingSubscriber(AsyncContext asyncContext,
409-
Context context) {
393+
public ProducingSubscriber(AsyncContext asyncContext, Context context) {
410394
this.asyncContext = asyncContext;
411395
this.context = context;
412396
}
413397

414398
@Override
415399
public void onSubscribe(Subscription s) {
416-
Objects.requireNonNull(s);
417-
418400
if (this.subscription == null) {
419401
this.subscription = s;
420402
this.subscription.request(Long.MAX_VALUE);
@@ -426,37 +408,25 @@ public void onSubscribe(Subscription s) {
426408

427409
@Override
428410
public void onNext(T element) {
429-
Objects.requireNonNull(element);
430-
HttpServletRequest servletRequest =
431-
(HttpServletRequest) this.asyncContext.getRequest();
432-
HttpServletResponse servletResponse =
433-
(HttpServletResponse) this.asyncContext.getResponse();
434-
435-
tryWriteEntityWithMessageConverters(element,
436-
servletRequest,
437-
servletResponse,
438-
this.context);
411+
HttpServletRequest servletRequest = (HttpServletRequest) this.asyncContext.getRequest();
412+
HttpServletResponse servletResponse = (HttpServletResponse) this.asyncContext.getResponse();
413+
tryWriteEntityWithMessageConverters(element, servletRequest, servletResponse, this.context);
439414
}
440415

441416
@Override
442417
public void onError(Throwable t) {
443-
Objects.requireNonNull(t);
444-
445-
handleError(t,
446-
(HttpServletRequest) this.asyncContext.getRequest(),
447-
(HttpServletResponse) this.asyncContext.getResponse(),
448-
this.context);
449-
418+
handleError(t, (HttpServletRequest) this.asyncContext.getRequest(),
419+
(HttpServletResponse) this.asyncContext.getResponse(), this.context);
450420
this.asyncContext.complete();
451421
}
452422

453423
@Override
454424
public void onComplete() {
455425
this.asyncContext.complete();
456426
}
457-
458427
}
459428

429+
460430
private static class NoContentLengthResponseWrapper extends HttpServletResponseWrapper {
461431

462432
public NoContentLengthResponseWrapper(HttpServletResponse response) {
@@ -485,8 +455,6 @@ public void setContentLength(int len) {
485455
public void setContentLengthLong(long len) {
486456
}
487457
}
488-
489458
}
490459

491-
492460
}

0 commit comments

Comments
 (0)