From 5fba926ab63f977c8b6b3d411dc3a7077784e1c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Thu, 26 Dec 2024 18:50:17 +0100 Subject: [PATCH] Refine null-safety in the spring-web module Closes gh-34162 --- .../http/client/AbstractStreamingClientHttpRequest.java | 2 +- .../springframework/http/client/JdkClientHttpRequest.java | 4 ++-- .../http/client/JettyClientHttpRequest.java | 4 ++-- .../http/codec/ServerSentEventHttpMessageReader.java | 2 +- .../http/codec/multipart/MultipartParser.java | 3 ++- .../http/codec/multipart/PartGenerator.java | 2 +- .../converter/ResourceRegionHttpMessageConverter.java | 2 +- .../server/reactive/AbstractListenerReadPublisher.java | 2 +- .../reactive/AbstractListenerWriteFlushProcessor.java | 2 +- .../server/reactive/AbstractListenerWriteProcessor.java | 2 +- .../http/server/reactive/ServletServerHttpRequest.java | 2 +- .../http/server/reactive/WriteResultPublisher.java | 2 +- .../web/client/DefaultResponseErrorHandler.java | 2 +- .../request/async/StandardServletAsyncWebRequest.java | 6 +++--- .../web/context/request/async/WebAsyncManager.java | 4 ++-- .../support/ServletContextResourcePatternResolver.java | 2 +- .../org/springframework/web/cors/CorsConfiguration.java | 4 ++-- .../support/AbstractMultipartHttpServletRequest.java | 4 ++-- .../support/DefaultMultipartHttpServletRequest.java | 8 ++++---- .../support/StandardMultipartHttpServletRequest.java | 5 ++--- .../web/server/adapter/HttpWebHandlerAdapter.java | 4 ++-- .../web/server/session/InMemoryWebSessionStore.java | 8 ++++---- .../web/service/invoker/HttpServiceMethod.java | 2 +- 23 files changed, 39 insertions(+), 39 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/client/AbstractStreamingClientHttpRequest.java b/spring-web/src/main/java/org/springframework/http/client/AbstractStreamingClientHttpRequest.java index a280401fd0..cb20b27106 100644 --- a/spring-web/src/main/java/org/springframework/http/client/AbstractStreamingClientHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/client/AbstractStreamingClientHttpRequest.java @@ -62,7 +62,7 @@ abstract class AbstractStreamingClientHttpRequest extends AbstractClientHttpRequ } @Override - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Lambda protected final ClientHttpResponse executeInternal(HttpHeaders headers) throws IOException { if (this.body == null && this.bodyStream != null) { this.body = outputStream -> this.bodyStream.writeTo(outputStream); diff --git a/spring-web/src/main/java/org/springframework/http/client/JdkClientHttpRequest.java b/spring-web/src/main/java/org/springframework/http/client/JdkClientHttpRequest.java index 99c7f2ae34..060bef8dde 100644 --- a/spring-web/src/main/java/org/springframework/http/client/JdkClientHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/client/JdkClientHttpRequest.java @@ -94,7 +94,6 @@ class JdkClientHttpRequest extends AbstractStreamingClientHttpRequest { @Override - @SuppressWarnings("NullAway") protected ClientHttpResponse executeInternal(HttpHeaders headers, @Nullable Body body) throws IOException { CompletableFuture> responseFuture = null; try { @@ -133,7 +132,8 @@ class JdkClientHttpRequest extends AbstractStreamingClientHttpRequest { throw ioEx; } else { - throw new IOException(cause.getMessage(), cause); + String message = (cause == null ? null : cause.getMessage()); + throw (message == null ? new IOException(cause) : new IOException(message, cause)); } } } diff --git a/spring-web/src/main/java/org/springframework/http/client/JettyClientHttpRequest.java b/spring-web/src/main/java/org/springframework/http/client/JettyClientHttpRequest.java index cd4d3f5ccd..0507cf50a3 100644 --- a/spring-web/src/main/java/org/springframework/http/client/JettyClientHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/client/JettyClientHttpRequest.java @@ -69,7 +69,6 @@ class JettyClientHttpRequest extends AbstractStreamingClientHttpRequest { } @Override - @SuppressWarnings("NullAway") protected ClientHttpResponse executeInternal(HttpHeaders headers, @Nullable Body body) throws IOException { if (!headers.isEmpty()) { this.request.headers(httpFields -> { @@ -118,7 +117,8 @@ class JettyClientHttpRequest extends AbstractStreamingClientHttpRequest { throw ioEx; } else { - throw new IOException(cause.getMessage(), cause); + String message = (cause == null ? null : cause.getMessage()); + throw (message == null ? new IOException(cause) : new IOException(message, cause)); } } catch (TimeoutException ex) { diff --git a/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java b/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java index e6c5f1d7a4..47146b7b7b 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java +++ b/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java @@ -135,7 +135,7 @@ public class ServerSentEventHttpMessageReader implements HttpMessageReader lines, ResolvableType valueType, boolean shouldWrap, Map hints) { diff --git a/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartParser.java b/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartParser.java index 00cad97953..7b093e1037 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartParser.java +++ b/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartParser.java @@ -49,7 +49,6 @@ import org.springframework.http.HttpHeaders; * @author Arjen Poutsma * @since 5.3 */ -@SuppressWarnings("NullAway") final class MultipartParser extends BaseSubscriber { private static final byte CR = '\r'; @@ -117,12 +116,14 @@ final class MultipartParser extends BaseSubscriber { } @Override + @SuppressWarnings("NullAway") // Dataflow analysis limitation protected void hookOnNext(DataBuffer value) { this.requestOutstanding.set(false); this.state.get().onNext(value); } @Override + @SuppressWarnings("NullAway") // Dataflow analysis limitation protected void hookOnComplete() { this.state.get().onComplete(); } diff --git a/spring-web/src/main/java/org/springframework/http/codec/multipart/PartGenerator.java b/spring-web/src/main/java/org/springframework/http/codec/multipart/PartGenerator.java index cb7b94b8bd..1be8d5a1ba 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/multipart/PartGenerator.java +++ b/spring-web/src/main/java/org/springframework/http/codec/multipart/PartGenerator.java @@ -57,7 +57,7 @@ import org.springframework.util.FastByteArrayOutputStream; * @author Arjen Poutsma * @since 5.3 */ -@SuppressWarnings("NullAway") +@SuppressWarnings("NullAway") // Dataflow analysis limitation final class PartGenerator extends BaseSubscriber { private static final Log logger = LogFactory.getLog(PartGenerator.class); diff --git a/spring-web/src/main/java/org/springframework/http/converter/ResourceRegionHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/ResourceRegionHttpMessageConverter.java index d39dc44aae..216fdc2936 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/ResourceRegionHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/ResourceRegionHttpMessageConverter.java @@ -189,7 +189,7 @@ public class ResourceRegionHttpMessageConverter extends AbstractGenericHttpMessa } } - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Not null assertion performed in StreamUtils#copyRange private void writeResourceRegionCollection(Collection resourceRegions, HttpOutputMessage outputMessage) throws IOException { diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerReadPublisher.java b/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerReadPublisher.java index 75a93b8b1c..eadec6a0e1 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerReadPublisher.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerReadPublisher.java @@ -47,7 +47,7 @@ import org.springframework.util.Assert; * @since 5.0 * @param the type of element signaled */ -@SuppressWarnings("NullAway") +@SuppressWarnings("NullAway") // Dataflow analysis limitation public abstract class AbstractListenerReadPublisher implements Publisher { /** diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerWriteFlushProcessor.java b/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerWriteFlushProcessor.java index 049a113562..e9e56935be 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerWriteFlushProcessor.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerWriteFlushProcessor.java @@ -40,7 +40,7 @@ import org.springframework.util.Assert; * @since 5.0 * @param the type of element signaled to the {@link Subscriber} */ -@SuppressWarnings("NullAway") +@SuppressWarnings("NullAway") // Dataflow analysis limitation public abstract class AbstractListenerWriteFlushProcessor implements Processor, Void> { /** diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerWriteProcessor.java b/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerWriteProcessor.java index 8a401a644a..5a3e878be9 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerWriteProcessor.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerWriteProcessor.java @@ -43,7 +43,7 @@ import org.springframework.util.StringUtils; * @since 5.0 * @param the type of element signaled to the {@link Subscriber} */ -@SuppressWarnings("NullAway") +@SuppressWarnings("NullAway") // Dataflow analysis limitation public abstract class AbstractListenerWriteProcessor implements Processor { /** diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java b/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java index d205165ef8..b4d5936189 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java @@ -159,7 +159,7 @@ class ServletServerHttpRequest extends AbstractServerHttpRequest { } } - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Dataflow analysis limitation private static HttpHeaders initHeaders(HttpHeaders headerValues, HttpServletRequest request) { HttpHeaders headers = null; diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/WriteResultPublisher.java b/spring-web/src/main/java/org/springframework/http/server/reactive/WriteResultPublisher.java index 9f0d8adcdb..2a6a59b5ce 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/WriteResultPublisher.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/WriteResultPublisher.java @@ -36,7 +36,7 @@ import org.springframework.util.Assert; * @author Rossen Stoyanchev * @since 5.0 */ -@SuppressWarnings("NullAway") +@SuppressWarnings("NullAway") // Dataflow analysis limitation class WriteResultPublisher implements Publisher { /** diff --git a/spring-web/src/main/java/org/springframework/web/client/DefaultResponseErrorHandler.java b/spring-web/src/main/java/org/springframework/web/client/DefaultResponseErrorHandler.java index 7e6759758a..ed725eb9e3 100644 --- a/spring-web/src/main/java/org/springframework/web/client/DefaultResponseErrorHandler.java +++ b/spring-web/src/main/java/org/springframework/web/client/DefaultResponseErrorHandler.java @@ -243,7 +243,7 @@ public class DefaultResponseErrorHandler implements ResponseErrorHandler { * {@link RestClientResponseException#setBodyConvertFunction(Function)}. * @since 6.0 */ - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Lambda protected Function initBodyConvertFunction(ClientHttpResponse response, byte[] body) { Assert.state(!CollectionUtils.isEmpty(this.messageConverters), "Expected message converters"); return resolvableType -> { diff --git a/spring-web/src/main/java/org/springframework/web/context/request/async/StandardServletAsyncWebRequest.java b/spring-web/src/main/java/org/springframework/web/context/request/async/StandardServletAsyncWebRequest.java index 1beb9f2e60..cf10f4d2c6 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/async/StandardServletAsyncWebRequest.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/async/StandardServletAsyncWebRequest.java @@ -83,7 +83,7 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements * @param previousRequest the existing request from the last dispatch * @since 5.3.33 */ - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Dataflow analysis limitation StandardServletAsyncWebRequest(HttpServletRequest request, HttpServletResponse response, @Nullable StandardServletAsyncWebRequest previousRequest) { @@ -272,7 +272,7 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements } @Override - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Dataflow analysis limitation public ServletOutputStream getOutputStream() throws IOException { int level = obtainLockOrRaiseException(); try { @@ -292,7 +292,7 @@ public class StandardServletAsyncWebRequest extends ServletWebRequest implements } @Override - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Dataflow analysis limitation public PrintWriter getWriter() throws IOException { int level = obtainLockOrRaiseException(); try { diff --git a/spring-web/src/main/java/org/springframework/web/context/request/async/WebAsyncManager.java b/spring-web/src/main/java/org/springframework/web/context/request/async/WebAsyncManager.java index c948b0b9d5..048117fbbf 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/async/WebAsyncManager.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/async/WebAsyncManager.java @@ -298,7 +298,7 @@ public final class WebAsyncManager { * via {@link #getConcurrentResultContext()} * @throws Exception if concurrent processing failed to start */ - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Lambda public void startCallableProcessing(final WebAsyncTask webAsyncTask, Object... processingContext) throws Exception { @@ -419,7 +419,7 @@ public final class WebAsyncManager { * @see #getConcurrentResult() * @see #getConcurrentResultContext() */ - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Lambda public void startDeferredResultProcessing( final DeferredResult deferredResult, Object... processingContext) throws Exception { diff --git a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextResourcePatternResolver.java b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextResourcePatternResolver.java index ae316792fd..feeb1f2e7b 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/ServletContextResourcePatternResolver.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/ServletContextResourcePatternResolver.java @@ -104,7 +104,7 @@ public class ServletContextResourcePatternResolver extends PathMatchingResourceP * @see ServletContextResource * @see jakarta.servlet.ServletContext#getResourcePaths */ - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Dataflow analysis limitation protected void doRetrieveMatchingServletContextResources( ServletContext servletContext, String fullPattern, String dir, Set result) throws IOException { diff --git a/spring-web/src/main/java/org/springframework/web/cors/CorsConfiguration.java b/spring-web/src/main/java/org/springframework/web/cors/CorsConfiguration.java index 80ac063fa9..f6f7768dd7 100644 --- a/spring-web/src/main/java/org/springframework/web/cors/CorsConfiguration.java +++ b/spring-web/src/main/java/org/springframework/web/cors/CorsConfiguration.java @@ -162,7 +162,7 @@ public class CorsConfiguration { /** * Variant of {@link #setAllowedOrigins} for adding one origin at a time. */ - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Lambda public void addAllowedOrigin(@Nullable String origin) { if (origin == null) { return; @@ -235,7 +235,7 @@ public class CorsConfiguration { * Variant of {@link #setAllowedOriginPatterns} for adding one origin at a time. * @since 5.3 */ - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Lambda public void addAllowedOriginPattern(@Nullable String originPattern) { if (originPattern == null) { return; diff --git a/spring-web/src/main/java/org/springframework/web/multipart/support/AbstractMultipartHttpServletRequest.java b/spring-web/src/main/java/org/springframework/web/multipart/support/AbstractMultipartHttpServletRequest.java index 64fdf9ee2f..f90f98a7f4 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/support/AbstractMultipartHttpServletRequest.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/support/AbstractMultipartHttpServletRequest.java @@ -44,7 +44,8 @@ import org.springframework.web.multipart.MultipartHttpServletRequest; public abstract class AbstractMultipartHttpServletRequest extends HttpServletRequestWrapper implements MultipartHttpServletRequest { - private @Nullable MultiValueMap multipartFiles; + @SuppressWarnings("NullAway.Init") + private MultiValueMap multipartFiles; /** @@ -135,7 +136,6 @@ public abstract class AbstractMultipartHttpServletRequest extends HttpServletReq * lazily initializing it if necessary. * @see #initializeMultipart() */ - @SuppressWarnings("NullAway") protected MultiValueMap getMultipartFiles() { if (this.multipartFiles == null) { initializeMultipart(); diff --git a/spring-web/src/main/java/org/springframework/web/multipart/support/DefaultMultipartHttpServletRequest.java b/spring-web/src/main/java/org/springframework/web/multipart/support/DefaultMultipartHttpServletRequest.java index 3789a96d19..129eafb954 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/support/DefaultMultipartHttpServletRequest.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/support/DefaultMultipartHttpServletRequest.java @@ -45,9 +45,11 @@ public class DefaultMultipartHttpServletRequest extends AbstractMultipartHttpSer private static final String CONTENT_TYPE = "Content-Type"; - private @Nullable Map multipartParameters; + @SuppressWarnings("NullAway.Init") + private Map multipartParameters; - private @Nullable Map multipartParameterContentTypes; + @SuppressWarnings("NullAway.Init") + private Map multipartParameterContentTypes; /** @@ -164,7 +166,6 @@ public class DefaultMultipartHttpServletRequest extends AbstractMultipartHttpSer * lazily initializing it if necessary. * @see #initializeMultipart() */ - @SuppressWarnings("NullAway") protected Map getMultipartParameters() { if (this.multipartParameters == null) { initializeMultipart(); @@ -185,7 +186,6 @@ public class DefaultMultipartHttpServletRequest extends AbstractMultipartHttpSer * lazily initializing it if necessary. * @see #initializeMultipart() */ - @SuppressWarnings("NullAway") protected Map getMultipartParameterContentTypes() { if (this.multipartParameterContentTypes == null) { initializeMultipart(); diff --git a/spring-web/src/main/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequest.java b/spring-web/src/main/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequest.java index 7b7a21f5cc..e736d2d560 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequest.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequest.java @@ -58,7 +58,8 @@ import org.springframework.web.multipart.MultipartFile; */ public class StandardMultipartHttpServletRequest extends AbstractMultipartHttpServletRequest { - private @Nullable Set multipartParameterNames; + @SuppressWarnings("NullAway.Init") + private Set multipartParameterNames; /** @@ -138,7 +139,6 @@ public class StandardMultipartHttpServletRequest extends AbstractMultipartHttpSe } @Override - @SuppressWarnings("NullAway") public Enumeration getParameterNames() { if (this.multipartParameterNames == null) { initializeMultipart(); @@ -159,7 +159,6 @@ public class StandardMultipartHttpServletRequest extends AbstractMultipartHttpSe } @Override - @SuppressWarnings("NullAway") public Map getParameterMap() { if (this.multipartParameterNames == null) { initializeMultipart(); diff --git a/spring-web/src/main/java/org/springframework/web/server/adapter/HttpWebHandlerAdapter.java b/spring-web/src/main/java/org/springframework/web/server/adapter/HttpWebHandlerAdapter.java index 089c40996f..dcabb90b2a 100644 --- a/spring-web/src/main/java/org/springframework/web/server/adapter/HttpWebHandlerAdapter.java +++ b/spring-web/src/main/java/org/springframework/web/server/adapter/HttpWebHandlerAdapter.java @@ -86,7 +86,8 @@ public class HttpWebHandlerAdapter extends WebHandlerDecorator implements HttpHa private WebSessionManager sessionManager = new DefaultWebSessionManager(); - private @Nullable ServerCodecConfigurer codecConfigurer; + @SuppressWarnings("NullAway.Init") + private ServerCodecConfigurer codecConfigurer; private LocaleContextResolver localeContextResolver = new AcceptHeaderLocaleContextResolver(); @@ -149,7 +150,6 @@ public class HttpWebHandlerAdapter extends WebHandlerDecorator implements HttpHa /** * Return the configured {@link ServerCodecConfigurer}. */ - @SuppressWarnings("NullAway") public ServerCodecConfigurer getCodecConfigurer() { if (this.codecConfigurer == null) { setCodecConfigurer(ServerCodecConfigurer.create()); diff --git a/spring-web/src/main/java/org/springframework/web/server/session/InMemoryWebSessionStore.java b/spring-web/src/main/java/org/springframework/web/server/session/InMemoryWebSessionStore.java index b0243ef603..449eb6651f 100644 --- a/spring-web/src/main/java/org/springframework/web/server/session/InMemoryWebSessionStore.java +++ b/spring-web/src/main/java/org/springframework/web/server/session/InMemoryWebSessionStore.java @@ -189,7 +189,7 @@ public class InMemoryWebSessionStore implements WebSessionStore { } @Override - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Dataflow analysis limitation public String getId() { return this.id.get(); } @@ -225,7 +225,7 @@ public class InMemoryWebSessionStore implements WebSessionStore { } @Override - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Dataflow analysis limitation public boolean isStarted() { return this.state.get().equals(State.STARTED) || !getAttributes().isEmpty(); } @@ -254,7 +254,7 @@ public class InMemoryWebSessionStore implements WebSessionStore { } @Override - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Dataflow analysis limitation public Mono save() { checkMaxSessionsLimit(); @@ -292,7 +292,7 @@ public class InMemoryWebSessionStore implements WebSessionStore { return isExpired(clock.instant()); } - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Dataflow analysis limitation private boolean isExpired(Instant now) { if (this.state.get().equals(State.EXPIRED)) { return true; diff --git a/spring-web/src/main/java/org/springframework/web/service/invoker/HttpServiceMethod.java b/spring-web/src/main/java/org/springframework/web/service/invoker/HttpServiceMethod.java index 99844fee8f..9d9f0fd952 100644 --- a/spring-web/src/main/java/org/springframework/web/service/invoker/HttpServiceMethod.java +++ b/spring-web/src/main/java/org/springframework/web/service/invoker/HttpServiceMethod.java @@ -236,7 +236,7 @@ final class HttpServiceMethod { return null; } - @SuppressWarnings("NullAway") + @SuppressWarnings("NullAway") // Dataflow analysis limitation private static @Nullable String initUrl( @Nullable HttpExchange typeAnnotation, HttpExchange methodAnnotation, @Nullable StringValueResolver embeddedValueResolver) {