From 7f225a8df5422bbbcc3873222a707b4dbc6e4f5f Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Fri, 26 Sep 2025 14:58:32 +0200 Subject: [PATCH] Add nullability annotations to tests in module/spring-boot-integration See gh-47263 --- module/spring-boot-integration/build.gradle | 4 ++++ .../IntegrationAutoConfigurationTests.java | 8 +++++--- ...grationPropertiesEnvironmentPostProcessorTests.java | 10 ++++++++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/module/spring-boot-integration/build.gradle b/module/spring-boot-integration/build.gradle index 3194cd453ef..c70f2b2caf2 100644 --- a/module/spring-boot-integration/build.gradle +++ b/module/spring-boot-integration/build.gradle @@ -50,3 +50,7 @@ dependencies { testRuntimeOnly("com.h2database:h2") testRuntimeOnly("com.zaxxer:HikariCP") } + +tasks.named("compileTestJava") { + options.nullability.checking = "tests" +} diff --git a/module/spring-boot-integration/src/test/java/org/springframework/boot/integration/autoconfigure/IntegrationAutoConfigurationTests.java b/module/spring-boot-integration/src/test/java/org/springframework/boot/integration/autoconfigure/IntegrationAutoConfigurationTests.java index e6e6571e617..7c018a69176 100644 --- a/module/spring-boot-integration/src/test/java/org/springframework/boot/integration/autoconfigure/IntegrationAutoConfigurationTests.java +++ b/module/spring-boot-integration/src/test/java/org/springframework/boot/integration/autoconfigure/IntegrationAutoConfigurationTests.java @@ -31,6 +31,7 @@ import io.micrometer.observation.ObservationRegistry; import io.rsocket.transport.ClientTransport; import io.rsocket.transport.netty.client.TcpClientTransport; import org.assertj.core.api.InstanceOfAssertFactories; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledForJreRange; import org.junit.jupiter.api.condition.JRE; @@ -38,6 +39,7 @@ import reactor.core.publisher.Mono; import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.PropertyAccessorFactory; +import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration; import org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration; @@ -421,7 +423,7 @@ class IntegrationAutoConfigurationTests { .withPropertyValues("spring.integration.channel.auto-create=false", "spring.integration.endpoint.read-only-headers=ignoredHeader") .withInitializer((applicationContext) -> new IntegrationPropertiesEnvironmentPostProcessor() - .postProcessEnvironment(applicationContext.getEnvironment(), null)) + .postProcessEnvironment(applicationContext.getEnvironment(), new SpringApplication())) .run((context) -> { assertThat(context).hasSingleBean(org.springframework.integration.context.IntegrationProperties.class); org.springframework.integration.context.IntegrationProperties integrationProperties = context @@ -644,7 +646,7 @@ class IntegrationAutoConfigurationTests { @Override public Mono handleMessage(Message message) { - return null; + return Mono.empty(); } @Override @@ -707,7 +709,7 @@ class IntegrationAutoConfigurationTests { this.name = name; } - Object get(org.springframework.integration.context.IntegrationProperties properties) { + @Nullable Object get(org.springframework.integration.context.IntegrationProperties properties) { return ReflectionTestUtils.invokeMethod(properties, this.name); } diff --git a/module/spring-boot-integration/src/test/java/org/springframework/boot/integration/autoconfigure/IntegrationPropertiesEnvironmentPostProcessorTests.java b/module/spring-boot-integration/src/test/java/org/springframework/boot/integration/autoconfigure/IntegrationPropertiesEnvironmentPostProcessorTests.java index 59a72e8fa7b..4ccacc54bc4 100644 --- a/module/spring-boot-integration/src/test/java/org/springframework/boot/integration/autoconfigure/IntegrationPropertiesEnvironmentPostProcessorTests.java +++ b/module/spring-boot-integration/src/test/java/org/springframework/boot/integration/autoconfigure/IntegrationPropertiesEnvironmentPostProcessorTests.java @@ -36,6 +36,7 @@ import org.springframework.boot.context.properties.bind.Binder; import org.springframework.boot.origin.Origin; import org.springframework.boot.origin.OriginLookup; import org.springframework.boot.origin.TextResourceOrigin; +import org.springframework.boot.origin.TextResourceOrigin.Location; import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.MapPropertySource; @@ -141,6 +142,7 @@ class IntegrationPropertiesEnvironmentPostProcessorTests { .formatted(IntegrationPropertiesEnvironmentPostProcessor.class.getName()), getClass().getClassLoader()); Map mappings = (Map) ReflectionTestUtils.getField(propertySource, "KEYS_MAPPING"); + assertThat(mappings).isNotNull(); assertThat(mappings.values()).containsExactlyInAnyOrderElementsOf(integrationPropertyNames()); } @@ -148,6 +150,7 @@ class IntegrationPropertiesEnvironmentPostProcessorTests { List propertiesToMap = new ArrayList<>(); ReflectionUtils.doWithFields(IntegrationProperties.class, (field) -> { String value = (String) ReflectionUtils.getField(field, null); + assertThat(value).isNotNull(); if (value.startsWith(IntegrationProperties.INTEGRATION_PROPERTIES_PREFIX) && value.length() > IntegrationProperties.INTEGRATION_PROPERTIES_PREFIX.length()) { propertiesToMap.add(value); @@ -177,6 +180,7 @@ class IntegrationPropertiesEnvironmentPostProcessorTests { .formatted(IntegrationPropertiesEnvironmentPostProcessor.class.getName()), null); Map mappings = (Map) ReflectionTestUtils.getField(propertySource, "KEYS_MAPPING"); + assertThat(mappings).isNotNull(); return mappings.keySet(); } catch (Exception ex) { @@ -189,8 +193,10 @@ class IntegrationPropertiesEnvironmentPostProcessorTests { assertThat(origin).isInstanceOf(TextResourceOrigin.class); TextResourceOrigin textOrigin = (TextResourceOrigin) origin; assertThat(textOrigin.getResource()).isEqualTo(resource); - assertThat(textOrigin.getLocation().getLine()).isEqualTo(line); - assertThat(textOrigin.getLocation().getColumn()).isEqualTo(column); + Location location = textOrigin.getLocation(); + assertThat(location).isNotNull(); + assertThat(location.getLine()).isEqualTo(line); + assertThat(location.getColumn()).isEqualTo(column); }; }