diff --git a/loader/spring-boot-jarmode-tools/build.gradle b/loader/spring-boot-jarmode-tools/build.gradle index 31a1d6ed72e..839816ebd65 100644 --- a/loader/spring-boot-jarmode-tools/build.gradle +++ b/loader/spring-boot-jarmode-tools/build.gradle @@ -30,3 +30,7 @@ dependencies { testImplementation("org.mockito:mockito-core") testImplementation("org.mockito:mockito-junit-jupiter") } + +tasks.named("compileTestJava") { + options.nullability.checking = "tests" +} diff --git a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/AbstractJarModeTests.java b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/AbstractJarModeTests.java index 12fd0c638c8..03a405aac2c 100644 --- a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/AbstractJarModeTests.java +++ b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/AbstractJarModeTests.java @@ -35,6 +35,7 @@ import java.util.jar.Manifest; import java.util.stream.Stream; import java.util.zip.ZipEntry; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.io.TempDir; import org.springframework.util.Assert; @@ -51,6 +52,7 @@ import static org.assertj.core.api.Assertions.assertThat; abstract class AbstractJarModeTests { @TempDir + @SuppressWarnings("NullAway.Init") File tempDir; Manifest createManifest(String... entries) { @@ -74,8 +76,8 @@ abstract class AbstractJarModeTests { return createArchive(manifest, null, null, null, entries); } - File createArchive(Manifest manifest, Instant creationTime, Instant lastModifiedTime, Instant lastAccessTime, - String... entries) throws IOException { + File createArchive(Manifest manifest, @Nullable Instant creationTime, @Nullable Instant lastModifiedTime, + @Nullable Instant lastAccessTime, String... entries) throws IOException { Assert.state(entries.length % 2 == 0, "Entries must be key value pairs"); File file = new File(this.tempDir, "test.jar"); try (JarOutputStream jar = new JarOutputStream(new FileOutputStream(file), manifest)) { diff --git a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/CommandTests.java b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/CommandTests.java index 46fec0e0720..273b6a86692 100644 --- a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/CommandTests.java +++ b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/CommandTests.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Map; import org.assertj.core.api.InstanceOfAssertFactories; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; import org.springframework.boot.jarmode.tools.Command.Option; @@ -165,9 +166,9 @@ class CommandTests { static class TestCommand extends Command { - private Map runOptions; + private @Nullable Map runOptions; - private List runParameters; + private @Nullable List runParameters; TestCommand(String name, Option... options) { this(name, "test", Options.of(options), Parameters.none()); @@ -178,16 +179,16 @@ class CommandTests { } @Override - protected void run(PrintStream out, Map options, List parameters) { + protected void run(PrintStream out, Map options, List parameters) { this.runOptions = options; this.runParameters = parameters; } - Map getRunOptions() { + @Nullable Map getRunOptions() { return this.runOptions; } - List getRunParameters() { + @Nullable List getRunParameters() { return this.runParameters; } diff --git a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ContextTests.java b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ContextTests.java index fc104f84b51..1e12f7dbdb2 100644 --- a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ContextTests.java +++ b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ContextTests.java @@ -34,9 +34,11 @@ import static org.assertj.core.api.Assertions.assertThatIllegalStateException; class ContextTests { @TempDir + @SuppressWarnings("NullAway.Init") File temp; @Test + @SuppressWarnings("NullAway") // Test null check void createWhenSourceIsNullThrowsException() { assertThatIllegalStateException().isThrownBy(() -> new Context(null, this.temp)) .withMessage("Unable to find source archive"); diff --git a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ExtractCommandTests.java b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ExtractCommandTests.java index fd2c9d7e146..c7d0187e9b0 100644 --- a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ExtractCommandTests.java +++ b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ExtractCommandTests.java @@ -297,7 +297,7 @@ class ExtractCommandTests extends AbstractJarModeTests { @Test void runWithJarFileThatWouldWriteEntriesOutsideDestinationFails() throws Exception { - File file = createArchive("e/../../e.jar", null); + File file = createArchive("e/../../e.jar", ""); assertThatIllegalStateException().isThrownBy(() -> run(file, "--launcher")) .withMessageContaining("Entry 'e/../../e.jar' would be written"); } diff --git a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ExtractLayersCommandTests.java b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ExtractLayersCommandTests.java index 3979dac0522..b15eaace46c 100644 --- a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ExtractLayersCommandTests.java +++ b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ExtractLayersCommandTests.java @@ -69,9 +69,11 @@ class ExtractLayersCommandTests { private static final FileTime LAST_ACCESS_TIME = FileTime.from(NOW.minus(1, ChronoUnit.DAYS)); @TempDir + @SuppressWarnings("NullAway.Init") File temp; @Mock + @SuppressWarnings("NullAway.Init") private Context context; private File jarFile; diff --git a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/HelpCommandTests.java b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/HelpCommandTests.java index 0d99200b3da..77e6991e06f 100644 --- a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/HelpCommandTests.java +++ b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/HelpCommandTests.java @@ -40,6 +40,7 @@ class HelpCommandTests { private TestPrintStream out; @TempDir + @SuppressWarnings("NullAway.Init") Path temp; @BeforeEach diff --git a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/IndexedJarStructureTests.java b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/IndexedJarStructureTests.java index 925b65628eb..0585b824254 100644 --- a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/IndexedJarStructureTests.java +++ b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/IndexedJarStructureTests.java @@ -47,6 +47,7 @@ class IndexedJarStructureTests { void shouldResolveLibraryEntry() throws IOException { IndexedJarStructure structure = createStructure(); Entry entry = structure.resolve("BOOT-INF/lib/spring-webmvc-6.1.4.jar"); + assertThat(entry).isNotNull(); assertThat(entry.location()).isEqualTo("spring-webmvc-6.1.4.jar"); assertThat(entry.originalLocation()).isEqualTo("BOOT-INF/lib/spring-webmvc-6.1.4.jar"); assertThat(entry.type()).isEqualTo(Type.LIBRARY); @@ -56,6 +57,7 @@ class IndexedJarStructureTests { void shouldResolveApplicationEntry() throws IOException { IndexedJarStructure structure = createStructure(); Entry entry = structure.resolve("BOOT-INF/classes/application.properties"); + assertThat(entry).isNotNull(); assertThat(entry.location()).isEqualTo("application.properties"); assertThat(entry.originalLocation()).isEqualTo("BOOT-INF/classes/application.properties"); assertThat(entry.type()).isEqualTo(Type.APPLICATION_CLASS_OR_RESOURCE); @@ -65,6 +67,7 @@ class IndexedJarStructureTests { void shouldResolveLoaderEntry() throws IOException { IndexedJarStructure structure = createStructure(); Entry entry = structure.resolve("org/springframework/boot/loader/launch/JarLauncher"); + assertThat(entry).isNotNull(); assertThat(entry.location()).isEqualTo("org/springframework/boot/loader/launch/JarLauncher"); assertThat(entry.originalLocation()).isEqualTo("org/springframework/boot/loader/launch/JarLauncher"); assertThat(entry.type()).isEqualTo(Type.LOADER); diff --git a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/IndexedLayersTests.java b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/IndexedLayersTests.java index c32f0de73ad..82a49a5e905 100644 --- a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/IndexedLayersTests.java +++ b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/IndexedLayersTests.java @@ -42,6 +42,7 @@ import static org.mockito.Mockito.mock; class IndexedLayersTests { @TempDir + @SuppressWarnings("NullAway.Init") File temp; @Test @@ -94,6 +95,7 @@ class IndexedLayersTests { Context context = mock(Context.class); given(context.getArchiveFile()).willReturn(createWarFile("test.war")); IndexedLayers layers = IndexedLayers.get(context); + assertThat(layers).isNotNull(); assertThat(layers.getLayer(mockEntry("WEB-INF/lib/a.jar"))).isEqualTo("test"); } diff --git a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/LayerToolsJarModeTests.java b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/LayerToolsJarModeTests.java index 53a76ea6059..2fa8507ba6c 100644 --- a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/LayerToolsJarModeTests.java +++ b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/LayerToolsJarModeTests.java @@ -53,6 +53,7 @@ class LayerToolsJarModeTests { private PrintStream systemOut; @TempDir + @SuppressWarnings("NullAway.Init") File temp; @BeforeEach diff --git a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ListCommandTests.java b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ListCommandTests.java index b37533c00d4..f890a772691 100644 --- a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ListCommandTests.java +++ b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ListCommandTests.java @@ -48,9 +48,11 @@ import static org.mockito.BDDMockito.given; class ListCommandTests { @TempDir + @SuppressWarnings("NullAway.Init") File temp; @Mock + @SuppressWarnings("NullAway.Init") private Context context; private ListCommand command; @@ -68,6 +70,7 @@ class ListCommandTests { @Test void listLayersShouldListLayers() { Layers layers = IndexedLayers.get(this.context); + assertThat(layers).isNotNull(); this.command.printLayers(layers, this.out); assertThat(this.out).hasSameContentAsResource("list-output-without-deprecation.txt"); } diff --git a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/TestCommand.java b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/TestCommand.java index f130d611276..531b0ec37bc 100644 --- a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/TestCommand.java +++ b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/TestCommand.java @@ -20,6 +20,8 @@ import java.io.PrintStream; import java.util.List; import java.util.Map; +import org.jspecify.annotations.Nullable; + /** * @author Moritz Halbritter */ @@ -33,7 +35,7 @@ class TestCommand extends Command { } @Override - protected void run(PrintStream out, Map options, List parameters) { + protected void run(PrintStream out, Map options, List parameters) { }