From b332920b17719a3e812864a6d22495807fe7fdac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Thu, 26 Dec 2024 19:14:04 +0100 Subject: [PATCH] Refine null-safety in the spring-webflux module Closes gh-34163 --- .../web/reactive/config/ResourceChainRegistration.java | 2 +- .../reactive/function/server/DefaultServerResponseBuilder.java | 2 +- .../web/reactive/resource/ResourceWebHandler.java | 3 +-- .../reactive/result/method/AbstractHandlerMethodMapping.java | 2 +- .../result/method/annotation/ControllerMethodResolver.java | 2 +- .../socket/adapter/StandardWebSocketHandlerAdapter.java | 2 +- .../socket/server/support/HandshakeWebSocketService.java | 2 +- 7 files changed, 7 insertions(+), 8 deletions(-) diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/config/ResourceChainRegistration.java b/spring-webflux/src/main/java/org/springframework/web/reactive/config/ResourceChainRegistration.java index b152d5fe0b..c82d6063d2 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/config/ResourceChainRegistration.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/config/ResourceChainRegistration.java @@ -65,7 +65,7 @@ public class ResourceChainRegistration { this(cacheResources, cacheResources ? new ConcurrentMapCache(DEFAULT_CACHE_NAME) : null); } - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Dataflow analysis limitation public ResourceChainRegistration(boolean cacheResources, @Nullable Cache cache) { Assert.isTrue(!cacheResources || cache != null, "'cache' is required when cacheResources=true"); if (cacheResources) { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java index e732ec0e57..d62d088257 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java @@ -91,7 +91,7 @@ class DefaultServerResponseBuilder implements ServerResponse.BodyBuilder { @Override - @SuppressWarnings("NullAway") // TODO NullAway bug potentially due to the recursive generic type + @SuppressWarnings("NullAway") // https://github.com/uber/NullAway/issues/1113 public ServerResponse.BodyBuilder header(String headerName, @Nullable String... headerValues) { Assert.notNull(headerName, "HeaderName must not be null"); for (String headerValue : headerValues) { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/resource/ResourceWebHandler.java b/spring-webflux/src/main/java/org/springframework/web/reactive/resource/ResourceWebHandler.java index 9ca35449c5..f06666c067 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/resource/ResourceWebHandler.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/resource/ResourceWebHandler.java @@ -323,7 +323,6 @@ public class ResourceWebHandler implements WebHandler, InitializingBean { * @param mediaTypes media type mappings * @since 5.3.2 */ - @SuppressWarnings("NullAway") public void setMediaTypes(Map mediaTypes) { if (this.mediaTypes == null) { this.mediaTypes = new HashMap<>(mediaTypes.size()); @@ -474,7 +473,7 @@ public class ResourceWebHandler implements WebHandler, InitializingBean { }); } - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Lambda protected Mono getResource(ServerWebExchange exchange) { String rawPath = getResourcePath(exchange); String path = processPath(rawPath); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/AbstractHandlerMethodMapping.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/AbstractHandlerMethodMapping.java index eb1c5fb053..defbf823c0 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/AbstractHandlerMethodMapping.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/AbstractHandlerMethodMapping.java @@ -359,7 +359,7 @@ public abstract class AbstractHandlerMethodMapping extends AbstractHandlerMap } } - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Dataflow analysis limitation private void addMatchingMappings(Collection mappings, List matches, ServerWebExchange exchange) { for (T mapping : mappings) { T match = getMatchingMapping(mapping, exchange); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ControllerMethodResolver.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ControllerMethodResolver.java index 58698d4be0..e5f257385c 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ControllerMethodResolver.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ControllerMethodResolver.java @@ -408,7 +408,7 @@ class ControllerMethodResolver { * @param handlerMethod the controller method that raised the exception, * or if {@code null}, check only {@code @ControllerAdvice} classes. */ - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Dataflow analysis limitation public @Nullable InvocableHandlerMethod getExceptionHandlerMethod(Throwable ex, ServerWebExchange exchange, @Nullable HandlerMethod handlerMethod) { Class handlerType = (handlerMethod != null ? handlerMethod.getBeanType() : null); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/StandardWebSocketHandlerAdapter.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/StandardWebSocketHandlerAdapter.java index b578f6df39..468e78e67e 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/StandardWebSocketHandlerAdapter.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/StandardWebSocketHandlerAdapter.java @@ -64,7 +64,7 @@ public class StandardWebSocketHandlerAdapter extends Endpoint { @Override - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Lambda public void onOpen(Session session, EndpointConfig config) { this.delegateSession = this.sessionFactory.apply(session); Assert.state(this.delegateSession != null, "No delegate session"); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketService.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketService.java index 072a006a68..86081e5f25 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketService.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketService.java @@ -241,7 +241,7 @@ public class HandshakeWebSocketService implements WebSocketService, Lifecycle { return null; } - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Lambda private Mono> initAttributes(ServerWebExchange exchange) { if (this.sessionAttributePredicate == null) { return EMPTY_ATTRIBUTES;