From 910a8a4fe5987a6b7bf9cbd6a322375f963ef3ba Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Thu, 31 Jul 2025 10:17:53 +0200 Subject: [PATCH] Add nullability annotations to module/spring-boot-graphql-test See gh-46587 --- .../HttpGraphQlTesterContextCustomizer.java | 15 ++++++++++++--- ...HttpGraphQlTesterContextCustomizerFactory.java | 4 +++- .../boot/test/graphql/tester/package-info.java | 3 +++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/module/spring-boot-graphql-test/src/main/java/org/springframework/boot/test/graphql/tester/HttpGraphQlTesterContextCustomizer.java b/module/spring-boot-graphql-test/src/main/java/org/springframework/boot/test/graphql/tester/HttpGraphQlTesterContextCustomizer.java index 17afffb522f..1c0a5755b19 100644 --- a/module/spring-boot-graphql-test/src/main/java/org/springframework/boot/test/graphql/tester/HttpGraphQlTesterContextCustomizer.java +++ b/module/spring-boot-graphql-test/src/main/java/org/springframework/boot/test/graphql/tester/HttpGraphQlTesterContextCustomizer.java @@ -16,6 +16,9 @@ package org.springframework.boot.test.graphql.tester; +import jakarta.servlet.ServletContext; +import org.jspecify.annotations.Nullable; + import org.springframework.aot.AotDetector; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; @@ -41,6 +44,7 @@ import org.springframework.test.context.ContextCustomizer; import org.springframework.test.context.MergedContextConfiguration; import org.springframework.test.context.TestContextAnnotationUtils; import org.springframework.test.web.reactive.server.WebTestClient; +import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; import org.springframework.web.context.WebApplicationContext; @@ -59,6 +63,7 @@ class HttpGraphQlTesterContextCustomizer implements ContextCustomizer { } SpringBootTest springBootTest = TestContextAnnotationUtils.findMergedAnnotation(mergedConfig.getTestClass(), SpringBootTest.class); + Assert.state(springBootTest != null, "'springBootTest' must not be null"); if (springBootTest.webEnvironment().isEmbedded()) { registerHttpGraphQlTester(context); } @@ -78,7 +83,7 @@ class HttpGraphQlTesterContextCustomizer implements ContextCustomizer { } @Override - public boolean equals(Object obj) { + public boolean equals(@Nullable Object obj) { return (obj != null) && (obj.getClass() == getClass()); } @@ -89,6 +94,7 @@ class HttpGraphQlTesterContextCustomizer implements ContextCustomizer { static class HttpGraphQlTesterRegistrar implements BeanDefinitionRegistryPostProcessor, Ordered, BeanFactoryAware { + @SuppressWarnings("NullAway.Init") private BeanFactory beanFactory; @Override @@ -126,9 +132,10 @@ class HttpGraphQlTesterContextCustomizer implements ContextCustomizer { private static final String REACTIVE_APPLICATION_CONTEXT_CLASS = "org.springframework.boot.web.context.reactive.ReactiveWebApplicationContext"; + @SuppressWarnings("NullAway.Init") private ApplicationContext applicationContext; - private HttpGraphQlTester object; + private @Nullable HttpGraphQlTester object; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { @@ -183,7 +190,9 @@ class HttpGraphQlTesterContextCustomizer implements ContextCustomizer { } else if (webApplicationType == WebApplicationType.SERVLET) { - serverBasePath = ((WebApplicationContext) this.applicationContext).getServletContext().getContextPath(); + ServletContext servletContext = ((WebApplicationContext) this.applicationContext).getServletContext(); + Assert.state(servletContext != null, "'servletContext' must not be null"); + serverBasePath = servletContext.getContextPath(); } return (serverBasePath != null) ? serverBasePath : ""; } diff --git a/module/spring-boot-graphql-test/src/main/java/org/springframework/boot/test/graphql/tester/HttpGraphQlTesterContextCustomizerFactory.java b/module/spring-boot-graphql-test/src/main/java/org/springframework/boot/test/graphql/tester/HttpGraphQlTesterContextCustomizerFactory.java index 64a2d35faf0..6add49a548e 100644 --- a/module/spring-boot-graphql-test/src/main/java/org/springframework/boot/test/graphql/tester/HttpGraphQlTesterContextCustomizerFactory.java +++ b/module/spring-boot-graphql-test/src/main/java/org/springframework/boot/test/graphql/tester/HttpGraphQlTesterContextCustomizerFactory.java @@ -18,6 +18,8 @@ package org.springframework.boot.test.graphql.tester; import java.util.List; +import org.jspecify.annotations.Nullable; + import org.springframework.boot.test.context.SpringBootTest; import org.springframework.graphql.test.tester.HttpGraphQlTester; import org.springframework.test.context.ContextConfigurationAttributes; @@ -39,7 +41,7 @@ class HttpGraphQlTesterContextCustomizerFactory implements ContextCustomizerFact private static final String WEBTESTCLIENT_CLASS = "org.springframework.test.web.reactive.server.WebTestClient"; @Override - public ContextCustomizer createContextCustomizer(Class testClass, + public @Nullable ContextCustomizer createContextCustomizer(Class testClass, List configAttributes) { SpringBootTest springBootTest = TestContextAnnotationUtils.findMergedAnnotation(testClass, SpringBootTest.class); diff --git a/module/spring-boot-graphql-test/src/main/java/org/springframework/boot/test/graphql/tester/package-info.java b/module/spring-boot-graphql-test/src/main/java/org/springframework/boot/test/graphql/tester/package-info.java index bf129c72f91..9fd3f19f750 100644 --- a/module/spring-boot-graphql-test/src/main/java/org/springframework/boot/test/graphql/tester/package-info.java +++ b/module/spring-boot-graphql-test/src/main/java/org/springframework/boot/test/graphql/tester/package-info.java @@ -17,4 +17,7 @@ /** * {@link org.springframework.graphql.test.tester.GraphQlTester} utilities. */ +@NullMarked package org.springframework.boot.test.graphql.tester; + +import org.jspecify.annotations.NullMarked;