diff --git a/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/app/MySubversionClient.java b/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/app/MySubversionClient.java index 95c8bfb526d..18808b0ce06 100644 --- a/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/app/MySubversionClient.java +++ b/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/app/MySubversionClient.java @@ -16,12 +16,13 @@ package smoketest.bootstrapregistry.app; +import org.jspecify.annotations.Nullable; import smoketest.bootstrapregistry.external.svn.SubversionClient; import smoketest.bootstrapregistry.external.svn.SubversionServerCertificate; public class MySubversionClient extends SubversionClient { - public MySubversionClient(SubversionServerCertificate serverCertificate) { + public MySubversionClient(@Nullable SubversionServerCertificate serverCertificate) { super(serverCertificate); } diff --git a/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/app/package-info.java b/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/app/package-info.java new file mode 100644 index 00000000000..2d62c641e36 --- /dev/null +++ b/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/app/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@NullMarked +package smoketest.bootstrapregistry.app; + +import org.jspecify.annotations.NullMarked; diff --git a/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionBootstrap.java b/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionBootstrap.java index 61f9f8cc6ef..b3499e6054e 100644 --- a/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionBootstrap.java +++ b/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionBootstrap.java @@ -18,6 +18,8 @@ package smoketest.bootstrapregistry.external.svn; import java.util.function.Function; +import org.jspecify.annotations.Nullable; + import org.springframework.boot.BootstrapContext; import org.springframework.boot.BootstrapRegistryInitializer; @@ -38,13 +40,13 @@ public final class SubversionBootstrap { * @return a {@link BootstrapRegistryInitializer} instance */ public static BootstrapRegistryInitializer withCustomClient( - Function clientFactory) { + Function<@Nullable SubversionServerCertificate, SubversionClient> clientFactory) { return (registry) -> registry.register(SubversionClient.class, (bootstrapContext) -> createSubversionClient(bootstrapContext, clientFactory)); } private static SubversionClient createSubversionClient(BootstrapContext bootstrapContext, - Function clientFactory) { + Function<@Nullable SubversionServerCertificate, SubversionClient> clientFactory) { return clientFactory.apply(bootstrapContext.get(SubversionServerCertificate.class)); } diff --git a/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionClient.java b/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionClient.java index 45d72c56ba8..884824cfb5e 100644 --- a/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionClient.java +++ b/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionClient.java @@ -16,6 +16,8 @@ package smoketest.bootstrapregistry.external.svn; +import org.jspecify.annotations.Nullable; + /** * A client that can connect to a subversion server. * @@ -23,9 +25,9 @@ package smoketest.bootstrapregistry.external.svn; */ public class SubversionClient { - private final SubversionServerCertificate serverCertificate; + private final @Nullable SubversionServerCertificate serverCertificate; - public SubversionClient(SubversionServerCertificate serverCertificate) { + public SubversionClient(@Nullable SubversionServerCertificate serverCertificate) { this.serverCertificate = serverCertificate; } diff --git a/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionConfigDataLoader.java b/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionConfigDataLoader.java index 59e01be175a..e5eeae836e1 100644 --- a/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionConfigDataLoader.java +++ b/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionConfigDataLoader.java @@ -30,6 +30,7 @@ import org.springframework.boot.context.config.ConfigDataLocationNotFoundExcepti import org.springframework.context.ApplicationListener; import org.springframework.core.env.MapPropertySource; import org.springframework.core.env.PropertySource; +import org.springframework.util.Assert; /** * {@link ConfigDataLoader} for subversion. @@ -55,15 +56,16 @@ class SubversionConfigDataLoader implements ConfigDataLoader propertySource = new MapPropertySource("svn", Collections.singletonMap("svn", loaded)); return new ConfigData(Collections.singleton(propertySource)); } private static void onBootstrapContextClosed(BootstrapContextClosedEvent event) { - event.getApplicationContext() - .getBeanFactory() - .registerSingleton("subversionClient", event.getBootstrapContext().get(SubversionClient.class)); + SubversionClient subversionClient = event.getBootstrapContext().get(SubversionClient.class); + Assert.state(subversionClient != null, "'subversionClient' must not be null"); + event.getApplicationContext().getBeanFactory().registerSingleton("subversionClient", subversionClient); } } diff --git a/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionConfigDataResource.java b/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionConfigDataResource.java index cffec804ae8..3a3a3089a38 100644 --- a/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionConfigDataResource.java +++ b/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionConfigDataResource.java @@ -16,6 +16,8 @@ package smoketest.bootstrapregistry.external.svn; +import org.jspecify.annotations.Nullable; + import org.springframework.boot.context.config.ConfigDataResource; /** @@ -27,9 +29,9 @@ class SubversionConfigDataResource extends ConfigDataResource { private final String location; - private final SubversionServerCertificate serverCertificate; + private final @Nullable SubversionServerCertificate serverCertificate; - SubversionConfigDataResource(String location, String serverCertificate) { + SubversionConfigDataResource(String location, @Nullable String serverCertificate) { this.location = location; this.serverCertificate = SubversionServerCertificate.of(serverCertificate); } @@ -38,12 +40,12 @@ class SubversionConfigDataResource extends ConfigDataResource { return this.location; } - SubversionServerCertificate getServerCertificate() { + @Nullable SubversionServerCertificate getServerCertificate() { return this.serverCertificate; } @Override - public boolean equals(Object obj) { + public boolean equals(@Nullable Object obj) { if (this == obj) { return true; } diff --git a/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionServerCertificate.java b/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionServerCertificate.java index 5153afc039f..5985acfd606 100644 --- a/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionServerCertificate.java +++ b/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/SubversionServerCertificate.java @@ -16,6 +16,8 @@ package smoketest.bootstrapregistry.external.svn; +import org.jspecify.annotations.Nullable; + import org.springframework.util.StringUtils; /** @@ -36,7 +38,7 @@ public class SubversionServerCertificate { return this.data; } - public static SubversionServerCertificate of(String data) { + public static @Nullable SubversionServerCertificate of(@Nullable String data) { return StringUtils.hasText(data) ? new SubversionServerCertificate(data) : null; } diff --git a/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/package-info.java b/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/package-info.java index e3e4085a004..98e51db6519 100644 --- a/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/package-info.java +++ b/smoke-test/spring-boot-smoke-test-bootstrap-registry/src/main/java/smoketest/bootstrapregistry/external/svn/package-info.java @@ -17,4 +17,7 @@ /** * An example of a hypothetical library that supports subversion. */ +@NullMarked package smoketest.bootstrapregistry.external.svn; + +import org.jspecify.annotations.NullMarked;