From 0e7aba4179d954f026cbe6f54db5b7952b1f95e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Fri, 22 Mar 2024 17:49:03 +0100 Subject: [PATCH] Perform NullAway build-time checks in spring-webmvc See gh-32475 --- gradle/spring-module.gradle | 2 +- .../servlet/config/annotation/ResourceChainRegistration.java | 1 + .../web/servlet/handler/AbstractHandlerMethodMapping.java | 1 + .../web/servlet/handler/AbstractUrlHandlerMapping.java | 1 + .../web/servlet/handler/RequestMatchResult.java | 2 +- .../web/servlet/mvc/method/RequestMappingInfo.java | 2 +- .../mvc/method/annotation/ServletInvocableHandlerMethod.java | 1 + .../web/servlet/resource/ResourceUrlProvider.java | 1 + .../org/springframework/web/servlet/view/RedirectView.java | 4 ++-- 9 files changed, 10 insertions(+), 5 deletions(-) diff --git a/gradle/spring-module.gradle b/gradle/spring-module.gradle index 9970a25019..f571ecd0e2 100644 --- a/gradle/spring-module.gradle +++ b/gradle/spring-module.gradle @@ -118,7 +118,7 @@ tasks.withType(JavaCompile).configureEach { disableAllChecks = true option("NullAway:CustomContractAnnotations", "org.springframework.lang.Contract") option("NullAway:AnnotatedPackages", "org.springframework.core,org.springframework.expression," + - "org.springframework.web.reactive") + "org.springframework.web.reactive,org.springframework.web.servlet") option("NullAway:UnannotatedSubPackages", "org.springframework.instrument,org.springframework.context.index," + "org.springframework.asm,org.springframework.cglib,org.springframework.objenesis," + "org.springframework.javapoet,org.springframework.aot.nativex.substitution") diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ResourceChainRegistration.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ResourceChainRegistration.java index 9a6584269e..badee9ad3a 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ResourceChainRegistration.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ResourceChainRegistration.java @@ -64,6 +64,7 @@ public class ResourceChainRegistration { this(cacheResources, (cacheResources ? new ConcurrentMapCache(DEFAULT_CACHE_NAME) : null)); } + @SuppressWarnings("NullAway") public ResourceChainRegistration(boolean cacheResources, @Nullable Cache cache) { Assert.isTrue(!cacheResources || cache != null, "'cache' is required when cacheResources=true"); if (cacheResources) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java index f1a58a16d4..bb602e2a4a 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java @@ -442,6 +442,7 @@ public abstract class AbstractHandlerMethodMapping extends AbstractHandlerMap } } + @SuppressWarnings("NullAway") private void addMatchingMappings(Collection mappings, List matches, HttpServletRequest request) { for (T mapping : mappings) { T match = getMatchingMapping(mapping, request); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractUrlHandlerMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractUrlHandlerMapping.java index 75bb7a2c3a..89d4f62e64 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractUrlHandlerMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractUrlHandlerMapping.java @@ -186,6 +186,7 @@ public abstract class AbstractUrlHandlerMapping extends AbstractHandlerMapping i * @since 5.3 */ @Nullable + @SuppressWarnings("NullAway") protected Object lookupHandler( RequestPath path, String lookupPath, HttpServletRequest request) throws Exception { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/RequestMatchResult.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/RequestMatchResult.java index da02aa2b9d..328a0e4e0f 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/RequestMatchResult.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/RequestMatchResult.java @@ -94,7 +94,7 @@ public class RequestMatchResult { * {@link PathMatcher#extractUriTemplateVariables}. * @return a map with URI template variables */ - @SuppressWarnings("ConstantConditions") + @SuppressWarnings({"ConstantConditions", "NullAway"}) public Map extractUriTemplateVariables() { return (this.pathPattern != null ? this.pathPattern.matchAndExtract(this.lookupPathContainer).getUriVariables() : diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfo.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfo.java index 3a1d5e6b21..642d14794f 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfo.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfo.java @@ -490,7 +490,7 @@ public final class RequestMappingInfo implements RequestCondition) () -> { if (result instanceof Exception exception) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlProvider.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlProvider.java index 3bb22d1970..688bd03244 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlProvider.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlProvider.java @@ -219,6 +219,7 @@ public class ResourceUrlProvider implements ApplicationListener