diff --git a/.github/actions/run-gradle/action.yml b/.github/actions/run-gradle/action.yml index 90bd8082b59c..00e36b096d47 100644 --- a/.github/actions/run-gradle/action.yml +++ b/.github/actions/run-gradle/action.yml @@ -15,7 +15,7 @@ runs: id: setup-gradle-jdk with: distribution: temurin - java-version: 21 + java-version: 24 check-latest: true - uses: gradle/actions/setup-gradle@8379f6a1328ee0e06e2bb424dadb7b159856a326 # v4.4.0 with: diff --git a/.github/workflows/cross-version.yml b/.github/workflows/cross-version.yml index 6178ae7d2a05..6368bf02d4a7 100644 --- a/.github/workflows/cross-version.yml +++ b/.github/workflows/cross-version.yml @@ -22,8 +22,6 @@ jobs: fail-fast: false matrix: jdk: - - version: 24 - type: ga - version: 25 type: ea name: "OpenJDK ${{ matrix.jdk.version }} (${{ matrix.jdk.release || matrix.jdk.type }})" diff --git a/.github/workflows/gradle-dependency-submission.yml b/.github/workflows/gradle-dependency-submission.yml index eda44140d013..d71f044b604c 100644 --- a/.github/workflows/gradle-dependency-submission.yml +++ b/.github/workflows/gradle-dependency-submission.yml @@ -22,7 +22,7 @@ jobs: uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1 with: distribution: temurin - java-version: 21 + java-version: 24 check-latest: true - name: Generate and submit dependency graph uses: gradle/actions/dependency-submission@8379f6a1328ee0e06e2bb424dadb7b159856a326 # v4.4.0 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index aadc10b78069..631844011063 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -29,7 +29,7 @@ jobs: with: distribution: graalvm-community version: 'latest' - java-version: '21' + java-version: '24' github-token: ${{ secrets.GITHUB_TOKEN }} - name: Build uses: ./.github/actions/main-build diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c7096aa4e1d5..91c8ac3903ba 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -87,7 +87,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1 with: - java-version: 21 + java-version: 24 distribution: temurin - uses: sbt/setup-sbt@69a46ab4acd4316aa16e68d91a9249a98d7e78d5 # v1.1.8 - name: Update JUnit dependencies in samples @@ -245,7 +245,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1 with: - java-version: 21 + java-version: 24 distribution: temurin - uses: sbt/setup-sbt@69a46ab4acd4316aa16e68d91a9249a98d7e78d5 # v1.1.8 - name: Update JUnit dependencies in samples diff --git a/README.md b/README.md index a19f198286e6..f5de32911e7e 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ task outputs from previous CI builds. ## Building from Source -You need [JDK 21] to build JUnit. [Gradle toolchains] are used to detect and +You need [JDK 24] to build JUnit. [Gradle toolchains] are used to detect and potentially download additional JDKs for compilation and test execution. All modules can be _built_ and _tested_ with the [Gradle Wrapper] using the following command: @@ -100,7 +100,7 @@ of the JUnit Platform, JUnit Jupiter, and JUnit Vintage. [Gradle Wrapper]: https://docs.gradle.org/current/userguide/gradle_wrapper.html#sec:using_wrapper [JaCoCo]: https://www.eclemma.org/jacoco/ [Javadoc]: https://junit.org/junit5/docs/current/api/ -[JDK 21]: https://javaalmanac.io/jdk/21/ +[JDK 24]: https://javaalmanac.io/jdk/24/ [Release Notes]: https://junit.org/junit5/docs/current/release-notes/ [Samples]: https://github.com/junit-team/junit5-samples [StackOverflow]: https://stackoverflow.com/questions/tagged/junit5 diff --git a/documentation/src/docs/asciidoc/release-notes/release-notes-6.0.0-M1.adoc b/documentation/src/docs/asciidoc/release-notes/release-notes-6.0.0-M1.adoc index 5b649daa7d71..5cf7d8a9560f 100644 --- a/documentation/src/docs/asciidoc/release-notes/release-notes-6.0.0-M1.adoc +++ b/documentation/src/docs/asciidoc/release-notes/release-notes-6.0.0-M1.adoc @@ -76,6 +76,11 @@ repository on GitHub. property has been removed. JUnit now always adheres to standard Java semantics regarding whether a given field or method is visible or overridden according to the rules of the Java language. +* The type bounds of the following methods have been changed to be more flexible and allow + nullable and non-nullable types: + - `ConfigurationParameters.get(String, Function)` + - `NamespacedHierarchicalStore.getOrComputeIfAbsent(N, K, Function)` + - `NamespacedHierarchicalStore.getOrComputeIfAbsent(N, K, Function, Class)` [[release-notes-6.0.0-M1-junit-platform-new-features-and-improvements]] ==== New Features and Improvements @@ -112,6 +117,11 @@ repository on GitHub. `callsInPlace(executable, AT_MOST_ONCE)` which might result in compilation errors. * The `junit-jupiter-migrationsupport` artifact and its contained classes are now deprecated and will be removed in the next major version. +* The type bounds of the following methods have been changed to be more flexible and allow + nullable and non-nullable types: + - `ExtensionContext.getConfigurationParameter(String, Function)` + - `ExtensionContext.getOrComputeIfAbsent(K, Function)` + - `ExtensionContext.getOrComputeIfAbsent(K, Function, Class)` [[release-notes-6.0.0-M1-junit-jupiter-new-features-and-improvements]] ==== New Features and Improvements diff --git a/documentation/src/javadoc/junit-stylesheet.css b/documentation/src/javadoc/junit-stylesheet.css index cde05cfb75a6..6d5b1bb6c287 100644 --- a/documentation/src/javadoc/junit-stylesheet.css +++ b/documentation/src/javadoc/junit-stylesheet.css @@ -30,6 +30,9 @@ /* Text colors for links */ --link-color: #dc524a; --link-color-active: #b62b23; + /* Table of contents */ + --toc-background-color: var(--section-background-color); + --toc-link-color: #000; /* Snippet colors */ --snippet-background-color: #ebecee; --snippet-text-color: var(--block-text-color); @@ -39,10 +42,6 @@ --table-border-color: #999; /* Highlight color for active search tag target */ --search-tag-highlight-color: #ffff00; - /* Adjustments for icon and active background colors of copy-to-clipboard buttons */ - --copy-button-background-color-active: rgba(168, 168, 168, 0.3); - /* Colors for invalid tag notifications */ - --invalid-tag-background-color: #ffe6e6; } .title { diff --git a/documentation/src/test/java/example/FirstCustomEngine.java b/documentation/src/test/java/example/FirstCustomEngine.java index 5fd886fd65e8..46c66f926540 100644 --- a/documentation/src/test/java/example/FirstCustomEngine.java +++ b/documentation/src/test/java/example/FirstCustomEngine.java @@ -48,6 +48,9 @@ public TestDescriptor discover(EngineDiscoveryRequest discoveryRequest, UniqueId return new EngineDescriptor(uniqueId, "First Custom Test Engine"); } + //end::user_guide[] + @SuppressWarnings("NullAway") + //tag::user_guide[] @Override public void execute(ExecutionRequest request) { request.getEngineExecutionListener() diff --git a/documentation/src/test/java/example/ParameterizedLifecycleDemo.java b/documentation/src/test/java/example/ParameterizedLifecycleDemo.java index c9c3375367d1..d06247be9518 100644 --- a/documentation/src/test/java/example/ParameterizedLifecycleDemo.java +++ b/documentation/src/test/java/example/ParameterizedLifecycleDemo.java @@ -55,7 +55,7 @@ static void beforeInvocation(TextFile textFile, @TempDir Path tempDir) throws Ex } //end::user_guide[] - @SuppressWarnings({ "DataFlowIssue", "NullAway" }) + @SuppressWarnings("DataFlowIssue") //tag::user_guide[] @AfterParameterizedClassInvocation static void afterInvocation(TextFile textFile) throws Exception { @@ -66,7 +66,7 @@ static void afterInvocation(TextFile textFile) throws Exception { } //end::user_guide[] - @SuppressWarnings({ "DataFlowIssue", "NullAway" }) + @SuppressWarnings("DataFlowIssue") //tag::user_guide[] @Test void test() { diff --git a/documentation/src/test/java/example/SecondCustomEngine.java b/documentation/src/test/java/example/SecondCustomEngine.java index ff90dfa8b983..f41223d6dfcc 100644 --- a/documentation/src/test/java/example/SecondCustomEngine.java +++ b/documentation/src/test/java/example/SecondCustomEngine.java @@ -48,6 +48,9 @@ public TestDescriptor discover(EngineDiscoveryRequest discoveryRequest, UniqueId return new EngineDescriptor(uniqueId, "Second Custom Test Engine"); } + //end::user_guide[] + @SuppressWarnings("NullAway") + //tag::user_guide[] @Override public void execute(ExecutionRequest request) { request.getEngineExecutionListener() diff --git a/documentation/src/test/java/example/interceptor/SwingEdtInterceptor.java b/documentation/src/test/java/example/interceptor/SwingEdtInterceptor.java index 348fd3607c1a..657ec3ca70a4 100644 --- a/documentation/src/test/java/example/interceptor/SwingEdtInterceptor.java +++ b/documentation/src/test/java/example/interceptor/SwingEdtInterceptor.java @@ -23,6 +23,9 @@ // tag::user_guide[] public class SwingEdtInterceptor implements InvocationInterceptor { + //end::user_guide[] + @SuppressWarnings("NullAway") + //tag::user_guide[] @Override public void interceptTestMethod(Invocation invocation, ReflectiveInvocationContext invocationContext, diff --git a/gradle/base/code-generator-model/build.gradle.kts b/gradle/base/code-generator-model/build.gradle.kts index 4bf50672a124..ca30027739e8 100644 --- a/gradle/base/code-generator-model/build.gradle.kts +++ b/gradle/base/code-generator-model/build.gradle.kts @@ -1,4 +1,4 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 plugins { `kotlin-dsl` @@ -10,5 +10,8 @@ java { } kotlin { - compilerOptions.jvmTarget = JvmTarget.JVM_17 + compilerOptions { + jvmTarget = JVM_17 + freeCompilerArgs.add("-Xjdk-release=17") + } } diff --git a/gradle/base/dsl-extensions/build.gradle.kts b/gradle/base/dsl-extensions/build.gradle.kts index bc0172f0f072..a94e377f753e 100644 --- a/gradle/base/dsl-extensions/build.gradle.kts +++ b/gradle/base/dsl-extensions/build.gradle.kts @@ -1,3 +1,16 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_21 + plugins { `kotlin-dsl` } + +tasks.compileJava { + options.release = 21 +} + +kotlin { + compilerOptions { + jvmTarget = JVM_21 + freeCompilerArgs.add("-Xjdk-release=21") + } +} diff --git a/gradle/gradle-daemon-jvm.properties b/gradle/gradle-daemon-jvm.properties index 63e5bbdf4845..9c554284ce79 100644 --- a/gradle/gradle-daemon-jvm.properties +++ b/gradle/gradle-daemon-jvm.properties @@ -1,2 +1,2 @@ #This file is generated by updateDaemonJvm -toolchainVersion=21 +toolchainVersion=24 diff --git a/gradle/plugins/build-parameters/build.gradle.kts b/gradle/plugins/build-parameters/build.gradle.kts index 8a1276886d14..f2db3d75afaa 100644 --- a/gradle/plugins/build-parameters/build.gradle.kts +++ b/gradle/plugins/build-parameters/build.gradle.kts @@ -4,6 +4,10 @@ plugins { group = "junitbuild" +tasks.compileJava { + options.release = 21 +} + buildParameters { pluginId("junitbuild.build-parameters") bool("ci") { diff --git a/gradle/plugins/code-generator/build.gradle.kts b/gradle/plugins/code-generator/build.gradle.kts index fda16a028335..4b659df799e0 100644 --- a/gradle/plugins/code-generator/build.gradle.kts +++ b/gradle/plugins/code-generator/build.gradle.kts @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_21 + plugins { `kotlin-dsl` } @@ -10,3 +12,14 @@ dependencies { implementation(libs.jackson.module.kotlin) implementation(libs.jte) } + +tasks.compileJava { + options.release = 21 +} + +kotlin { + compilerOptions { + jvmTarget = JVM_21 + freeCompilerArgs.add("-Xjdk-release=21") + } +} diff --git a/gradle/plugins/common/build.gradle.kts b/gradle/plugins/common/build.gradle.kts index c5f794080724..40df3d0c9ce4 100644 --- a/gradle/plugins/common/build.gradle.kts +++ b/gradle/plugins/common/build.gradle.kts @@ -1,4 +1,5 @@ import junitbuild.extensions.markerCoordinates +import org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_21 plugins { `kotlin-dsl` @@ -19,3 +20,14 @@ dependencies { implementation(libs.plugins.shadow.markerCoordinates) implementation(libs.plugins.spotless.markerCoordinates) } + +tasks.compileJava { + options.release = 21 +} + +kotlin { + compilerOptions { + jvmTarget = JVM_21 + freeCompilerArgs.add("-Xjdk-release=21") + } +} diff --git a/gradle/plugins/common/src/main/kotlin/junitbuild.java-nullability-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.java-nullability-conventions.gradle.kts index 75f0c6e70ab5..a06ab1becca9 100644 --- a/gradle/plugins/common/src/main/kotlin/junitbuild.java-nullability-conventions.gradle.kts +++ b/gradle/plugins/common/src/main/kotlin/junitbuild.java-nullability-conventions.gradle.kts @@ -21,7 +21,12 @@ tasks.withType().configureEach { options.errorprone { disableAllChecks = true nullaway { - enable() + if (java.toolchain.implementation.orNull == JvmImplementation.J9) { + disable() + } else { + enable() + } + isJSpecifyMode = true } } } diff --git a/gradle/plugins/common/src/main/kotlin/junitbuild.java-toolchain-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.java-toolchain-conventions.gradle.kts index 873ff64cfb1e..83902bbe5769 100644 --- a/gradle/plugins/common/src/main/kotlin/junitbuild.java-toolchain-conventions.gradle.kts +++ b/gradle/plugins/common/src/main/kotlin/junitbuild.java-toolchain-conventions.gradle.kts @@ -5,7 +5,7 @@ plugins { } project.pluginManager.withPlugin("java") { - val defaultLanguageVersion = JavaLanguageVersion.of(21) + val defaultLanguageVersion = JavaLanguageVersion.of(24) val javaLanguageVersion = buildParameters.javaToolchain.version.map { JavaLanguageVersion.of(it) }.getOrElse(defaultLanguageVersion) val jvmImplementation = buildParameters.javaToolchain.implementation.map { when(it) { diff --git a/gradle/plugins/common/src/main/kotlin/junitbuild.kotlin-library-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.kotlin-library-conventions.gradle.kts index 083de1511d7a..907b672a734a 100644 --- a/gradle/plugins/common/src/main/kotlin/junitbuild.kotlin-library-conventions.gradle.kts +++ b/gradle/plugins/common/src/main/kotlin/junitbuild.kotlin-library-conventions.gradle.kts @@ -1,3 +1,4 @@ + import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_1 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @@ -20,7 +21,8 @@ tasks.withType().configureEach { languageVersion = apiVersion allWarningsAsErrors.convention(true) javaParameters = true - freeCompilerArgs.addAll("-opt-in=kotlin.RequiresOptIn") + freeCompilerArgs.add("-opt-in=kotlin.RequiresOptIn") + freeCompilerArgs.add(jvmTarget.map { "-Xjdk-release=${JavaVersion.toVersion(it.target).majorVersion}" }) } } diff --git a/gradle/plugins/common/src/main/kotlin/junitbuild.testing-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.testing-conventions.gradle.kts index dd333c70161c..60a3ec64694a 100644 --- a/gradle/plugins/common/src/main/kotlin/junitbuild.testing-conventions.gradle.kts +++ b/gradle/plugins/common/src/main/kotlin/junitbuild.testing-conventions.gradle.kts @@ -110,6 +110,8 @@ tasks.withType().configureEach { systemProperty("log4j2.julLoggerAdapter", "org.apache.logging.log4j.jul.CoreLoggerAdapter") // Avoid overhead (see https://logging.apache.org/log4j/2.x/manual/jmx.html#enabling-jmx) systemProperty("log4j2.disableJmx", "true") + // https://github.com/raphw/byte-buddy/issues/1803 + systemProperty("net.bytebuddy.safe", true) // Required until ASM officially supports the JDK 14 systemProperty("net.bytebuddy.experimental", true) if (buildParameters.testing.enableJFR) { diff --git a/gradle/plugins/publishing/build.gradle.kts b/gradle/plugins/publishing/build.gradle.kts index 79f65b980991..72d4e4c68236 100644 --- a/gradle/plugins/publishing/build.gradle.kts +++ b/gradle/plugins/publishing/build.gradle.kts @@ -1,4 +1,5 @@ import junitbuild.extensions.markerCoordinates +import org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_21 plugins { `kotlin-dsl` @@ -23,3 +24,14 @@ configurations.configureEach { } } } + +tasks.compileJava { + options.release = 21 +} + +kotlin { + compilerOptions { + jvmTarget = JVM_21 + freeCompilerArgs.add("-Xjdk-release=21") + } +} diff --git a/junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertTimeout.java b/junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertTimeout.java index 0d188e166197..d60b065be1bb 100644 --- a/junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertTimeout.java +++ b/junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertTimeout.java @@ -36,17 +36,15 @@ static void assertTimeout(Duration timeout, Executable executable) { assertTimeout(timeout, executable, (String) null); } - @SuppressWarnings("NullAway") static void assertTimeout(Duration timeout, Executable executable, @Nullable String message) { - assertTimeout(timeout, () -> { + AssertTimeout.<@Nullable Object> assertTimeout(timeout, () -> { executable.execute(); return null; }, message); } - @SuppressWarnings("NullAway") static void assertTimeout(Duration timeout, Executable executable, Supplier<@Nullable String> messageSupplier) { - assertTimeout(timeout, () -> { + AssertTimeout.<@Nullable Object> assertTimeout(timeout, () -> { executable.execute(); return null; }, messageSupplier); diff --git a/junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertionFailureBuilder.java b/junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertionFailureBuilder.java index fdb5cdd68d52..a8fd354ce2a4 100644 --- a/junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertionFailureBuilder.java +++ b/junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertionFailureBuilder.java @@ -32,22 +32,17 @@ @API(status = STABLE, since = "5.9") public class AssertionFailureBuilder { - @Nullable - private Object message; + private @Nullable Object message; - @Nullable - private Throwable cause; + private @Nullable Throwable cause; private boolean mismatch; - @Nullable - private Object expected; + private @Nullable Object expected; - @Nullable - private Object actual; + private @Nullable Object actual; - @Nullable - private String reason; + private @Nullable String reason; private boolean includeValuesInMessage = true; diff --git a/junit-jupiter-api/src/main/java/org/junit/jupiter/api/DynamicNode.java b/junit-jupiter-api/src/main/java/org/junit/jupiter/api/DynamicNode.java index 59c990ee8b99..0f4d66c5b652 100644 --- a/junit-jupiter-api/src/main/java/org/junit/jupiter/api/DynamicNode.java +++ b/junit-jupiter-api/src/main/java/org/junit/jupiter/api/DynamicNode.java @@ -34,8 +34,7 @@ public abstract class DynamicNode { private final String displayName; /** Custom test source {@link URI} associated with this node; potentially {@code null}. */ - @Nullable - private final URI testSourceUri; + private final @Nullable URI testSourceUri; DynamicNode(String displayName, @Nullable URI testSourceUri) { this.displayName = Preconditions.notBlank(displayName, "displayName must not be null or blank"); diff --git a/junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/OS.java b/junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/OS.java index 8b6f4a348241..0c7ab8be1bc6 100644 --- a/junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/OS.java +++ b/junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/OS.java @@ -95,8 +95,7 @@ public enum OS { private static final Logger logger = LoggerFactory.getLogger(OS.class); - @Nullable - private static final OS CURRENT_OS = determineCurrentOs(); + private static final @Nullable OS CURRENT_OS = determineCurrentOs(); /** * {@return the current operating system, if known; otherwise, {@code null}} diff --git a/junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ExtensionConfigurationException.java b/junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ExtensionConfigurationException.java index fd915b661156..eedd682c7992 100644 --- a/junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ExtensionConfigurationException.java +++ b/junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ExtensionConfigurationException.java @@ -15,6 +15,7 @@ import java.io.Serial; import org.apiguardian.api.API; +import org.jspecify.annotations.Nullable; import org.junit.platform.commons.JUnitException; /** @@ -33,7 +34,7 @@ public ExtensionConfigurationException(String message) { super(message); } - public ExtensionConfigurationException(String message, Throwable cause) { + public ExtensionConfigurationException(String message, @Nullable Throwable cause) { super(message, cause); } diff --git a/junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ExtensionContext.java b/junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ExtensionContext.java index fd09f1d47de3..a58cb885e0a6 100644 --- a/junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ExtensionContext.java +++ b/junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ExtensionContext.java @@ -345,7 +345,7 @@ default Method getRequiredTestMethod() { * @see org.junit.platform.engine.ConfigurationParameters */ @API(status = STABLE, since = "5.10") - Optional getConfigurationParameter(String key, Function transformer); + Optional getConfigurationParameter(String key, Function transformer); /** * Publish a map of key-value pairs to be consumed by an @@ -614,9 +614,8 @@ default V getOrDefault(Object key, Class requiredType, V defaultValue) { * @see CloseableResource * @see AutoCloseable */ - @SuppressWarnings({ "DataFlowIssue", "NullAway" }) @API(status = STABLE, since = "5.1") - default V getOrComputeIfAbsent(Class type) { + default @Nullable V getOrComputeIfAbsent(Class type) { return getOrComputeIfAbsent(type, ReflectionSupport::newInstance, type); } @@ -650,7 +649,8 @@ default V getOrComputeIfAbsent(Class type) { * @see CloseableResource * @see AutoCloseable */ - @Nullable Object getOrComputeIfAbsent(K key, Function defaultCreator); + @Nullable Object getOrComputeIfAbsent(K key, + Function defaultCreator); /** * Get the value of the specified required type that is stored under the @@ -681,7 +681,8 @@ default V getOrComputeIfAbsent(Class type) { * @see CloseableResource * @see AutoCloseable */ - @Nullable V getOrComputeIfAbsent(K key, Function defaultCreator, Class requiredType); + @Nullable V getOrComputeIfAbsent(K key, + Function defaultCreator, Class requiredType); /** * Store a {@code value} for later retrieval under the supplied {@code key}. diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/CachingJupiterConfiguration.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/CachingJupiterConfiguration.java index ecab219838f3..33c927038ec3 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/CachingJupiterConfiguration.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/CachingJupiterConfiguration.java @@ -59,7 +59,7 @@ public Optional getRawConfigurationParameter(String key) { } @Override - public Optional getRawConfigurationParameter(String key, Function transformer) { + public Optional getRawConfigurationParameter(String key, Function transformer) { return delegate.getRawConfigurationParameter(key, transformer); } diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/DefaultJupiterConfiguration.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/DefaultJupiterConfiguration.java index 9dce4a7397ab..99f08e00ee4a 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/DefaultJupiterConfiguration.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/DefaultJupiterConfiguration.java @@ -120,7 +120,7 @@ public Optional getRawConfigurationParameter(String key) { } @Override - public Optional getRawConfigurationParameter(String key, Function transformer) { + public Optional getRawConfigurationParameter(String key, Function transformer) { return configurationParameters.get(key, transformer); } diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/JupiterConfiguration.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/JupiterConfiguration.java index ca4f8ff76a7d..92607e4614c3 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/JupiterConfiguration.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/JupiterConfiguration.java @@ -57,7 +57,7 @@ public interface JupiterConfiguration { Optional getRawConfigurationParameter(String key); - Optional getRawConfigurationParameter(String key, Function transformer); + Optional getRawConfigurationParameter(String key, Function transformer); boolean isParallelExecutionEnabled(); diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/AbstractExtensionContext.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/AbstractExtensionContext.java index b3497dfc0c80..d19c71845461 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/AbstractExtensionContext.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/AbstractExtensionContext.java @@ -55,8 +55,7 @@ abstract class AbstractExtensionContext implements Ext private static final Logger LOGGER = LoggerFactory.getLogger(AbstractExtensionContext.class); - @Nullable - private final ExtensionContext parent; + private final @Nullable ExtensionContext parent; private final EngineExecutionListener engineExecutionListener; private final T testDescriptor; private final Set tags; @@ -242,7 +241,8 @@ public Optional getConfigurationParameter(String key) { } @Override - public Optional getConfigurationParameter(String key, Function transformer) { + public Optional getConfigurationParameter(String key, + Function transformer) { return this.configuration.getRawConfigurationParameter(key, transformer); } diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ClassBasedTestDescriptor.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ClassBasedTestDescriptor.java index 5151d5c686a7..5aacb02d1af2 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ClassBasedTestDescriptor.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ClassBasedTestDescriptor.java @@ -61,7 +61,6 @@ import org.junit.jupiter.engine.execution.DefaultTestInstances; import org.junit.jupiter.engine.execution.ExtensionContextSupplier; import org.junit.jupiter.engine.execution.InterceptingExecutableInvoker; -import org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.ReflectiveInterceptorCall; import org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.ReflectiveInterceptorCall.VoidMethodInterceptorCall; import org.junit.jupiter.engine.execution.JupiterEngineExecutionContext; import org.junit.jupiter.engine.execution.TestInstancesProvider; @@ -94,11 +93,9 @@ public abstract class ClassBasedTestDescriptor extends JupiterTestDescriptor protected final ClassInfo classInfo; - @Nullable - private LifecycleMethods lifecycleMethods; + private @Nullable LifecycleMethods lifecycleMethods; - @Nullable - private TestInstanceFactory testInstanceFactory; + private @Nullable TestInstanceFactory testInstanceFactory; ClassBasedTestDescriptor(UniqueId uniqueId, Class testClass, Supplier displayNameSupplier, JupiterConfiguration configuration) { @@ -448,8 +445,8 @@ private void invokeBeforeAllMethods(JupiterEngineExecutionContext context) { for (Method method : requireLifecycleMethods().beforeAll) { throwableCollector.execute(() -> { try { - executableInvoker.invoke(method, testInstance, extensionContext, registry, - ReflectiveInterceptorCall.ofVoidMethod(InvocationInterceptor::interceptBeforeAllMethod)); + executableInvoker.invokeVoid(method, testInstance, extensionContext, registry, + InvocationInterceptor::interceptBeforeAllMethod); } catch (Throwable throwable) { invokeBeforeAllMethodExecutionExceptionHandlers(registry, extensionContext, throwable); @@ -476,8 +473,8 @@ private void invokeAfterAllMethods(JupiterEngineExecutionContext context) { requireLifecycleMethods().afterAll.forEach(method -> throwableCollector.execute(() -> { try { - executableInvoker.invoke(method, testInstance, extensionContext, registry, - ReflectiveInterceptorCall.ofVoidMethod(InvocationInterceptor::interceptAfterAllMethod)); + executableInvoker.invokeVoid(method, testInstance, extensionContext, registry, + InvocationInterceptor::interceptAfterAllMethod); } catch (Throwable throwable) { invokeAfterAllMethodExecutionExceptionHandlers(registry, extensionContext, throwable); @@ -549,8 +546,7 @@ private void invokeMethodInExtensionContext(Method method, ExtensionContext cont Object target = testInstances.findInstance(getTestClass()).orElseThrow( () -> new JUnitException("Failed to find instance for method: " + method.toGenericString())); - executableInvoker.invoke(method, target, context, registry, - ReflectiveInterceptorCall.ofVoidMethod(interceptorCall)); + executableInvoker.invokeVoid(method, target, context, registry, interceptorCall); } private LifecycleMethods requireLifecycleMethods() { diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ClassExtensionContext.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ClassExtensionContext.java index 157ae5ccb84c..10e987049260 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ClassExtensionContext.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ClassExtensionContext.java @@ -34,8 +34,7 @@ final class ClassExtensionContext extends AbstractExtensionContext interceptor.interceptDynamicTest(wrappedInvocation, - dynamicTestInvocationContext, extensionContext))); + interceptorChain.<@Nullable Void> invoke(toInvocation(), extensionRegistry, InterceptorCall.ofVoid(( + InvocationInterceptor interceptor, + InvocationInterceptor.Invocation<@Nullable Void> wrappedInvocation) -> interceptor.interceptDynamicTest( + wrappedInvocation, dynamicTestInvocationContext, extensionContext))); return context; } - @SuppressWarnings("NullAway") - private InvocationInterceptor.Invocation toInvocation() { + private InvocationInterceptor.Invocation<@Nullable Void> toInvocation() { return () -> { requiredDynamicTest().getExecutable().execute(); return null; diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ExtensionUtils.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ExtensionUtils.java index 4ad96e1818db..08fcb599dde0 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ExtensionUtils.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ExtensionUtils.java @@ -139,6 +139,7 @@ static void registerExtensionsFromInstanceFields(ExtensionRegistrar registrar, C /** * @since 5.11 */ + @SuppressWarnings("NullAway") private static Extension readAndValidateExtensionFromField(Field field, @Nullable Object instance, List> declarativeExtensionTypes) { Object value = tryToReadFieldValue(field, instance) // diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/MethodExtensionContext.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/MethodExtensionContext.java index 9f6711e0ea4b..5ffeb5b22988 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/MethodExtensionContext.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/MethodExtensionContext.java @@ -32,8 +32,7 @@ final class MethodExtensionContext extends AbstractExtensionContext interceptorCall = InvocationInterceptor::interceptTestFactoryMethod; private static final InterceptingExecutableInvoker executableInvoker = new InterceptingExecutableInvoker(); @@ -112,8 +111,8 @@ protected void invokeTestMethod(JupiterEngineExecutionContext context, DynamicTe context.getThrowableCollector().execute(() -> { Object instance = extensionContext.getRequiredTestInstance(); - Object testFactoryMethodResult = executableInvoker.invoke(getTestMethod(), instance, extensionContext, - context.getExtensionRegistry(), interceptorCall); + Object testFactoryMethodResult = executableInvoker.<@Nullable Object> invoke(getTestMethod(), instance, + extensionContext, context.getExtensionRegistry(), interceptorCall); TestSource defaultTestSource = getSource().orElseThrow( () -> new JUnitException("Illegal state: TestSource must be present")); try (Stream dynamicNodeStream = toDynamicNodeStream(testFactoryMethodResult)) { diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/TestMethodTestDescriptor.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/TestMethodTestDescriptor.java index 674761ffb1ba..885ae6d54cdd 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/TestMethodTestDescriptor.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/TestMethodTestDescriptor.java @@ -39,7 +39,7 @@ import org.junit.jupiter.engine.execution.AfterEachMethodAdapter; import org.junit.jupiter.engine.execution.BeforeEachMethodAdapter; import org.junit.jupiter.engine.execution.InterceptingExecutableInvoker; -import org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.ReflectiveInterceptorCall; +import org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.ReflectiveInterceptorCall.VoidMethodInterceptorCall; import org.junit.jupiter.engine.execution.JupiterEngineExecutionContext; import org.junit.jupiter.engine.extension.ExtensionRegistry; import org.junit.jupiter.engine.extension.MutableExtensionRegistry; @@ -72,10 +72,8 @@ public class TestMethodTestDescriptor extends MethodBasedTestDescriptor { public static final String SEGMENT_TYPE = "method"; private static final InterceptingExecutableInvoker executableInvoker = new InterceptingExecutableInvoker(); - private static final ReflectiveInterceptorCall defaultInterceptorCall = ReflectiveInterceptorCall.ofVoidMethod( - InvocationInterceptor::interceptTestMethod); - - private final ReflectiveInterceptorCall interceptorCall; + private static final VoidMethodInterceptorCall defaultInterceptorCall = InvocationInterceptor::interceptTestMethod; + private final VoidMethodInterceptorCall interceptorCall; public TestMethodTestDescriptor(UniqueId uniqueId, Class testClass, Method testMethod, Supplier>> enclosingInstanceTypes, JupiterConfiguration configuration) { @@ -89,7 +87,7 @@ public TestMethodTestDescriptor(UniqueId uniqueId, Class testClass, Method te } TestMethodTestDescriptor(UniqueId uniqueId, String displayName, Class testClass, Method testMethod, - JupiterConfiguration configuration, ReflectiveInterceptorCall interceptorCall) { + JupiterConfiguration configuration, VoidMethodInterceptorCall interceptorCall) { super(uniqueId, displayName, testClass, testMethod, configuration); this.interceptorCall = interceptorCall; } @@ -218,7 +216,7 @@ protected void invokeTestMethod(JupiterEngineExecutionContext context, DynamicTe try { Method testMethod = getTestMethod(); Object instance = extensionContext.getRequiredTestInstance(); - executableInvoker.invoke(testMethod, instance, extensionContext, context.getExtensionRegistry(), + executableInvoker.invokeVoid(testMethod, instance, extensionContext, context.getExtensionRegistry(), interceptorCall); } catch (Throwable throwable) { diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/TestTemplateExtensionContext.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/TestTemplateExtensionContext.java index 1a947e808d74..4074a8788de0 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/TestTemplateExtensionContext.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/TestTemplateExtensionContext.java @@ -29,8 +29,7 @@ */ final class TestTemplateExtensionContext extends AbstractExtensionContext { - @Nullable - private final TestInstances testInstances; + private final @Nullable TestInstances testInstances; TestTemplateExtensionContext(ExtensionContext parent, EngineExecutionListener engineExecutionListener, TestTemplateTestDescriptor testDescriptor, JupiterConfiguration configuration, diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/TestTemplateInvocationTestDescriptor.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/TestTemplateInvocationTestDescriptor.java index d768a62cfa97..f33a4a035f82 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/TestTemplateInvocationTestDescriptor.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/TestTemplateInvocationTestDescriptor.java @@ -24,7 +24,7 @@ import org.junit.jupiter.api.extension.InvocationInterceptor; import org.junit.jupiter.api.extension.TestTemplateInvocationContext; import org.junit.jupiter.engine.config.JupiterConfiguration; -import org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.ReflectiveInterceptorCall; +import org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.ReflectiveInterceptorCall.VoidMethodInterceptorCall; import org.junit.jupiter.engine.execution.JupiterEngineExecutionContext; import org.junit.jupiter.engine.extension.MutableExtensionRegistry; import org.junit.platform.engine.TestDescriptor; @@ -41,11 +41,9 @@ public class TestTemplateInvocationTestDescriptor extends TestMethodTestDescriptor { public static final String SEGMENT_TYPE = "test-template-invocation"; - private static final ReflectiveInterceptorCall interceptorCall = ReflectiveInterceptorCall.ofVoidMethod( - InvocationInterceptor::interceptTestTemplateMethod); + private static final VoidMethodInterceptorCall interceptorCall = InvocationInterceptor::interceptTestTemplateMethod; - @Nullable - private TestTemplateInvocationContext invocationContext; + private @Nullable TestTemplateInvocationContext invocationContext; private final int index; diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/execution/InterceptingExecutableInvoker.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/execution/InterceptingExecutableInvoker.java index 8a9a25968973..416131d853cf 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/execution/InterceptingExecutableInvoker.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/execution/InterceptingExecutableInvoker.java @@ -25,6 +25,7 @@ import org.junit.jupiter.api.extension.InvocationInterceptor.Invocation; import org.junit.jupiter.api.extension.ParameterResolver; import org.junit.jupiter.api.extension.ReflectiveInvocationContext; +import org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.ReflectiveInterceptorCall.VoidMethodInterceptorCall; import org.junit.jupiter.engine.extension.ExtensionRegistry; /** @@ -65,6 +66,12 @@ public T invoke(Constructor constructor, Optional outerInstance, return invoke(invocation, invocation, extensionContext, extensionRegistry, interceptorCall); } + public void invokeVoid(Method method, @Nullable Object target, ExtensionContext extensionContext, + ExtensionRegistry extensionRegistry, VoidMethodInterceptorCall interceptorCall) { + this.<@Nullable Void> invoke(method, target, extensionContext, extensionRegistry, + ReflectiveInterceptorCall.ofVoidMethod(interceptorCall)); + } + /** * Invoke the supplied method with dynamic parameter resolution. * @@ -78,8 +85,9 @@ public T invoke(Constructor constructor, Optional outerInstance, * @param interceptorCall the call for intercepting this method invocation * via all registered {@linkplain InvocationInterceptor interceptors} */ - public T invoke(Method method, @Nullable Object target, ExtensionContext extensionContext, - ExtensionRegistry extensionRegistry, ReflectiveInterceptorCall interceptorCall) { + public T invoke(Method method, @Nullable Object target, + ExtensionContext extensionContext, ExtensionRegistry extensionRegistry, + ReflectiveInterceptorCall interceptorCall) { @SuppressWarnings({ "unchecked", "rawtypes" }) Optional optionalTarget = (target instanceof Optional optional ? optional @@ -110,7 +118,6 @@ public interface ReflectiveInterceptorCall invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable; - @SuppressWarnings("NullAway") static ReflectiveInterceptorCall ofVoidMethod(VoidMethodInterceptorCall call) { return ((interceptorChain, invocation, invocationContext, extensionContext) -> { call.apply(interceptorChain, invocation, invocationContext, extensionContext); diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/execution/InvocationInterceptorChain.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/execution/InvocationInterceptorChain.java index f066298ade98..52a7fb65e12a 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/execution/InvocationInterceptorChain.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/execution/InvocationInterceptorChain.java @@ -30,7 +30,8 @@ @API(status = INTERNAL, since = "5.5") public class InvocationInterceptorChain { - public T invoke(Invocation invocation, ExtensionRegistry extensionRegistry, InterceptorCall call) { + public T invoke(Invocation invocation, ExtensionRegistry extensionRegistry, + InterceptorCall call) { List interceptors = extensionRegistry.getExtensions(InvocationInterceptor.class); if (interceptors.isEmpty()) { return proceed(invocation); @@ -74,12 +75,11 @@ public interface InterceptorCall { T apply(InvocationInterceptor interceptor, Invocation invocation) throws Throwable; - @SuppressWarnings("NullAway") static InterceptorCall<@Nullable Void> ofVoid(VoidInterceptorCall call) { - return ((interceptorChain, invocation) -> { + return (InvocationInterceptor interceptorChain, Invocation<@Nullable Void> invocation) -> { call.apply(interceptorChain, invocation); return null; - }); + }; } } diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/execution/NamespaceAwareStore.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/execution/NamespaceAwareStore.java index 59897452d19d..88535ea14931 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/execution/NamespaceAwareStore.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/execution/NamespaceAwareStore.java @@ -41,49 +41,59 @@ public NamespaceAwareStore(NamespacedHierarchicalStore valuesStore, N @Override public @Nullable Object get(Object key) { Preconditions.notNull(key, "key must not be null"); - return accessStore(() -> this.valuesStore.get(this.namespace, key)); + Supplier<@Nullable Object> action = () -> this.valuesStore.get(this.namespace, key); + return accessStore(action); } @Override public @Nullable T get(Object key, Class requiredType) { Preconditions.notNull(key, "key must not be null"); Preconditions.notNull(requiredType, "requiredType must not be null"); - return accessStore(() -> this.valuesStore.get(this.namespace, key, requiredType)); + Supplier<@Nullable T> action = () -> this.valuesStore.get(this.namespace, key, requiredType); + return accessStore(action); } @Override - public @Nullable Object getOrComputeIfAbsent(K key, Function defaultCreator) { + public @Nullable Object getOrComputeIfAbsent(K key, + Function defaultCreator) { Preconditions.notNull(key, "key must not be null"); Preconditions.notNull(defaultCreator, "defaultCreator function must not be null"); - return accessStore(() -> this.valuesStore.getOrComputeIfAbsent(this.namespace, key, defaultCreator)); + Supplier<@Nullable Object> action = () -> this.valuesStore.getOrComputeIfAbsent(this.namespace, key, + defaultCreator); + return accessStore(action); } @Override - public @Nullable V getOrComputeIfAbsent(K key, Function defaultCreator, Class requiredType) { + public @Nullable V getOrComputeIfAbsent(K key, + Function defaultCreator, Class requiredType) { Preconditions.notNull(key, "key must not be null"); Preconditions.notNull(defaultCreator, "defaultCreator function must not be null"); Preconditions.notNull(requiredType, "requiredType must not be null"); - return accessStore( - () -> this.valuesStore.getOrComputeIfAbsent(this.namespace, key, defaultCreator, requiredType)); + Supplier<@Nullable V> action = () -> this.valuesStore.getOrComputeIfAbsent(this.namespace, key, defaultCreator, + requiredType); + return accessStore(action); } @Override public void put(Object key, @Nullable Object value) { Preconditions.notNull(key, "key must not be null"); - accessStore(() -> this.valuesStore.put(this.namespace, key, value)); + Supplier<@Nullable Object> action = () -> this.valuesStore.put(this.namespace, key, value); + accessStore(action); } @Override public @Nullable Object remove(Object key) { Preconditions.notNull(key, "key must not be null"); - return accessStore(() -> this.valuesStore.remove(this.namespace, key)); + Supplier<@Nullable Object> action = () -> this.valuesStore.remove(this.namespace, key); + return accessStore(action); } @Override public @Nullable T remove(Object key, Class requiredType) { Preconditions.notNull(key, "key must not be null"); Preconditions.notNull(requiredType, "requiredType must not be null"); - return accessStore(() -> this.valuesStore.remove(this.namespace, key, requiredType)); + Supplier<@Nullable T> action = () -> this.valuesStore.remove(this.namespace, key, requiredType); + return accessStore(action); } private @Nullable T accessStore(Supplier<@Nullable T> action) { diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/SeparateThreadTimeoutInvocation.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/SeparateThreadTimeoutInvocation.java index d9783d1b7942..03635bddcc08 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/SeparateThreadTimeoutInvocation.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/SeparateThreadTimeoutInvocation.java @@ -37,9 +37,10 @@ class SeparateThreadTimeoutInvocation implements Inv } @Override + @SuppressWarnings("NullAway") public T proceed() throws Throwable { return assertTimeoutPreemptively(timeout.toDuration(), delegate::proceed, descriptionSupplier, - (__, messageSupplier, cause, testThread) -> { + (__, ___, cause, testThread) -> { TimeoutException exception = TimeoutExceptionFactory.create(descriptionSupplier.get(), timeout, null); if (testThread != null) { preInterruptCallback.executePreInterruptCallback(testThread, exception::addSuppressed); diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/TimeoutExtension.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/TimeoutExtension.java index c0b32bf4303d..5dee4c1c2f93 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/TimeoutExtension.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/TimeoutExtension.java @@ -71,7 +71,7 @@ private void readAndStoreTimeoutSoChildrenInheritIt(ExtensionContext context) { } @Override - public void interceptBeforeAllMethod(Invocation invocation, + public void interceptBeforeAllMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { interceptLifecycleMethod(invocation, invocationContext, extensionContext, @@ -79,7 +79,7 @@ public void interceptBeforeAllMethod(Invocation invocation, } @Override - public void interceptBeforeEachMethod(Invocation invocation, + public void interceptBeforeEachMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { interceptLifecycleMethod(invocation, invocationContext, extensionContext, @@ -87,52 +87,53 @@ public void interceptBeforeEachMethod(Invocation invocation, } @Override - public void interceptTestMethod(Invocation invocation, ReflectiveInvocationContext invocationContext, - ExtensionContext extensionContext) throws Throwable { + public void interceptTestMethod(Invocation<@Nullable Void> invocation, + ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { - interceptTestableMethod(invocation, invocationContext, extensionContext, + this.<@Nullable Void> interceptTestableMethod(invocation, invocationContext, extensionContext, TimeoutConfiguration::getDefaultTestMethodTimeout); } @Override - public void interceptTestTemplateMethod(Invocation invocation, + public void interceptTestTemplateMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { - interceptTestableMethod(invocation, invocationContext, extensionContext, + this.<@Nullable Void> interceptTestableMethod(invocation, invocationContext, extensionContext, TimeoutConfiguration::getDefaultTestTemplateMethodTimeout); } @Override - public T interceptTestFactoryMethod(Invocation invocation, + public T interceptTestFactoryMethod(Invocation invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { - return interceptTestableMethod(invocation, invocationContext, extensionContext, + return this. interceptTestableMethod(invocation, invocationContext, extensionContext, TimeoutConfiguration::getDefaultTestFactoryMethodTimeout); } @Override - public void interceptAfterEachMethod(Invocation invocation, + public void interceptAfterEachMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { - interceptLifecycleMethod(invocation, invocationContext, extensionContext, + this.<@Nullable Void> interceptLifecycleMethod(invocation, invocationContext, extensionContext, TimeoutConfiguration::getDefaultAfterEachMethodTimeout); } @Override - public void interceptAfterAllMethod(Invocation invocation, + public void interceptAfterAllMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { - interceptLifecycleMethod(invocation, invocationContext, extensionContext, + this.<@Nullable Void> interceptLifecycleMethod(invocation, invocationContext, extensionContext, TimeoutConfiguration::getDefaultAfterAllMethodTimeout); } - private void interceptLifecycleMethod(Invocation invocation, + private void interceptLifecycleMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext, TimeoutProvider defaultTimeoutProvider) throws Throwable { TimeoutDuration timeout = readTimeoutFromAnnotation(Optional.of(invocationContext.getExecutable())).orElse( null); - intercept(invocation, invocationContext, extensionContext, timeout, defaultTimeoutProvider); + this.<@Nullable Void> intercept(invocation, invocationContext, extensionContext, timeout, + defaultTimeoutProvider); } @SuppressWarnings("OptionalUsedAsFieldOrParameterType") @@ -145,7 +146,7 @@ private Optional readTimeoutThreadModeFromAnnotation(Optional T interceptTestableMethod(Invocation invocation, + private T interceptTestableMethod(Invocation invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext, TimeoutProvider defaultTimeoutProvider) throws Throwable { @@ -154,9 +155,9 @@ private T interceptTestableMethod(Invocation invocation, return intercept(invocation, invocationContext, extensionContext, timeout, defaultTimeoutProvider); } - private T intercept(Invocation invocation, ReflectiveInvocationContext invocationContext, - ExtensionContext extensionContext, @Nullable TimeoutDuration explicitTimeout, - TimeoutProvider defaultTimeoutProvider) throws Throwable { + private T intercept(Invocation invocation, + ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext, + @Nullable TimeoutDuration explicitTimeout, TimeoutProvider defaultTimeoutProvider) throws Throwable { TimeoutDuration timeout = explicitTimeout == null ? getDefaultTimeout(extensionContext, defaultTimeoutProvider) : explicitTimeout; @@ -175,8 +176,9 @@ private TimeoutConfiguration getGlobalTimeoutConfiguration(ExtensionContext exte key -> new TimeoutConfiguration(root), TimeoutConfiguration.class)); } - private Invocation decorate(Invocation invocation, ReflectiveInvocationContext invocationContext, - ExtensionContext extensionContext, @Nullable TimeoutDuration timeout) { + private Invocation decorate(Invocation invocation, + ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext, + @Nullable TimeoutDuration timeout) { if (timeout == null || isTimeoutDisabled(extensionContext)) { return invocation; diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/TimeoutInvocationFactory.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/TimeoutInvocationFactory.java index 7843c012711b..41312b59d622 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/TimeoutInvocationFactory.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/TimeoutInvocationFactory.java @@ -10,6 +10,8 @@ package org.junit.jupiter.engine.extension; +import static java.util.Objects.requireNonNull; + import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -48,7 +50,7 @@ Invocation create(ThreadMode threadMode, TimeoutInvocationParameters t } private ScheduledExecutorService getThreadExecutorForSameThreadInvocation() { - return store.getOrComputeIfAbsent(SingleThreadExecutorResource.class).get(); + return requireNonNull(store.getOrComputeIfAbsent(SingleThreadExecutorResource.class)).get(); } @SuppressWarnings({ "deprecation", "try" }) diff --git a/junit-jupiter-params/src/main/java/org/junit/jupiter/params/ResolutionCache.java b/junit-jupiter-params/src/main/java/org/junit/jupiter/params/ResolutionCache.java index b692cb5a0e5d..ac013d0ceb70 100644 --- a/junit-jupiter-params/src/main/java/org/junit/jupiter/params/ResolutionCache.java +++ b/junit-jupiter-params/src/main/java/org/junit/jupiter/params/ResolutionCache.java @@ -29,14 +29,14 @@ static ResolutionCache enabled() { ResolutionCache DISABLED = (__, resolver) -> resolver.get(); @Nullable - Object resolve(ParameterDeclaration declaration, Supplier<@Nullable Object> resolver); + Object resolve(ParameterDeclaration declaration, Supplier resolver); class Concurrent implements ResolutionCache { private final Map cache = new ConcurrentHashMap<>(); @Override - public Object resolve(ParameterDeclaration declaration, Supplier resolver) { + public @Nullable Object resolve(ParameterDeclaration declaration, Supplier resolver) { return cache.computeIfAbsent(declaration, __ -> resolver.get()); } } diff --git a/junit-jupiter-params/src/main/java/org/junit/jupiter/params/ResolverFacade.java b/junit-jupiter-params/src/main/java/org/junit/jupiter/params/ResolverFacade.java index 594c3a7bfd49..3aebf1fe27b1 100644 --- a/junit-jupiter-params/src/main/java/org/junit/jupiter/params/ResolverFacade.java +++ b/junit-jupiter-params/src/main/java/org/junit/jupiter/params/ResolverFacade.java @@ -241,7 +241,7 @@ ArgumentSetLifecycleMethod.ParameterResolver createLifecycleMethodParameterResol .call(() -> configurationErrorOrSuccess(errors, () -> new DefaultArgumentSetLifecycleMethodParameterResolver(originalResolverFacade, lifecycleMethodResolverFacade, parameterDeclarationMapping))) // - .getOrThrow(cause -> new ExtensionConfigurationException( + .getNonNullOrThrow(cause -> new ExtensionConfigurationException( "Invalid @%s lifecycle method declaration: %s".formatted( annotation.annotationType().getSimpleName(), method.toGenericString()), cause)); diff --git a/junit-jupiter-params/src/main/java/org/junit/jupiter/params/aggregator/DefaultArgumentsAccessor.java b/junit-jupiter-params/src/main/java/org/junit/jupiter/params/aggregator/DefaultArgumentsAccessor.java index f33ac3dbdf0e..80376859b3da 100644 --- a/junit-jupiter-params/src/main/java/org/junit/jupiter/params/aggregator/DefaultArgumentsAccessor.java +++ b/junit-jupiter-params/src/main/java/org/junit/jupiter/params/aggregator/DefaultArgumentsAccessor.java @@ -53,15 +53,16 @@ public static DefaultArgumentsAccessor create(ExtensionContext context, int invo private DefaultArgumentsAccessor(BiFunction<@Nullable Object, Class, @Nullable Object> converter, int invocationIndex, @Nullable Object... arguments) { + Preconditions.notNull(converter, "Converter must not be null"); Preconditions.condition(invocationIndex >= 1, () -> "Invocation index must be >= 1"); - this.converter = Preconditions.notNull(converter, "Converter must not be null"); + Preconditions.notNull(arguments, "Arguments array must not be null"); + this.converter = converter; this.invocationIndex = invocationIndex; - this.arguments = Preconditions.notNull(arguments, "Arguments array must not be null"); + this.arguments = arguments; } @Override - @Nullable - public Object get(int index) { + public @Nullable Object get(int index) { Preconditions.condition(index >= 0 && index < this.arguments.length, () -> "index must be >= 0 and < %d".formatted(this.arguments.length)); return this.arguments[index]; @@ -140,7 +141,7 @@ public int size() { @Override public List<@Nullable Object> toList() { - return Collections.unmodifiableList(Arrays.asList(this.arguments)); + return Collections.<@Nullable Object> unmodifiableList(Arrays.asList(this.arguments)); } @Override diff --git a/junit-jupiter-params/src/main/java/org/junit/jupiter/params/converter/AnnotationBasedArgumentConverter.java b/junit-jupiter-params/src/main/java/org/junit/jupiter/params/converter/AnnotationBasedArgumentConverter.java index ca1d68bb6aca..2696d6c5544b 100644 --- a/junit-jupiter-params/src/main/java/org/junit/jupiter/params/converter/AnnotationBasedArgumentConverter.java +++ b/junit-jupiter-params/src/main/java/org/junit/jupiter/params/converter/AnnotationBasedArgumentConverter.java @@ -36,8 +36,7 @@ public abstract class AnnotationBasedArgumentConverter implements ArgumentConverter, AnnotationConsumer { - @Nullable - private A annotation; + private @Nullable A annotation; public AnnotationBasedArgumentConverter() { } diff --git a/junit-jupiter-params/src/main/java/org/junit/jupiter/params/provider/CsvArgumentsProvider.java b/junit-jupiter-params/src/main/java/org/junit/jupiter/params/provider/CsvArgumentsProvider.java index 9ec3aa038417..9a165795369e 100644 --- a/junit-jupiter-params/src/main/java/org/junit/jupiter/params/provider/CsvArgumentsProvider.java +++ b/junit-jupiter-params/src/main/java/org/junit/jupiter/params/provider/CsvArgumentsProvider.java @@ -58,7 +58,7 @@ private Stream parseTextBlock(CsvSource csvSource, CsvParser csvParse List argumentsList = new ArrayList<>(); try { - List<@Nullable String[]> csvRecords = csvParser.parseAll(new StringReader(textBlock)); + List<@Nullable String[]> csvRecords = parseAll(csvParser, textBlock); String[] headers = useHeadersInDisplayName ? getHeaders(csvParser) : null; AtomicInteger index = new AtomicInteger(0); @@ -76,6 +76,11 @@ private Stream parseTextBlock(CsvSource csvSource, CsvParser csvParse return argumentsList.stream(); } + @SuppressWarnings("NullAway") + private static List<@Nullable String[]> parseAll(CsvParser csvParser, String textBlock) { + return csvParser.parseAll(new StringReader(textBlock)); + } + private Stream parseValueArray(CsvSource csvSource, CsvParser csvParser, Set nullValues) { boolean useHeadersInDisplayName = csvSource.useHeadersInDisplayName(); List argumentsList = new ArrayList<>(); @@ -142,9 +147,8 @@ static Arguments processCsvRecord(@Nullable String[] csvRecord, Set null return Arguments.of(arguments); } - @SuppressWarnings("NullAway") private static Named<@Nullable Object> asNamed(String name, @Nullable Object column) { - return Named.of(name, column); + return Named.<@Nullable Object> of(name, column); } /** diff --git a/junit-jupiter-params/src/main/java/org/junit/jupiter/params/provider/FieldArgumentsProvider.java b/junit-jupiter-params/src/main/java/org/junit/jupiter/params/provider/FieldArgumentsProvider.java index 3aaa3e8e7673..fb4b47373981 100644 --- a/junit-jupiter-params/src/main/java/org/junit/jupiter/params/provider/FieldArgumentsProvider.java +++ b/junit-jupiter-params/src/main/java/org/junit/jupiter/params/provider/FieldArgumentsProvider.java @@ -105,6 +105,7 @@ private static Field validateField(Field field, @Nullable Object testInstance) { return field; } + @SuppressWarnings("NullAway") private static Object readField(Field field, @Nullable Object testInstance) { Object value = ReflectionSupport.tryToReadFieldValue(field, testInstance).getOrThrow( cause -> new JUnitException("Could not read field [%s]".formatted(field.getName()), cause)); diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/function/Try.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/function/Try.java index 31f8f172efc3..115ccb8e8ef2 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/function/Try.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/function/Try.java @@ -55,7 +55,7 @@ public abstract class Try { * @see #success(Object) * @see #failure(Exception) */ - public static Try call(Callable action) { + public static Try call(Callable action) { checkNotNull(action, "action"); return Try.of(() -> success(action.call())); } @@ -193,7 +193,7 @@ private Try() { */ @API(status = EXPERIMENTAL, since = "6.0") public final @NonNull V getNonNullOrThrow( - Function exceptionTransformer) throws E { + Function<@Nullable Exception, E> exceptionTransformer) throws E { var value = getOrThrow(exceptionTransformer); if (value == null) { throw exceptionTransformer.apply(null); diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/logging/LoggerFactory.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/logging/LoggerFactory.java index ee37d83db1c9..711b42d6c658 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/logging/LoggerFactory.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/logging/LoggerFactory.java @@ -145,7 +145,7 @@ public void trace(@Nullable Throwable throwable, Supplier messageSupplie private void log(Level level, @Nullable Throwable throwable, Supplier messageSupplier) { boolean loggable = this.julLogger.isLoggable(level); if (loggable || !listeners.isEmpty()) { - LogRecord logRecord = createLogRecord(level, throwable, nullSafeGet(messageSupplier)); + LogRecord logRecord = createLogRecord(level, throwable, messageSupplier.get()); if (loggable) { this.julLogger.log(logRecord); } @@ -153,7 +153,7 @@ private void log(Level level, @Nullable Throwable throwable, Supplier me } } - private LogRecord createLogRecord(Level level, @Nullable Throwable throwable, @Nullable String message) { + private LogRecord createLogRecord(Level level, @Nullable Throwable throwable, String message) { String sourceClassName = null; String sourceMethodName = null; boolean found = false; @@ -180,10 +180,6 @@ else if (found) { return logRecord; } - private static @Nullable String nullSafeGet(@Nullable Supplier<@Nullable String> messageSupplier) { - return (messageSupplier != null ? messageSupplier.get() : null); - } - } } diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/conversion/FallbackStringToObjectConverter.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/conversion/FallbackStringToObjectConverter.java index b7f96707a52e..916406e3fbcb 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/conversion/FallbackStringToObjectConverter.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/conversion/FallbackStringToObjectConverter.java @@ -76,8 +76,7 @@ public boolean canConvertTo(Class targetType) { } @Override - @Nullable - public Object convert(String source, Class targetType) throws Exception { + public @Nullable Object convert(String source, Class targetType) throws Exception { Function executable = findFactoryExecutable(targetType); Preconditions.condition(executable != NULL_EXECUTABLE, "Illegal state: convert() must not be called if canConvert() returned false"); diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/KotlinReflectionUtils.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/KotlinReflectionUtils.java index 99975cd24a1c..926ae651ee99 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/KotlinReflectionUtils.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/KotlinReflectionUtils.java @@ -30,10 +30,8 @@ @API(status = INTERNAL, since = "6.0") public class KotlinReflectionUtils { - @Nullable - private static final Class kotlinMetadata; - @Nullable - private static final Class kotlinCoroutineContinuation; + private static final @Nullable Class kotlinMetadata; + private static final @Nullable Class kotlinCoroutineContinuation; private static final boolean kotlinReflectPresent; private static final boolean kotlinxCoroutinesPresent; diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java index 2d7c11e3eace..4fc356365cb2 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java @@ -637,6 +637,7 @@ public static Try tryToReadFieldValue(Class clazz, String fieldNa * @see #tryToReadFieldValue(Class, String, Object) */ @API(status = INTERNAL, since = "1.4") + @SuppressWarnings("NullAway") public static Try<@Nullable Object> tryToReadFieldValue(Field field, @Nullable Object instance) { Preconditions.notNull(field, "Field must not be null"); Preconditions.condition((instance != null || isStatic(field)), @@ -673,6 +674,7 @@ public static Try tryToReadFieldValue(Class clazz, String fieldNa * @return an immutable list of the values of the specified fields; never * {@code null} but may be empty or contain {@code null} entries */ + @SuppressWarnings("NullAway") public static List<@Nullable Object> readFieldValues(List fields, @Nullable Object instance, Predicate predicate) { Preconditions.notNull(fields, "fields list must not be null"); diff --git a/junit-platform-commons/src/testFixtures/java/org/junit/platform/commons/test/ConcurrencyTestingUtils.java b/junit-platform-commons/src/testFixtures/java/org/junit/platform/commons/test/ConcurrencyTestingUtils.java index ca1474c2e372..6f63ab1d7432 100644 --- a/junit-platform-commons/src/testFixtures/java/org/junit/platform/commons/test/ConcurrencyTestingUtils.java +++ b/junit-platform-commons/src/testFixtures/java/org/junit/platform/commons/test/ConcurrencyTestingUtils.java @@ -26,13 +26,14 @@ public class ConcurrencyTestingUtils { public static void executeConcurrently(int threads, Runnable action) throws Exception { - executeConcurrently(threads, () -> { + ConcurrencyTestingUtils.<@Nullable Object> executeConcurrently(threads, () -> { action.run(); return null; }); } - public static List executeConcurrently(int threads, Callable<@Nullable T> action) throws Exception { + public static List executeConcurrently(int threads, Callable action) + throws Exception { ExecutorService executorService = Executors.newFixedThreadPool(threads); try { CountDownLatch latch = new CountDownLatch(threads); diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/options/CommandResult.java b/junit-platform-console/src/main/java/org/junit/platform/console/options/CommandResult.java index 2044347f8265..ff0031b9e5ec 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/options/CommandResult.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/options/CommandResult.java @@ -47,8 +47,7 @@ public static CommandResult create(int exitCode, @Nullable T value) { private final int exitCode; - @Nullable - private final T value; + private final @Nullable T value; private CommandResult(int exitCode, @Nullable T value) { this.exitCode = exitCode; diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/options/TestConsoleOutputOptions.java b/junit-platform-console/src/main/java/org/junit/platform/console/options/TestConsoleOutputOptions.java index 235588768f12..396f74fd7cef 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/options/TestConsoleOutputOptions.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/options/TestConsoleOutputOptions.java @@ -30,18 +30,15 @@ public class TestConsoleOutputOptions { private boolean ansiColorOutputDisabled; - @Nullable - private Path colorPalettePath; + private @Nullable Path colorPalettePath; private boolean isSingleColorPalette; private Details details = DEFAULT_DETAILS; private Theme theme = DEFAULT_THEME; - @Nullable - private Path stdoutPath; + private @Nullable Path stdoutPath; - @Nullable - private Path stderrPath; + private @Nullable Path stderrPath; public boolean isAnsiColorOutputDisabled() { return this.ansiColorOutputDisabled; diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/options/TestDiscoveryOptions.java b/junit-platform-console/src/main/java/org/junit/platform/console/options/TestDiscoveryOptions.java index 93e9a77d3366..3e368c90ae94 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/options/TestDiscoveryOptions.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/options/TestDiscoveryOptions.java @@ -47,8 +47,7 @@ public class TestDiscoveryOptions { private boolean scanClasspath; private List additionalClasspathEntries = emptyList(); - @Nullable - private List selectedClasspathEntries = emptyList(); + private @Nullable List selectedClasspathEntries = emptyList(); private boolean scanModulepath; diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/StandardStreamsHandler.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/StandardStreamsHandler.java index 9cb91fce9418..5f7b8bca1307 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/StandardStreamsHandler.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/StandardStreamsHandler.java @@ -20,11 +20,9 @@ class StandardStreamsHandler implements AutoCloseable { - @Nullable - private PrintStream stdout; + private @Nullable PrintStream stdout; - @Nullable - private PrintStream stderr; + private @Nullable PrintStream stderr; public StandardStreamsHandler() { } diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/TestFeedPrintingListener.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/TestFeedPrintingListener.java index b549494b0507..cfe4ecb37a60 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/TestFeedPrintingListener.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/TestFeedPrintingListener.java @@ -32,8 +32,7 @@ class TestFeedPrintingListener implements DetailsPrintingListener { private final PrintWriter out; private final ColorPalette colorPalette; - @Nullable - private TestPlan testPlan; + private @Nullable TestPlan testPlan; TestFeedPrintingListener(PrintWriter out, ColorPalette colorPalette) { this.out = out; diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/TreeNode.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/TreeNode.java index 55e05009a24f..03de24ef6bd4 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/TreeNode.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/TreeNode.java @@ -32,14 +32,11 @@ class TreeNode { private final long creation; long duration; - @Nullable - private String reason; + private @Nullable String reason; - @Nullable - private TestIdentifier identifier; + private @Nullable TestIdentifier identifier; - @Nullable - private TestExecutionResult result; + private @Nullable TestExecutionResult result; final Queue reports = new ConcurrentLinkedQueue<>(); final Queue files = new ConcurrentLinkedQueue<>(); diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/TreePrintingListener.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/TreePrintingListener.java index d8d7130e400a..36351d035a0a 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/TreePrintingListener.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/TreePrintingListener.java @@ -34,8 +34,7 @@ class TreePrintingListener implements DetailsPrintingListener { private final Map nodesByUniqueId = new ConcurrentHashMap<>(); private final TreePrinter treePrinter; - @Nullable - private TreeNode root; + private @Nullable TreeNode root; TreePrintingListener(PrintWriter out, ColorPalette colorPalette, Theme theme) { this.treePrinter = new TreePrinter(out, theme, colorPalette); diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/ConfigurationParameters.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/ConfigurationParameters.java index d721066ce792..48f2b3d1b0bb 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/ConfigurationParameters.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/ConfigurationParameters.java @@ -117,7 +117,7 @@ public interface ConfigurationParameters { * @see #CONFIG_FILE_NAME */ @API(status = STABLE, since = "1.3") - default Optional get(String key, Function transformer) { + default Optional get(String key, Function transformer) { Preconditions.notNull(transformer, "transformer must not be null"); return get(key).map(input -> { try { diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/DefaultDiscoveryIssue.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/DefaultDiscoveryIssue.java index c0c2b7647d8d..1f82ef3487b2 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/DefaultDiscoveryIssue.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/DefaultDiscoveryIssue.java @@ -24,11 +24,9 @@ final class DefaultDiscoveryIssue implements DiscoveryIssue { private final Severity severity; private final String message; - @Nullable - private final TestSource source; + private final @Nullable TestSource source; - @Nullable - private final Throwable cause; + private final @Nullable Throwable cause; DefaultDiscoveryIssue(Builder builder) { this.severity = builder.severity; diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/ExecutionRequest.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/ExecutionRequest.java index 7bff6ea78605..0649cec4f867 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/ExecutionRequest.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/ExecutionRequest.java @@ -43,11 +43,9 @@ public class ExecutionRequest { private final EngineExecutionListener engineExecutionListener; private final ConfigurationParameters configurationParameters; - @Nullable - private final OutputDirectoryProvider outputDirectoryProvider; + private final @Nullable OutputDirectoryProvider outputDirectoryProvider; - @Nullable - private final NamespacedHierarchicalStore requestLevelStore; + private final @Nullable NamespacedHierarchicalStore requestLevelStore; @Deprecated @API(status = DEPRECATED, since = "1.11") diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/SelectorResolutionResult.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/SelectorResolutionResult.java index 2b2b1a2f0951..8ddad4ab5560 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/SelectorResolutionResult.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/SelectorResolutionResult.java @@ -88,8 +88,7 @@ public static SelectorResolutionResult failed(Throwable throwable) { private final Status status; - @Nullable - private final Throwable throwable; + private final @Nullable Throwable throwable; private SelectorResolutionResult(Status status, @Nullable Throwable throwable) { this.status = status; diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/TestExecutionResult.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/TestExecutionResult.java index 2052cf360459..f7e2ddcd889b 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/TestExecutionResult.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/TestExecutionResult.java @@ -96,8 +96,7 @@ public static TestExecutionResult failed(@Nullable Throwable throwable) { private final Status status; - @Nullable - private final Throwable throwable; + private final @Nullable Throwable throwable; private TestExecutionResult(Status status, @Nullable Throwable throwable) { this.status = Preconditions.notNull(status, "Status must not be null"); diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/UniqueId.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/UniqueId.java index ab5a002a64c2..c60e716d54ec 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/UniqueId.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/UniqueId.java @@ -91,8 +91,7 @@ public static UniqueId root(String segmentType, String value) { private transient int hashCode; // lazily computed - @Nullable - private transient SoftReference toString; + private transient @Nullable SoftReference toString; private UniqueId(UniqueIdFormat uniqueIdFormat, Segment segment) { this(uniqueIdFormat, List.of(segment)); diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/ClassSelector.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/ClassSelector.java index 06e5d605a249..2c47fd7d3d08 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/ClassSelector.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/ClassSelector.java @@ -48,13 +48,11 @@ @API(status = STABLE, since = "1.0") public class ClassSelector implements DiscoverySelector { - @Nullable - private final ClassLoader classLoader; + private final @Nullable ClassLoader classLoader; private final String className; - @Nullable - private Class javaClass; + private @Nullable Class javaClass; ClassSelector(@Nullable ClassLoader classLoader, String className) { this.className = className; diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/ClasspathResourceSelector.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/ClasspathResourceSelector.java index 774b917d2267..4f77553882b2 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/ClasspathResourceSelector.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/ClasspathResourceSelector.java @@ -57,11 +57,9 @@ public class ClasspathResourceSelector implements DiscoverySelector { private final String classpathResourceName; - @Nullable - private final FilePosition position; + private final @Nullable FilePosition position; - @Nullable - private Set classpathResources; + private @Nullable Set classpathResources; ClasspathResourceSelector(String classpathResourceName, @Nullable FilePosition position) { boolean startsWithSlash = classpathResourceName.startsWith("/"); diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/FilePosition.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/FilePosition.java index eed02fb5ecc7..74973ef3fa90 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/FilePosition.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/FilePosition.java @@ -123,8 +123,7 @@ else if (column == null && "column".equals(key)) { private final int line; - @Nullable - private final Integer column; + private final @Nullable Integer column; private FilePosition(int line) { Preconditions.condition(line > 0, "line number must be greater than zero"); diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/FileSelector.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/FileSelector.java index 04f9ffb4c23c..ac01e74b5379 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/FileSelector.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/FileSelector.java @@ -46,8 +46,7 @@ public class FileSelector implements DiscoverySelector { private final String path; - @Nullable - private final FilePosition position; + private final @Nullable FilePosition position; FileSelector(String path, @Nullable FilePosition position) { this.path = path; diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/MethodSelector.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/MethodSelector.java index 41c400874314..5bd67d658470 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/MethodSelector.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/MethodSelector.java @@ -60,17 +60,14 @@ @API(status = STABLE, since = "1.0") public class MethodSelector implements DiscoverySelector { - @Nullable - private final ClassLoader classLoader; + private final @Nullable ClassLoader classLoader; private final String className; private final String methodName; private final String parameterTypeNames; - @Nullable - private volatile Class javaClass; + private volatile @Nullable Class javaClass; - @Nullable - private volatile Method javaMethod; + private volatile @Nullable Method javaMethod; private volatile Class @Nullable [] parameterTypes; diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/NestedClassSelector.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/NestedClassSelector.java index aa3f340df281..a6ed8bd44f2b 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/NestedClassSelector.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/discovery/NestedClassSelector.java @@ -53,8 +53,7 @@ @API(status = STABLE, since = "1.6") public class NestedClassSelector implements DiscoverySelector { - @Nullable - private final ClassLoader classLoader; + private final @Nullable ClassLoader classLoader; private final List enclosingClassSelectors; private final ClassSelector nestedClassSelector; diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/reporting/FileEntry.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/reporting/FileEntry.java index 2c74c860c7c3..2edd765cb3e6 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/reporting/FileEntry.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/reporting/FileEntry.java @@ -46,8 +46,7 @@ public static FileEntry from(Path path, @Nullable String mediaType) { private final LocalDateTime timestamp = LocalDateTime.now(); private final Path path; - @Nullable - private final String mediaType; + private final @Nullable String mediaType; private FileEntry(Path path, @Nullable String mediaType) { this.path = Preconditions.notNull(path, "path must not be null"); diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/config/PrefixedConfigurationParameters.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/config/PrefixedConfigurationParameters.java index d78dc800219d..61a55c72830c 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/config/PrefixedConfigurationParameters.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/config/PrefixedConfigurationParameters.java @@ -17,6 +17,7 @@ import java.util.function.Function; import org.apiguardian.api.API; +import org.jspecify.annotations.Nullable; import org.junit.platform.commons.util.Preconditions; import org.junit.platform.engine.ConfigurationParameters; @@ -57,7 +58,7 @@ public Optional getBoolean(String key) { } @Override - public Optional get(String key, Function transformer) { + public Optional get(String key, Function transformer) { return delegate.get(prefixed(key), transformer); } diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/AbstractTestDescriptor.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/AbstractTestDescriptor.java index 0454b5c34dad..4292bc7f6028 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/AbstractTestDescriptor.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/AbstractTestDescriptor.java @@ -45,11 +45,9 @@ public abstract class AbstractTestDescriptor implements TestDescriptor { private final String displayName; - @Nullable - private final TestSource source; + private final @Nullable TestSource source; - @Nullable - private TestDescriptor parent; + private @Nullable TestDescriptor parent; /** * The synchronized set of children associated with this {@code TestDescriptor}. diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/ClassSource.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/ClassSource.java index f31e3d948a14..7852ba45b8a0 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/ClassSource.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/ClassSource.java @@ -134,11 +134,9 @@ public static ClassSource from(URI uri) { private final String className; - @Nullable - private final FilePosition filePosition; + private final @Nullable FilePosition filePosition; - @Nullable - private Class javaClass; + private @Nullable Class javaClass; private ClassSource(String className) { this(className, null); diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/ClasspathResourceSource.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/ClasspathResourceSource.java index 3f547a564606..838b92d9ad8e 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/ClasspathResourceSource.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/ClasspathResourceSource.java @@ -114,8 +114,7 @@ public static ClasspathResourceSource from(URI uri) { private final String classpathResourceName; - @Nullable - private final FilePosition filePosition; + private final @Nullable FilePosition filePosition; private ClasspathResourceSource(String classpathResourceName) { this(classpathResourceName, null); diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/FilePosition.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/FilePosition.java index de653d5fcacb..7d8d9b5500ff 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/FilePosition.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/FilePosition.java @@ -118,8 +118,7 @@ else if (column == null && "column".equals(key)) { private final int line; - @Nullable - private final Integer column; + private final @Nullable Integer column; private FilePosition(int line) { Preconditions.condition(line > 0, "line number must be greater than zero"); diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/FileSource.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/FileSource.java index b82e113ff5ee..577f602659db 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/FileSource.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/FileSource.java @@ -60,8 +60,7 @@ public static FileSource from(File file, @Nullable FilePosition filePosition) { private final File file; - @Nullable - private final FilePosition filePosition; + private final @Nullable FilePosition filePosition; private FileSource(File file) { this(file, null); diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/MethodSource.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/MethodSource.java index b3c95915dd52..1917dd19b168 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/MethodSource.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/MethodSource.java @@ -110,14 +110,11 @@ public static MethodSource from(Class testClass, Method testMethod) { private final String className; private final String methodName; - @Nullable - private final String methodParameterTypes; + private final @Nullable String methodParameterTypes; - @Nullable - private Class javaClass; + private @Nullable Class javaClass; - @Nullable - private transient Method javaMethod; + private transient @Nullable Method javaMethod; private MethodSource(String className, String methodName) { this(className, methodName, null); diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/ForkJoinPoolHierarchicalTestExecutorService.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/ForkJoinPoolHierarchicalTestExecutorService.java index 3f64d3cd4493..60677dea7bac 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/ForkJoinPoolHierarchicalTestExecutorService.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/ForkJoinPoolHierarchicalTestExecutorService.java @@ -127,6 +127,7 @@ private static Callable sinceJava7ConstructorInvocation(ParallelEx } @Override + @SuppressWarnings("NullAway") public Future<@Nullable Void> submit(TestTask testTask) { ExclusiveTask exclusiveTask = new ExclusiveTask(testTask); if (!isAlreadyRunningInForkJoinPool()) { diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/HierarchicalTestExecutor.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/HierarchicalTestExecutor.java index 3ce7e541cf43..68549dbf632a 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/HierarchicalTestExecutor.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/HierarchicalTestExecutor.java @@ -12,6 +12,7 @@ import java.util.concurrent.Future; +import org.jspecify.annotations.Nullable; import org.junit.platform.engine.EngineExecutionListener; import org.junit.platform.engine.ExecutionRequest; import org.junit.platform.engine.TestDescriptor; @@ -46,7 +47,7 @@ class HierarchicalTestExecutor { this.throwableCollectorFactory = throwableCollectorFactory; } - Future execute() { + Future<@Nullable Void> execute() { TestDescriptor rootTestDescriptor = this.request.getRootTestDescriptor(); EngineExecutionListener executionListener = this.request.getEngineExecutionListener(); NodeExecutionAdvisor executionAdvisor = new NodeTreeWalker().walk(rootTestDescriptor); diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/NodeTestTask.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/NodeTestTask.java index 95af64b24296..c4868d522a93 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/NodeTestTask.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/NodeTestTask.java @@ -54,19 +54,15 @@ class NodeTestTask implements TestTask { private final Node node; private final Runnable finalizer; - @Nullable - private C parentContext; + private @Nullable C parentContext; - @Nullable - private C context; + private @Nullable C context; - @Nullable - private SkipResult skipResult; + private @Nullable SkipResult skipResult; private boolean started; - @Nullable - private ThrowableCollector throwableCollector; + private @Nullable ThrowableCollector throwableCollector; NodeTestTask(NodeTestTaskContext taskContext, TestDescriptor testDescriptor) { this(taskContext, testDescriptor, NOOP); @@ -257,7 +253,7 @@ public Future execute(TestDescriptor testDescriptor, EngineExecutionListener testDescriptor, () -> unfinishedTasks.remove(uniqueId)); nodeTestTask.setParentContext(context); unfinishedTasks.put(uniqueId, DynamicTaskState.unscheduled()); - Future future = taskContext.executorService().submit(nodeTestTask); + Future<@Nullable Void> future = taskContext.executorService().submit(nodeTestTask); unfinishedTasks.computeIfPresent(uniqueId, (__, state) -> DynamicTaskState.scheduled(future)); return future; } @@ -289,7 +285,7 @@ static DynamicTaskState unscheduled() { return UNSCHEDULED; } - static DynamicTaskState scheduled(Future future) { + static DynamicTaskState scheduled(Future<@Nullable Void> future) { return future::get; } diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/SameThreadHierarchicalTestExecutorService.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/SameThreadHierarchicalTestExecutorService.java index 9255e9df16e7..aa05f4330ebb 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/SameThreadHierarchicalTestExecutorService.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/SameThreadHierarchicalTestExecutorService.java @@ -32,6 +32,7 @@ public SameThreadHierarchicalTestExecutorService() { } @Override + @SuppressWarnings("NullAway") public Future<@Nullable Void> submit(TestTask testTask) { testTask.execute(); return completedFuture(null); diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/ThrowableCollector.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/ThrowableCollector.java index f322178a62fa..04282d8b151e 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/ThrowableCollector.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/hierarchical/ThrowableCollector.java @@ -43,8 +43,7 @@ public class ThrowableCollector { private final Predicate abortedExecutionPredicate; - @Nullable - private Throwable throwable; + private @Nullable Throwable throwable; /** * Create a new {@code ThrowableCollector} that uses the supplied diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/store/NamespacedHierarchicalStore.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/store/NamespacedHierarchicalStore.java index 074d4ecdd329..d06deba1e679 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/support/store/NamespacedHierarchicalStore.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/support/store/NamespacedHierarchicalStore.java @@ -52,11 +52,9 @@ public final class NamespacedHierarchicalStore implements AutoCloseable { private final ConcurrentMap, StoredValue> storedValues = new ConcurrentHashMap<>(4); - @Nullable - private final NamespacedHierarchicalStore parentStore; + private final @Nullable NamespacedHierarchicalStore parentStore; - @Nullable - private final CloseAction closeAction; + private final @Nullable CloseAction closeAction; private volatile boolean closed = false; @@ -190,7 +188,8 @@ public void close() { * @throws NamespacedHierarchicalStoreException if this store has already been * closed */ - public @Nullable Object getOrComputeIfAbsent(N namespace, K key, Function defaultCreator) { + public @Nullable Object getOrComputeIfAbsent(N namespace, K key, + Function defaultCreator) { Preconditions.notNull(defaultCreator, "defaultCreator must not be null"); CompositeKey compositeKey = new CompositeKey<>(namespace, key); StoredValue storedValue = getStoredValue(compositeKey); @@ -218,8 +217,9 @@ public void close() { * @throws NamespacedHierarchicalStoreException if the stored value cannot * be cast to the required type, or if this store has already been closed */ - public @Nullable V getOrComputeIfAbsent(N namespace, K key, Function defaultCreator, - Class requiredType) throws NamespacedHierarchicalStoreException { + public @Nullable V getOrComputeIfAbsent(N namespace, K key, + Function defaultCreator, Class requiredType) + throws NamespacedHierarchicalStoreException { Object value = getOrComputeIfAbsent(namespace, key, defaultCreator); return castToRequiredType(key, value, requiredType); diff --git a/junit-platform-engine/src/testFixtures/java/org/junit/platform/engine/support/hierarchical/DemoHierarchicalContainerDescriptor.java b/junit-platform-engine/src/testFixtures/java/org/junit/platform/engine/support/hierarchical/DemoHierarchicalContainerDescriptor.java index ea0e595862c7..1a5b9c20c7ac 100644 --- a/junit-platform-engine/src/testFixtures/java/org/junit/platform/engine/support/hierarchical/DemoHierarchicalContainerDescriptor.java +++ b/junit-platform-engine/src/testFixtures/java/org/junit/platform/engine/support/hierarchical/DemoHierarchicalContainerDescriptor.java @@ -23,8 +23,7 @@ public class DemoHierarchicalContainerDescriptor extends AbstractTestDescriptor implements Node { - @Nullable - private final Runnable beforeBlock; + private final @Nullable Runnable beforeBlock; public DemoHierarchicalContainerDescriptor(UniqueId uniqueId, String displayName, @Nullable TestSource source, @Nullable Runnable beforeBlock) { diff --git a/junit-platform-engine/src/testFixtures/java/org/junit/platform/engine/support/hierarchical/DemoHierarchicalEngineDescriptor.java b/junit-platform-engine/src/testFixtures/java/org/junit/platform/engine/support/hierarchical/DemoHierarchicalEngineDescriptor.java index 49aa67dd32f8..519128ce7459 100644 --- a/junit-platform-engine/src/testFixtures/java/org/junit/platform/engine/support/hierarchical/DemoHierarchicalEngineDescriptor.java +++ b/junit-platform-engine/src/testFixtures/java/org/junit/platform/engine/support/hierarchical/DemoHierarchicalEngineDescriptor.java @@ -22,8 +22,7 @@ */ public class DemoHierarchicalEngineDescriptor extends EngineDescriptor implements Node { - @Nullable - private String skippedReason; + private @Nullable String skippedReason; private boolean skipped; private Runnable beforeAllBehavior = () -> { diff --git a/junit-platform-engine/src/testFixtures/java/org/junit/platform/engine/support/hierarchical/DemoHierarchicalTestDescriptor.java b/junit-platform-engine/src/testFixtures/java/org/junit/platform/engine/support/hierarchical/DemoHierarchicalTestDescriptor.java index 26b696be0387..8cb70bd68d0c 100644 --- a/junit-platform-engine/src/testFixtures/java/org/junit/platform/engine/support/hierarchical/DemoHierarchicalTestDescriptor.java +++ b/junit-platform-engine/src/testFixtures/java/org/junit/platform/engine/support/hierarchical/DemoHierarchicalTestDescriptor.java @@ -26,11 +26,9 @@ */ public class DemoHierarchicalTestDescriptor extends AbstractTestDescriptor implements Node { - @Nullable - private final BiConsumer executeBlock; + private final @Nullable BiConsumer executeBlock; - @Nullable - private String skippedReason; + private @Nullable String skippedReason; private boolean skipped; diff --git a/junit-platform-engine/src/testFixtures/java/org/junit/platform/fakes/TestEngineSpy.java b/junit-platform-engine/src/testFixtures/java/org/junit/platform/fakes/TestEngineSpy.java index 040fe144e446..67a1c34a99d2 100644 --- a/junit-platform-engine/src/testFixtures/java/org/junit/platform/fakes/TestEngineSpy.java +++ b/junit-platform-engine/src/testFixtures/java/org/junit/platform/fakes/TestEngineSpy.java @@ -24,8 +24,7 @@ public class TestEngineSpy implements TestEngine { private final String id; - @Nullable - public ExecutionRequest requestForExecution; + public @Nullable ExecutionRequest requestForExecution; public TestEngineSpy() { this(TestEngineSpy.class.getSimpleName()); diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/EngineDiscoveryResult.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/EngineDiscoveryResult.java index c266f3319ab0..5625715ad0dd 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/EngineDiscoveryResult.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/EngineDiscoveryResult.java @@ -73,8 +73,7 @@ public static EngineDiscoveryResult failed(@Nullable Throwable throwable) { private final Status status; - @Nullable - private final Throwable throwable; + private final @Nullable Throwable throwable; private EngineDiscoveryResult(Status status, @Nullable Throwable throwable) { this.status = status; diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/TagFilter.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/TagFilter.java index 413a4521424a..4a128d7ebe20 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/TagFilter.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/TagFilter.java @@ -128,8 +128,8 @@ public static PostDiscoveryFilter excludeTags(List tagExpressions) throw } private static PostDiscoveryFilter includeMatching(List tagExpressions) { - Supplier inclusionReason = () -> inclusionReasonExpressionSatisfy(tagExpressions); - Supplier exclusionReason = () -> exclusionReasonExpressionNotSatisfy(tagExpressions); + Supplier<@Nullable String> inclusionReason = () -> inclusionReasonExpressionSatisfy(tagExpressions); + Supplier<@Nullable String> exclusionReason = () -> exclusionReasonExpressionNotSatisfy(tagExpressions); List parsedTagExpressions = parseAll(tagExpressions); return descriptor -> { Set tags = descriptor.getTags(); @@ -148,8 +148,8 @@ private static String exclusionReasonExpressionNotSatisfy(List tagExpres } private static PostDiscoveryFilter excludeMatching(List tagExpressions) { - Supplier inclusionReason = () -> inclusionReasonExpressionNotSatisfy(tagExpressions); - Supplier exclusionReason = () -> exclusionReasonExpressionSatisfy(tagExpressions); + Supplier<@Nullable String> inclusionReason = () -> inclusionReasonExpressionNotSatisfy(tagExpressions); + Supplier<@Nullable String> exclusionReason = () -> exclusionReasonExpressionSatisfy(tagExpressions); List parsedTagExpressions = parseAll(tagExpressions); return descriptor -> { Set tags = descriptor.getTags(); diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/TestIdentifier.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/TestIdentifier.java index f2700882724f..6cc56a0dd9af 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/TestIdentifier.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/TestIdentifier.java @@ -58,14 +58,12 @@ public final class TestIdentifier implements Serializable { // These are effectively final but not technically due to late initialization when deserializing private /* final */ UniqueId uniqueId; - @Nullable - private /* final */ UniqueId parentId; + private /* final */ @Nullable UniqueId parentId; private /* final */ String displayName; private /* final */ String legacyReportingName; - @Nullable - private /* final */ TestSource source; + private /* final */ @Nullable TestSource source; private /* final */ Set tags; private /* final */ Type type; diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/HierarchicalOutputDirectoryProvider.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/HierarchicalOutputDirectoryProvider.java index b836d2ca5b3c..3be48cf03a3e 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/HierarchicalOutputDirectoryProvider.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/HierarchicalOutputDirectoryProvider.java @@ -36,8 +36,7 @@ class HierarchicalOutputDirectoryProvider implements OutputDirectoryProvider { private final Supplier rootDirSupplier; - @Nullable - private volatile Path rootDir; + private volatile @Nullable Path rootDir; HierarchicalOutputDirectoryProvider(Supplier rootDirSupplier) { this.rootDirSupplier = rootDirSupplier; diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/InterceptingLauncher.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/InterceptingLauncher.java index 063b60a51d22..30178e808414 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/InterceptingLauncher.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/InterceptingLauncher.java @@ -10,6 +10,7 @@ package org.junit.platform.launcher.core; +import org.jspecify.annotations.Nullable; import org.junit.platform.launcher.Launcher; import org.junit.platform.launcher.LauncherDiscoveryRequest; import org.junit.platform.launcher.LauncherInterceptor; @@ -34,18 +35,16 @@ public TestPlan discover(LauncherDiscoveryRequest launcherDiscoveryRequest) { } @Override - @SuppressWarnings("NullAway") public void execute(LauncherDiscoveryRequest launcherDiscoveryRequest, TestExecutionListener... listeners) { - interceptor.intercept(() -> { + interceptor.<@Nullable Object> intercept(() -> { super.execute(launcherDiscoveryRequest, listeners); return null; }); } @Override - @SuppressWarnings("NullAway") public void execute(TestPlan testPlan, TestExecutionListener... listeners) { - interceptor.intercept(() -> { + interceptor.<@Nullable Object> intercept(() -> { super.execute(testPlan, listeners); return null; }); diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/LauncherDiscoveryRequestBuilder.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/LauncherDiscoveryRequestBuilder.java index 8f821985f3d6..ed3af5cf796d 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/LauncherDiscoveryRequestBuilder.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/LauncherDiscoveryRequestBuilder.java @@ -111,11 +111,9 @@ public final class LauncherDiscoveryRequestBuilder { private final List discoveryListeners = new ArrayList<>(); private boolean implicitConfigurationParametersEnabled = true; - @Nullable - private ConfigurationParameters parentConfigurationParameters; + private @Nullable ConfigurationParameters parentConfigurationParameters; - @Nullable - private OutputDirectoryProvider outputDirectoryProvider; + private @Nullable OutputDirectoryProvider outputDirectoryProvider; /** * Create a new {@code LauncherDiscoveryRequestBuilder}. diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/LauncherPhase.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/LauncherPhase.java index 5536e8c7227d..33d612d7a26e 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/LauncherPhase.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/LauncherPhase.java @@ -14,7 +14,9 @@ import java.util.Locale; import java.util.Optional; +import java.util.function.Function; +import org.jspecify.annotations.Nullable; import org.junit.platform.commons.logging.Logger; import org.junit.platform.commons.logging.LoggerFactory; import org.junit.platform.engine.ConfigurationParameters; @@ -31,7 +33,7 @@ enum LauncherPhase { private static final Logger logger = LoggerFactory.getLogger(LauncherPhase.class); static Optional getDiscoveryIssueFailurePhase(ConfigurationParameters configurationParameters) { - return configurationParameters.get(DISCOVERY_ISSUE_FAILURE_PHASE_PROPERTY_NAME, value -> { + Function stringLauncherPhaseFunction = value -> { try { return LauncherPhase.valueOf(value.toUpperCase(Locale.ROOT)); } @@ -41,7 +43,8 @@ static Optional getDiscoveryIssueFailurePhase(ConfigurationParame value, DISCOVERY_ISSUE_FAILURE_PHASE_PROPERTY_NAME)); return null; } - }); + }; + return configurationParameters.get(DISCOVERY_ISSUE_FAILURE_PHASE_PROPERTY_NAME, stringLauncherPhaseFunction); } @Override diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/OutcomeDelayingEngineExecutionListener.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/OutcomeDelayingEngineExecutionListener.java index 4ea6111553ce..239044bc95e3 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/OutcomeDelayingEngineExecutionListener.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/OutcomeDelayingEngineExecutionListener.java @@ -31,14 +31,11 @@ class OutcomeDelayingEngineExecutionListener extends DelegatingEngineExecutionLi private volatile boolean engineStarted; - @Nullable - private volatile Outcome outcome; + private volatile @Nullable Outcome outcome; - @Nullable - private volatile String skipReason; + private volatile @Nullable String skipReason; - @Nullable - private volatile TestExecutionResult executionResult; + private volatile @Nullable TestExecutionResult executionResult; OutcomeDelayingEngineExecutionListener(EngineExecutionListener delegate, TestDescriptor engineDescriptor) { super(delegate); diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/LoggingListener.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/LoggingListener.java index a17b48147a40..14ded1f6b141 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/LoggingListener.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/LoggingListener.java @@ -79,14 +79,15 @@ public static LoggingListener forJavaUtilLogging(Level logLevel) { * @see #forJavaUtilLogging() * @see #forJavaUtilLogging(Level) */ - public static LoggingListener forBiConsumer(BiConsumer> logger) { + public static LoggingListener forBiConsumer(BiConsumer<@Nullable Throwable, Supplier> logger) { return new LoggingListener(logger); } private final BiConsumer<@Nullable Throwable, Supplier> logger; - private LoggingListener(BiConsumer> logger) { - this.logger = Preconditions.notNull(logger, "logger must not be null"); + private LoggingListener(BiConsumer<@Nullable Throwable, Supplier> logger) { + Preconditions.notNull(logger, "logger must not be null"); + this.logger = logger; } @Override diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/SummaryGeneratingListener.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/SummaryGeneratingListener.java index c972b968a925..e404a7457c1a 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/SummaryGeneratingListener.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/SummaryGeneratingListener.java @@ -35,11 +35,9 @@ @API(status = MAINTAINED, since = "1.0") public class SummaryGeneratingListener implements TestExecutionListener { - @Nullable - private TestPlan testPlan; + private @Nullable TestPlan testPlan; - @Nullable - private MutableTestExecutionSummary summary; + private @Nullable MutableTestExecutionSummary summary; public SummaryGeneratingListener() { diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/UniqueIdTrackingListener.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/UniqueIdTrackingListener.java index 2c05881a5bfb..802168bb5267 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/UniqueIdTrackingListener.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/UniqueIdTrackingListener.java @@ -137,8 +137,7 @@ public class UniqueIdTrackingListener implements TestExecutionListener { private boolean enabled; - @Nullable - private TestPlan testPlan; + private @Nullable TestPlan testPlan; public UniqueIdTrackingListener() { // to avoid missing-explicit-ctor warning diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/tagexpression/Operator.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/tagexpression/Operator.java index 55c483abbe93..4f09bb92c59b 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/tagexpression/Operator.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/tagexpression/Operator.java @@ -81,8 +81,7 @@ static Operator binaryOperator(String representation, int precedence, Associativ private final int precedence; private final int arity; - @Nullable - private final Associativity associativity; + private final @Nullable Associativity associativity; private final TagExpressionCreator tagExpressionCreator; diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/tagexpression/ParseStatus.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/tagexpression/ParseStatus.java index 9f1b124c6133..de4bbd374d12 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/tagexpression/ParseStatus.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/tagexpression/ParseStatus.java @@ -62,8 +62,7 @@ private static ParseStatus error(@Nullable String errorMessage) { return new ParseStatus(errorMessage); } - @Nullable - final String errorMessage; + final @Nullable String errorMessage; private ParseStatus(@Nullable String errorMessage) { this.errorMessage = errorMessage; diff --git a/junit-platform-reporting/src/main/java/org/junit/platform/reporting/legacy/xml/LegacyXmlReportGeneratingListener.java b/junit-platform-reporting/src/main/java/org/junit/platform/reporting/legacy/xml/LegacyXmlReportGeneratingListener.java index 4287192fa408..cf96452b202d 100644 --- a/junit-platform-reporting/src/main/java/org/junit/platform/reporting/legacy/xml/LegacyXmlReportGeneratingListener.java +++ b/junit-platform-reporting/src/main/java/org/junit/platform/reporting/legacy/xml/LegacyXmlReportGeneratingListener.java @@ -50,8 +50,7 @@ public class LegacyXmlReportGeneratingListener implements TestExecutionListener private final PrintWriter out; private final Clock clock; - @Nullable - private XmlReportData reportData; + private @Nullable XmlReportData reportData; public LegacyXmlReportGeneratingListener(Path reportsDir, PrintWriter out) { this(reportsDir, out, Clock.systemDefaultZone()); diff --git a/junit-platform-reporting/src/main/java/org/junit/platform/reporting/open/xml/OpenTestReportGeneratingListener.java b/junit-platform-reporting/src/main/java/org/junit/platform/reporting/open/xml/OpenTestReportGeneratingListener.java index 46f41fa50f64..91c5df3d8f44 100644 --- a/junit-platform-reporting/src/main/java/org/junit/platform/reporting/open/xml/OpenTestReportGeneratingListener.java +++ b/junit-platform-reporting/src/main/java/org/junit/platform/reporting/open/xml/OpenTestReportGeneratingListener.java @@ -117,8 +117,7 @@ public class OpenTestReportGeneratingListener implements TestExecutionListener { private DocumentWriter eventsFileWriter = DocumentWriter.noop(); private final Path workingDir; - @Nullable - private Path outputDir; + private @Nullable Path outputDir; @SuppressWarnings("unused") // Used via ServiceLoader public OpenTestReportGeneratingListener() { diff --git a/junit-platform-suite-commons/src/main/java/org/junit/platform/suite/commons/SuiteLauncherDiscoveryRequestBuilder.java b/junit-platform-suite-commons/src/main/java/org/junit/platform/suite/commons/SuiteLauncherDiscoveryRequestBuilder.java index 52da2210aafb..d0a4464f23ed 100644 --- a/junit-platform-suite-commons/src/main/java/org/junit/platform/suite/commons/SuiteLauncherDiscoveryRequestBuilder.java +++ b/junit-platform-suite-commons/src/main/java/org/junit/platform/suite/commons/SuiteLauncherDiscoveryRequestBuilder.java @@ -121,8 +121,7 @@ public final class SuiteLauncherDiscoveryRequestBuilder { private boolean includeClassNamePatternsUsed; private boolean filterStandardClassNamePatterns = false; - @Nullable - private ConfigurationParameters parentConfigurationParameters; + private @Nullable ConfigurationParameters parentConfigurationParameters; private boolean enableParentConfigurationParameters = true; diff --git a/junit-platform-suite-engine/src/main/java/org/junit/platform/suite/engine/SuiteTestDescriptor.java b/junit-platform-suite-engine/src/main/java/org/junit/platform/suite/engine/SuiteTestDescriptor.java index e9c78c58ff6c..161c5189aa91 100644 --- a/junit-platform-suite-engine/src/main/java/org/junit/platform/suite/engine/SuiteTestDescriptor.java +++ b/junit-platform-suite-engine/src/main/java/org/junit/platform/suite/engine/SuiteTestDescriptor.java @@ -73,11 +73,9 @@ final class SuiteTestDescriptor extends AbstractTestDescriptor { private final Class suiteClass; private final LifecycleMethods lifecycleMethods; - @Nullable - private LauncherDiscoveryResult launcherDiscoveryResult; + private @Nullable LauncherDiscoveryResult launcherDiscoveryResult; - @Nullable - private SuiteLauncher launcher; + private @Nullable SuiteLauncher launcher; SuiteTestDescriptor(UniqueId id, Class suiteClass, ConfigurationParameters configurationParameters, OutputDirectoryProvider outputDirectoryProvider, EngineDiscoveryListener discoveryListener, diff --git a/junit-platform-testkit/src/main/java/org/junit/platform/testkit/engine/Event.java b/junit-platform-testkit/src/main/java/org/junit/platform/testkit/engine/Event.java index 4085b126483f..a18c2052b47e 100644 --- a/junit-platform-testkit/src/main/java/org/junit/platform/testkit/engine/Event.java +++ b/junit-platform-testkit/src/main/java/org/junit/platform/testkit/engine/Event.java @@ -172,8 +172,7 @@ public static Predicate byTestDescriptor(Predicate instanceOf(Class expecte * to the supplied {@link String}. */ public static Condition message(String expectedMessage) { - return new Condition<>(where(Throwable::getMessage, isEqual(expectedMessage)), "message is '%s'", - expectedMessage); + return new Condition<>( + FunctionUtils. where(Throwable::getMessage, isEqual(expectedMessage)), + "message is '%s'", expectedMessage); } /** @@ -148,7 +151,9 @@ public static Condition message(String expectedMessage) { * the supplied {@link Predicate}. */ public static Condition message(Predicate expectedMessagePredicate) { - return new Condition<>(where(Throwable::getMessage, expectedMessagePredicate), "message matches predicate"); + return new Condition<>( + FunctionUtils. where(Throwable::getMessage, expectedMessagePredicate), + "message matches predicate"); } private static Condition throwable(Condition condition) { diff --git a/junit-vintage-engine/src/main/java/org/junit/vintage/engine/descriptor/RunnerTestDescriptor.java b/junit-vintage-engine/src/main/java/org/junit/vintage/engine/descriptor/RunnerTestDescriptor.java index d5d55a8176dc..2fa6af237698 100644 --- a/junit-vintage-engine/src/main/java/org/junit/vintage/engine/descriptor/RunnerTestDescriptor.java +++ b/junit-vintage-engine/src/main/java/org/junit/vintage/engine/descriptor/RunnerTestDescriptor.java @@ -56,8 +56,7 @@ public class RunnerTestDescriptor extends VintageTestDescriptor { private final boolean ignored; private boolean wasFiltered; - @Nullable - private List filters = new ArrayList<>(); + private @Nullable List filters = new ArrayList<>(); public RunnerTestDescriptor(UniqueId uniqueId, Class testClass, Runner runner, boolean ignored) { super(uniqueId, runner.getDescription(), testClass.getSimpleName(), ClassSource.from(testClass)); diff --git a/junit-vintage-engine/src/main/java/org/junit/vintage/engine/discovery/UniqueIdFilter.java b/junit-vintage-engine/src/main/java/org/junit/vintage/engine/discovery/UniqueIdFilter.java index 427bcae80943..14ec702d97fd 100644 --- a/junit-vintage-engine/src/main/java/org/junit/vintage/engine/discovery/UniqueIdFilter.java +++ b/junit-vintage-engine/src/main/java/org/junit/vintage/engine/discovery/UniqueIdFilter.java @@ -18,7 +18,6 @@ import java.util.Optional; import java.util.Set; -import org.jspecify.annotations.Nullable; import org.junit.platform.engine.TestDescriptor; import org.junit.platform.engine.UniqueId; import org.junit.runner.Description; @@ -34,10 +33,10 @@ class UniqueIdFilter extends Filter { private final RunnerTestDescriptor runnerTestDescriptor; private final UniqueId uniqueId; - @Nullable + @SuppressWarnings({ "NullAway.Init", "NotNullFieldNotInitialized" }) private Deque path; - @Nullable + @SuppressWarnings({ "NullAway.Init", "NotNullFieldNotInitialized" }) private Set descendants; UniqueIdFilter(RunnerTestDescriptor runnerTestDescriptor, UniqueId uniqueId) { @@ -45,6 +44,7 @@ class UniqueIdFilter extends Filter { this.uniqueId = uniqueId; } + @SuppressWarnings("ConstantValue") private void ensureInitialized() { if (descendants == null) { Optional identifiedTestDescriptor = runnerTestDescriptor.findByUniqueId(uniqueId); @@ -78,7 +78,6 @@ private Set determineDescendants(Optional } @Override - @SuppressWarnings({ "NullAway", "DataFlowIssue" }) public boolean shouldRun(Description description) { ensureInitialized(); return path.contains(description) || descendants.contains(description); diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/api/AssertAllAssertionsTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/api/AssertAllAssertionsTests.java index 1081fd79459c..e9f7dbbaac06 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/api/AssertAllAssertionsTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/api/AssertAllAssertionsTests.java @@ -61,13 +61,12 @@ void assertAllWithNullInExecutableArray() { assertPrecondition("individual executables must not be null", () -> assertAll((Executable) null)); } - @SuppressWarnings({ "NullAway" }) @Test void assertAllWithNullInExecutableCollection() { assertPrecondition("individual executables must not be null", () -> assertAll(asList((Executable) null))); } - @SuppressWarnings({ "DataFlowIssue", "NullAway" }) + @SuppressWarnings("DataFlowIssue") @Test void assertAllWithNullInExecutableStream() { assertPrecondition("individual executables must not be null", () -> assertAll(Stream.of((Executable) null))); diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/api/AssertLinesMatchAssertionsTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/api/AssertLinesMatchAssertionsTests.java index 9cbb09c270ec..4bc5f0c57765 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/api/AssertLinesMatchAssertionsTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/api/AssertLinesMatchAssertionsTests.java @@ -30,6 +30,7 @@ import java.util.stream.IntStream; import java.util.stream.Stream; +import org.jspecify.annotations.Nullable; import org.junit.platform.commons.PreconditionViolationException; import org.opentest4j.AssertionFailedError; @@ -273,7 +274,7 @@ void simpleStringMessage() { @Test void stringSupplierWithMultiLineMessage() { var message = "XXX\nYYY"; - Supplier supplier = () -> message; + Supplier<@Nullable String> supplier = () -> message; var expected = List.of("a", "b", "c"); var actual = List.of("a", "d", "c"); var error = assertThrows(AssertionFailedError.class, () -> assertLinesMatch(expected, actual, supplier)); diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/api/AssertNullAssertionsTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/api/AssertNullAssertionsTests.java index 7ec74ae92ee3..bab28bfee9e4 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/api/AssertNullAssertionsTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/api/AssertNullAssertionsTests.java @@ -66,7 +66,7 @@ void assertNullWithNonNullObjectWithNullStringReturnedFromToStringAndMessageSupp @SuppressWarnings("unused") private void assertNullWithNonNullObjectWithNullStringReturnedFromToString( - @Nullable Supplier messageSupplier) { + @Nullable Supplier<@Nullable String> messageSupplier) { String actual = "null"; try { if (messageSupplier == null) { @@ -98,7 +98,7 @@ void assertNullWithNonNullObjectWithNullReferenceReturnedFromToStringAndMessageS @SuppressWarnings("unused") private void assertNullWithNonNullObjectWithNullReferenceReturnedFromToString( - @Nullable Supplier messageSupplier) { + @Nullable Supplier<@Nullable String> messageSupplier) { Object actual = new NullToString(); try { if (messageSupplier == null) { diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/api/FailAssertionsTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/api/FailAssertionsTests.java index 252a7974ba95..fff673f1bd56 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/api/FailAssertionsTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/api/FailAssertionsTests.java @@ -20,6 +20,7 @@ import java.util.function.Supplier; import java.util.stream.Stream; +import org.jspecify.annotations.Nullable; import org.opentest4j.AssertionFailedError; /** @@ -77,7 +78,7 @@ void failWithNullString() { @Test void failWithNullMessageSupplier() { try { - fail((Supplier) null); + fail((Supplier<@Nullable String>) null); expectAssertionFailedError(); } catch (AssertionFailedError ex) { diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/api/condition/AbstractExecutionConditionTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/api/condition/AbstractExecutionConditionTests.java index 4b213419aad0..9345aec1591d 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/api/condition/AbstractExecutionConditionTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/api/condition/AbstractExecutionConditionTests.java @@ -55,8 +55,7 @@ abstract class AbstractExecutionConditionTests { private final ExtensionContext context = mock(); - @Nullable - private ConditionEvaluationResult result; + private @Nullable ConditionEvaluationResult result; @BeforeAll void ensureAllTestMethodsAreCovered() { diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/api/extension/Heavyweight.java b/jupiter-tests/src/test/java/org/junit/jupiter/api/extension/Heavyweight.java index 2ababf8d4145..a7552d2787f2 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/api/extension/Heavyweight.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/api/extension/Heavyweight.java @@ -10,6 +10,7 @@ package org.junit.jupiter.api.extension; +import static java.util.Objects.requireNonNull; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -32,7 +33,7 @@ public boolean supportsParameter(ParameterContext parameterContext, ExtensionCon public Object resolveParameter(ParameterContext parameterContext, ExtensionContext context) { var engineContext = context.getRoot(); var store = engineContext.getStore(ExtensionContext.Namespace.GLOBAL); - var resource = store.getOrComputeIfAbsent(ResourceValue.class); + var resource = requireNonNull(store.getOrComputeIfAbsent(ResourceValue.class)); resource.usages.incrementAndGet(); return resource; } diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/api/extension/KitchenSinkExtension.java b/jupiter-tests/src/test/java/org/junit/jupiter/api/extension/KitchenSinkExtension.java index ee8d1dba0729..e7b9dbb478d8 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/api/extension/KitchenSinkExtension.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/api/extension/KitchenSinkExtension.java @@ -15,6 +15,8 @@ import java.util.Optional; import java.util.stream.Stream; +import org.jspecify.annotations.Nullable; + /** * Kitchen Sink extension that implements every extension API * supported by JUnit Jupiter. @@ -30,7 +32,6 @@ * @since 5.0 * @see ExtensionComposabilityTests */ -@SuppressWarnings({ "DataFlowIssue", "NullAway" }) // @formatter:off public class KitchenSinkExtension implements @@ -141,7 +142,7 @@ public void preConstructTestInstance(TestInstanceFactoryContext factoryContext, @Override public Object createTestInstance(TestInstanceFactoryContext factoryContext, ExtensionContext extensionContext) { - return null; + throw new UnsupportedOperationException(); } @Override @@ -158,7 +159,7 @@ public boolean supportsParameter(ParameterContext parameterContext, ExtensionCon } @Override - public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) { + public @Nullable Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) { return null; } @@ -166,7 +167,7 @@ public Object resolveParameter(ParameterContext parameterContext, ExtensionConte @Override public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) { - return null; + throw new UnsupportedOperationException(); } // --- @TestTemplate ------------------------------------------------------- @@ -178,7 +179,7 @@ public boolean supportsTestTemplate(ExtensionContext context) { @Override public Stream provideTestTemplateInvocationContexts(ExtensionContext context) { - return null; + throw new UnsupportedOperationException(); } @Override @@ -195,7 +196,7 @@ public boolean supportsClassTemplate(ExtensionContext context) { @Override public Stream provideClassTemplateInvocationContexts(ExtensionContext context) { - return null; + throw new UnsupportedOperationException(); } @Override @@ -214,11 +215,11 @@ public void testSuccessful(ExtensionContext context) { } @Override - public void testAborted(ExtensionContext context, Throwable cause) { + public void testAborted(ExtensionContext context, @Nullable Throwable cause) { } @Override - public void testFailed(ExtensionContext context, Throwable cause) { + public void testFailed(ExtensionContext context, @Nullable Throwable cause) { } // --- InvocationInterceptor ----------------------------------------------- @@ -232,20 +233,20 @@ public T interceptTestClassConstructor(Invocation invocation, } @Override - public void interceptBeforeAllMethod(Invocation invocation, + public void interceptBeforeAllMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { InvocationInterceptor.super.interceptBeforeAllMethod(invocation, invocationContext, extensionContext); } @Override - public void interceptBeforeEachMethod(Invocation invocation, + public void interceptBeforeEachMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { InvocationInterceptor.super.interceptBeforeEachMethod(invocation, invocationContext, extensionContext); } @Override - public void interceptTestMethod(Invocation invocation, ReflectiveInvocationContext invocationContext, - ExtensionContext extensionContext) throws Throwable { + public void interceptTestMethod(Invocation<@Nullable Void> invocation, + ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { InvocationInterceptor.super.interceptTestMethod(invocation, invocationContext, extensionContext); } @@ -256,25 +257,25 @@ public T interceptTestFactoryMethod(Invocation invocation, } @Override - public void interceptTestTemplateMethod(Invocation invocation, + public void interceptTestTemplateMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { InvocationInterceptor.super.interceptTestTemplateMethod(invocation, invocationContext, extensionContext); } @Override - public void interceptDynamicTest(Invocation invocation, DynamicTestInvocationContext invocationContext, - ExtensionContext extensionContext) throws Throwable { + public void interceptDynamicTest(Invocation<@Nullable Void> invocation, + DynamicTestInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { InvocationInterceptor.super.interceptDynamicTest(invocation, invocationContext, extensionContext); } @Override - public void interceptAfterEachMethod(Invocation invocation, + public void interceptAfterEachMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { InvocationInterceptor.super.interceptAfterEachMethod(invocation, invocationContext, extensionContext); } @Override - public void interceptAfterAllMethod(Invocation invocation, + public void interceptAfterAllMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { InvocationInterceptor.super.interceptAfterAllMethod(invocation, invocationContext, extensionContext); } diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/engine/ClassTemplateInvocationTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/engine/ClassTemplateInvocationTests.java index c39bc60b5fb7..de6ddc5c6613 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/engine/ClassTemplateInvocationTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/engine/ClassTemplateInvocationTests.java @@ -1493,7 +1493,7 @@ static class ClassTemplateInvocationCallbacks implements BeforeClassTemplateInvocationCallback, AfterClassTemplateInvocationCallback { private final String prefix; - private final Function exceptionFactory; + private final Function exceptionFactory; @SuppressWarnings("unused") ClassTemplateInvocationCallbacks() { @@ -1504,7 +1504,7 @@ static class ClassTemplateInvocationCallbacks this(prefix, __ -> null); } - ClassTemplateInvocationCallbacks(String prefix, Function exceptionFactory) { + ClassTemplateInvocationCallbacks(String prefix, Function exceptionFactory) { this.prefix = prefix; this.exceptionFactory = exceptionFactory; } diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/engine/NestedWithSeparateInheritanceTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/engine/NestedWithSeparateInheritanceTests.java index 360bf5ae3f99..c79080613a0c 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/engine/NestedWithSeparateInheritanceTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/engine/NestedWithSeparateInheritanceTests.java @@ -24,8 +24,7 @@ class NestedWithSeparateInheritanceTests extends SuperClass1 { - @Nullable - static List lifecycleInvokingClassNames; + static @Nullable List lifecycleInvokingClassNames; static String OUTER = NestedWithSeparateInheritanceTests.class.getSimpleName(); static String NESTED = NestedClass.class.getSimpleName(); diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/engine/discovery/DiscoverySelectorResolverTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/engine/discovery/DiscoverySelectorResolverTests.java index 7f6053f76105..3a58eda73c6b 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/engine/discovery/DiscoverySelectorResolverTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/engine/discovery/DiscoverySelectorResolverTests.java @@ -100,8 +100,7 @@ class DiscoverySelectorResolverTests extends AbstractJupiterTestEngineTests { private final JupiterConfiguration configuration = mock(); private final LauncherDiscoveryListener discoveryListener = mock(); - @Nullable - private TestDescriptor engineDescriptor; + private @Nullable TestDescriptor engineDescriptor; @BeforeEach void setUp() { diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/engine/execution/AbstractExecutableInvokerTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/engine/execution/AbstractExecutableInvokerTests.java index 683c5c212f9a..bec4c4141d21 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/engine/execution/AbstractExecutableInvokerTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/engine/execution/AbstractExecutableInvokerTests.java @@ -41,8 +41,7 @@ abstract class AbstractExecutableInvokerTests { protected final MethodSource instance = mock(); - @Nullable - protected Method method; + protected @Nullable Method method; protected final ExtensionContext extensionContext = mock(); diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/engine/execution/ParameterResolutionUtilsTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/engine/execution/ParameterResolutionUtilsTests.java index 6612530bb977..3e2f0e297d6f 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/engine/execution/ParameterResolutionUtilsTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/engine/execution/ParameterResolutionUtilsTests.java @@ -48,8 +48,7 @@ class ParameterResolutionUtilsTests { private final MethodSource instance = mock(); - @Nullable - private Method method; + private @Nullable Method method; private final ExtensionContext extensionContext = mock(); @@ -63,6 +62,7 @@ void resolveConstructorArguments() { register(new StringParameterResolver()); Class topLevelClass = ConstructorInjectionTestCase.class; + @Nullable Object[] arguments = resolveConstructorParameters(topLevelClass, null); assertThat(arguments).containsExactly(ENIGMA); @@ -76,6 +76,7 @@ void resolveNestedConstructorArguments() { ConstructorInjectionTestCase outer = ReflectionSupport.newInstance(outerClass, "str"); Class innerClass = ConstructorInjectionTestCase.NestedTestCase.class; + @Nullable Object[] arguments = resolveConstructorParameters(innerClass, outer); assertThat(arguments).containsExactly(outer, 42); @@ -101,6 +102,7 @@ void resolvingArgumentsForMethodsWithoutParameterDoesNotDependOnParameterResolve testMethodWithNoParameters(); throwDuringParameterResolution(new RuntimeException("boom!")); + @Nullable Object[] arguments = resolveMethodParameters(); assertThat(arguments).isEmpty(); @@ -111,6 +113,7 @@ void resolveArgumentsViaParameterResolver() { testMethodWithASingleStringParameter(); thereIsAParameterResolverThatResolvesTheParameterTo("argument"); + @Nullable Object[] arguments = resolveMethodParameters(); assertThat(arguments).containsExactly("argument"); @@ -127,6 +130,7 @@ void resolveMultipleArguments() { }; })); + @Nullable Object[] arguments = resolveMethodParameters(); assertThat(arguments).containsExactly("0", 1, 2.0); @@ -138,6 +142,7 @@ void onlyConsiderParameterResolversThatSupportAParticularParameter() { thereIsAParameterResolverThatDoesNotSupportThisParameter(); thereIsAParameterResolverThatResolvesTheParameterTo("something"); + @Nullable Object[] arguments = resolveMethodParameters(); assertThat(arguments).containsExactly("something"); @@ -167,6 +172,7 @@ void resolvingArgumentsForMethodsWithPrimitiveTypesIsSupported() { testMethodWithASinglePrimitiveIntParameter(); thereIsAParameterResolverThatResolvesTheParameterTo(42); + @Nullable Object[] arguments = resolveMethodParameters(); assertThat(arguments).containsExactly(42); @@ -177,6 +183,7 @@ void nullIsAViableArgumentIfAReferenceTypeParameterIsExpected() { testMethodWithASingleStringParameter(); thereIsAParameterResolverThatResolvesTheParameterTo(null); + @Nullable Object[] arguments = resolveMethodParameters(); assertThat(arguments).hasSize(1); diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/BeforeAndAfterAllTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/BeforeAndAfterAllTests.java index 0075ace93ab2..04ae42dd6afd 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/BeforeAndAfterAllTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/BeforeAndAfterAllTests.java @@ -39,8 +39,7 @@ class BeforeAndAfterAllTests extends AbstractJupiterTestEngineTests { private static final List callSequence = new ArrayList<>(); - @Nullable - private static Optional actualExceptionInAfterAllCallback; + private static @Nullable Optional actualExceptionInAfterAllCallback; @Test void beforeAllAndAfterAllCallbacks() { diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/BeforeAndAfterEachTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/BeforeAndAfterEachTests.java index 372f8199ff8b..a5e6b501e1ea 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/BeforeAndAfterEachTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/BeforeAndAfterEachTests.java @@ -43,8 +43,7 @@ class BeforeAndAfterEachTests extends AbstractJupiterTestEngineTests { private static final List callSequence = new ArrayList<>(); private static final List beforeEachMethodCallSequence = new ArrayList<>(); - @Nullable - private static Optional actualExceptionInAfterEachCallback; + private static @Nullable Optional actualExceptionInAfterEachCallback; @SuppressWarnings("OptionalAssignedToNull") @BeforeEach diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/BeforeAndAfterTestExecutionCallbackTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/BeforeAndAfterTestExecutionCallbackTests.java index dd13d741e1ea..18a981e7dc96 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/BeforeAndAfterTestExecutionCallbackTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/BeforeAndAfterTestExecutionCallbackTests.java @@ -45,8 +45,7 @@ class BeforeAndAfterTestExecutionCallbackTests extends AbstractJupiterTestEngine private static final List callSequence = new ArrayList<>(); - @Nullable - private static Optional actualExceptionInAfterTestExecution; + private static @Nullable Optional actualExceptionInAfterTestExecution; @SuppressWarnings("OptionalAssignedToNull") @BeforeEach diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/CloseablePathTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/CloseablePathTests.java index ad86b2cf460a..6f4a3bfb427b 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/CloseablePathTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/CloseablePathTests.java @@ -89,8 +89,7 @@ class CloseablePathTests extends AbstractJupiterTestEngineTests { private final AnnotatedElementContext elementContext = mock(); private final ExtensionContext extensionContext = mock(); - @Nullable - private CloseablePath closeablePath; + private @Nullable CloseablePath closeablePath; @Target(METHOD) @Retention(RUNTIME) diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/InvocationInterceptorTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/InvocationInterceptorTests.java index b9b39cecff58..a0138398097e 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/InvocationInterceptorTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/InvocationInterceptorTests.java @@ -30,6 +30,7 @@ import java.util.function.UnaryOperator; import java.util.stream.Stream; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; @@ -71,7 +72,7 @@ static class InvocationIgnoringInterceptorTestCase { @RegisterExtension Extension interceptor = new InvocationInterceptor() { @Override - public void interceptTestMethod(Invocation invocation, + public void interceptTestMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) { // do nothing } @@ -95,7 +96,7 @@ static class InvocationSkippedTestCase { @RegisterExtension Extension interceptor = new InvocationInterceptor() { @Override - public void interceptTestMethod(Invocation invocation, + public void interceptTestMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) { invocation.skip(); } @@ -122,7 +123,7 @@ static class DoubleInvocationInterceptorTestCase { @RegisterExtension Extension interceptor = new InvocationInterceptor() { @Override - public void interceptTestMethod(Invocation invocation, + public void interceptTestMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { invocation.proceed(); @@ -287,7 +288,7 @@ public ExtensionContextScope getTestInstantiationExtensionContextScope(Extension } @Override - public void interceptBeforeAllMethod(Invocation invocation, + public void interceptBeforeAllMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { assertEquals(testClass, invocationContext.getTargetClass()); @@ -295,7 +296,7 @@ public void interceptBeforeAllMethod(Invocation invocation, assertEquals(testClass.getDeclaredMethod("beforeAll", TestReporter.class), invocationContext.getExecutable()); assertThat(invocationContext.getArguments()).hasSize(1).hasOnlyElementsOfType(TestReporter.class); - reportAndProceed(invocation, extensionContext, InvocationType.BEFORE_ALL); + this.<@Nullable Void> reportAndProceed(invocation, extensionContext, InvocationType.BEFORE_ALL); } @Override @@ -309,7 +310,7 @@ public T interceptTestClassConstructor(Invocation invocation, } @Override - public void interceptBeforeEachMethod(Invocation invocation, + public void interceptBeforeEachMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { assertEquals(testClass, invocationContext.getTargetClass()); @@ -317,22 +318,22 @@ public void interceptBeforeEachMethod(Invocation invocation, assertEquals(testClass.getDeclaredMethod("beforeEach", TestReporter.class), invocationContext.getExecutable()); assertThat(invocationContext.getArguments()).hasSize(1).hasOnlyElementsOfType(TestReporter.class); - reportAndProceed(invocation, extensionContext, InvocationType.BEFORE_EACH); + this.<@Nullable Void> reportAndProceed(invocation, extensionContext, InvocationType.BEFORE_EACH); } @Override - public void interceptTestMethod(Invocation invocation, + public void interceptTestMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { assertEquals(testClass, invocationContext.getTargetClass()); assertThat(invocationContext.getTarget()).containsInstanceOf(testClass); assertEquals(testClass.getDeclaredMethod("test", TestReporter.class), invocationContext.getExecutable()); assertThat(invocationContext.getArguments()).hasSize(1).hasOnlyElementsOfType(TestReporter.class); - reportAndProceed(invocation, extensionContext, InvocationType.TEST_METHOD); + this.<@Nullable Void> reportAndProceed(invocation, extensionContext, InvocationType.TEST_METHOD); } @Override - public void interceptTestTemplateMethod(Invocation invocation, + public void interceptTestTemplateMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { assertEquals(testClass, invocationContext.getTargetClass()); @@ -340,7 +341,7 @@ public void interceptTestTemplateMethod(Invocation invocation, assertEquals(testClass.getDeclaredMethod("testTemplate", TestReporter.class), invocationContext.getExecutable()); assertThat(invocationContext.getArguments()).hasSize(1).hasOnlyElementsOfType(TestReporter.class); - reportAndProceed(invocation, extensionContext, InvocationType.TEST_TEMPLATE_METHOD); + this.<@Nullable Void> reportAndProceed(invocation, extensionContext, InvocationType.TEST_TEMPLATE_METHOD); } @Override @@ -356,18 +357,18 @@ public T interceptTestFactoryMethod(Invocation invocation, } @Override - public void interceptDynamicTest(Invocation invocation, DynamicTestInvocationContext invocationContext, - ExtensionContext extensionContext) throws Throwable { + public void interceptDynamicTest(Invocation<@Nullable Void> invocation, + DynamicTestInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { assertThat(invocationContext.getExecutable()).isNotNull(); assertThat(extensionContext.getUniqueId()).isNotBlank(); assertThat(extensionContext.getElement()).isEmpty(); assertThat(extensionContext.getParent().flatMap(ExtensionContext::getTestMethod)) // .contains(testClass.getDeclaredMethod("testFactory", TestReporter.class)); - reportAndProceed(invocation, extensionContext, InvocationType.DYNAMIC_TEST); + this.<@Nullable Void> reportAndProceed(invocation, extensionContext, InvocationType.DYNAMIC_TEST); } @Override - public void interceptAfterEachMethod(Invocation invocation, + public void interceptAfterEachMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { assertEquals(testClass, invocationContext.getTargetClass()); @@ -375,11 +376,11 @@ public void interceptAfterEachMethod(Invocation invocation, assertEquals(testClass.getDeclaredMethod("afterEach", TestReporter.class), invocationContext.getExecutable()); assertThat(invocationContext.getArguments()).hasSize(1).hasOnlyElementsOfType(TestReporter.class); - reportAndProceed(invocation, extensionContext, InvocationType.AFTER_EACH); + this.<@Nullable Void> reportAndProceed(invocation, extensionContext, InvocationType.AFTER_EACH); } @Override - public void interceptAfterAllMethod(Invocation invocation, + public void interceptAfterAllMethod(Invocation<@Nullable Void> invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { assertEquals(testClass, invocationContext.getTargetClass()); @@ -387,11 +388,11 @@ public void interceptAfterAllMethod(Invocation invocation, assertEquals(testClass.getDeclaredMethod("afterAll", TestReporter.class), invocationContext.getExecutable()); assertThat(invocationContext.getArguments()).hasSize(1).hasOnlyElementsOfType(TestReporter.class); - reportAndProceed(invocation, extensionContext, InvocationType.AFTER_ALL); + this.<@Nullable Void> reportAndProceed(invocation, extensionContext, InvocationType.AFTER_ALL); } - private T reportAndProceed(Invocation invocation, ExtensionContext extensionContext, InvocationType type) - throws Throwable { + private T reportAndProceed(Invocation invocation, + ExtensionContext extensionContext, InvocationType type) throws Throwable { extensionContext.publishReportEntry(type.name(), "before:" + name); try { return invocation.proceed(); diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/OrderedMethodTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/OrderedMethodTests.java index bd1b61c9446b..0d191dfadd99 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/OrderedMethodTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/OrderedMethodTests.java @@ -742,17 +742,17 @@ public void orderMethods(MethodOrdererContext context) { context.getMethodDescriptors().set(1, createMethodDescriptorImpersonator(method2)); } - @SuppressWarnings({ "unchecked", "DataFlowIssue", "NullAway" }) + @SuppressWarnings({ "unchecked", "DataFlowIssue" }) static T createMethodDescriptorImpersonator(MethodDescriptor method) { MethodDescriptor stub = new MethodDescriptor() { @Override public Method getMethod() { - return null; + throw new UnsupportedOperationException(); } @Override public String getDisplayName() { - return null; + throw new UnsupportedOperationException(); } @Override diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/ProgrammaticExtensionRegistrationTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/ProgrammaticExtensionRegistrationTests.java index 61dd3d5bb089..c871279414ed 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/ProgrammaticExtensionRegistrationTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/ProgrammaticExtensionRegistrationTests.java @@ -189,7 +189,7 @@ void classLevelWithPrivateField() { void instanceLevelWithNullField() { Class testClass = InstanceLevelExtensionRegistrationWithNullFieldTestCase.class; - executeTestsForClass(testClass).testEvents().assertThatEvents().haveExactly(1, finishedWithFailure( + executeTestsForClass(testClass).testEvents().debug().assertThatEvents().haveExactly(1, finishedWithFailure( instanceOf(PreconditionViolationException.class), message(expectedMessage(testClass, null)))); } diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/SeparateThreadTimeoutInvocationTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/SeparateThreadTimeoutInvocationTests.java index b74afe95b6ec..7414362b790b 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/SeparateThreadTimeoutInvocationTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/SeparateThreadTimeoutInvocationTests.java @@ -18,6 +18,7 @@ import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicReference; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout.ThreadMode; @@ -36,7 +37,6 @@ class SeparateThreadTimeoutInvocationTests { private static final long PREEMPTIVE_TIMEOUT_MILLIS = WINDOWS.isCurrentOs() ? 1000 : 100; - @SuppressWarnings("NullAway") @Test @DisplayName("throws timeout exception when timeout duration is exceeded") void throwsTimeoutException() { @@ -44,7 +44,7 @@ void throwsTimeoutException() { var invocation = aSeparateThreadInvocation(() -> { threadName.set(Thread.currentThread().getName()); Thread.sleep(PREEMPTIVE_TIMEOUT_MILLIS * 2); - return null; + return "ignored"; }); assertThatThrownBy(invocation::proceed) // @@ -71,7 +71,8 @@ void shouldThrowInvocationException() { .hasMessage("hi!"); } - private static SeparateThreadTimeoutInvocation aSeparateThreadInvocation(Invocation invocation) { + private static SeparateThreadTimeoutInvocation aSeparateThreadInvocation( + Invocation invocation) { var namespace = ExtensionContext.Namespace.create(SeparateThreadTimeoutInvocationTests.class); var store = new NamespaceAwareStore(new NamespacedHierarchicalStore<>(null), Namespace.create(namespace.getParts())); diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/TimeoutExceptionFactoryTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/TimeoutExceptionFactoryTests.java index 5e0ef939dd0a..62f5a6f8ceec 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/TimeoutExceptionFactoryTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/TimeoutExceptionFactoryTests.java @@ -58,7 +58,7 @@ class ThrowException { @Test @DisplayName("method signature is null") - void methodSignatureIsnull() { + void methodSignatureIsNull() { assertThatThrownBy(() -> create(null, tenMillisDuration, suppressedException)) // .hasMessage("method signature must not be null"); } diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/params/ParameterizedTestExtensionTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/params/ParameterizedTestExtensionTests.java index e6e49f6488ae..9f589354ae5c 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/params/ParameterizedTestExtensionTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/params/ParameterizedTestExtensionTests.java @@ -293,7 +293,8 @@ public Optional getConfigurationParameter(String key) { } @Override - public Optional getConfigurationParameter(String key, Function transformer) { + public Optional getConfigurationParameter(String key, + Function transformer) { return configurationSupplier.apply(key).map(transformer); } @@ -417,11 +418,10 @@ void method() { class NonStaticArgumentsProvider implements ArgumentsProvider { - @SuppressWarnings({ "DataFlowIssue", "NullAway" }) @Override public Stream provideArguments(ParameterDeclarations parameters, ExtensionContext context) { - return null; + throw new UnsupportedOperationException(); } } diff --git a/jupiter-tests/src/test/java/org/junit/jupiter/params/provider/MethodArgumentsProviderTests.java b/jupiter-tests/src/test/java/org/junit/jupiter/params/provider/MethodArgumentsProviderTests.java index 14e2b6fb9ace..1f64d9dbc047 100644 --- a/jupiter-tests/src/test/java/org/junit/jupiter/params/provider/MethodArgumentsProviderTests.java +++ b/jupiter-tests/src/test/java/org/junit/jupiter/params/provider/MethodArgumentsProviderTests.java @@ -51,8 +51,7 @@ */ class MethodArgumentsProviderTests { - @Nullable - private MutableExtensionRegistry extensionRegistry; + private @Nullable MutableExtensionRegistry extensionRegistry; @Test void providesArgumentsUsingStream() { diff --git a/platform-tests/src/test/java/org/junit/platform/commons/util/AnnotationUtilsTests.java b/platform-tests/src/test/java/org/junit/platform/commons/util/AnnotationUtilsTests.java index 724b500f6d05..341739cfc768 100644 --- a/platform-tests/src/test/java/org/junit/platform/commons/util/AnnotationUtilsTests.java +++ b/platform-tests/src/test/java/org/junit/platform/commons/util/AnnotationUtilsTests.java @@ -996,16 +996,13 @@ static class ClassWithShadowedAnnotatedFields extends ClassWithAnnotatedFields { // ------------------------------------------------------------------------- @Annotation1 - @Nullable - private Boolean privateDirectlyAnnotatedField; + private @Nullable Boolean privateDirectlyAnnotatedField; @Annotation1 - @Nullable - public String directlyAnnotatedField; + public @Nullable String directlyAnnotatedField; @ComposedAnnotation - @Nullable - public Integer metaAnnotatedField; + public @Nullable Integer metaAnnotatedField; interface InterfaceWithAnnotatedFields { diff --git a/platform-tests/src/test/java/org/junit/platform/commons/util/ReflectionUtilsTests.java b/platform-tests/src/test/java/org/junit/platform/commons/util/ReflectionUtilsTests.java index 709c6fed82aa..e1701ad6dbd3 100644 --- a/platform-tests/src/test/java/org/junit/platform/commons/util/ReflectionUtilsTests.java +++ b/platform-tests/src/test/java/org/junit/platform/commons/util/ReflectionUtilsTests.java @@ -1869,7 +1869,6 @@ String specialBaz() { @Nested class ReadFieldTests { - @SuppressWarnings({ "DataFlowIssue", "NullAway" }) @Test void tryToReadFieldValueOfNonexistentStaticField() { assertThrows(NoSuchFieldException.class, diff --git a/platform-tests/src/test/java/org/junit/platform/console/ConsoleLauncherWrapperResult.java b/platform-tests/src/test/java/org/junit/platform/console/ConsoleLauncherWrapperResult.java index ca6e410147b7..4f2c6f6a1eff 100644 --- a/platform-tests/src/test/java/org/junit/platform/console/ConsoleLauncherWrapperResult.java +++ b/platform-tests/src/test/java/org/junit/platform/console/ConsoleLauncherWrapperResult.java @@ -29,8 +29,7 @@ class ConsoleLauncherWrapperResult implements TestExecutionSummary { final String err; final int code; - @Nullable - private final TestExecutionSummary summary; + private final @Nullable TestExecutionSummary summary; ConsoleLauncherWrapperResult(String[] args, String out, String err, CommandResult result) { this.args = args; diff --git a/platform-tests/src/test/java/org/junit/platform/engine/support/descriptor/TestDescriptorOrderChildrenTests.java b/platform-tests/src/test/java/org/junit/platform/engine/support/descriptor/TestDescriptorOrderChildrenTests.java index 55e0d80a20b9..8d0e8e239dc1 100644 --- a/platform-tests/src/test/java/org/junit/platform/engine/support/descriptor/TestDescriptorOrderChildrenTests.java +++ b/platform-tests/src/test/java/org/junit/platform/engine/support/descriptor/TestDescriptorOrderChildrenTests.java @@ -116,6 +116,7 @@ default void orderChildrenDuplicatesDescriptor() { assertThat(exception).hasMessage("orderer may not add or remove test descriptors"); } + @SuppressWarnings({ "DataFlowIssue", "NullAway" }) @Test default void orderChildrenOrdererReturnsNull() { var testDescriptor = createTestDescriptorWithChildren(); diff --git a/platform-tests/src/test/java/org/junit/platform/engine/support/store/NamespacedHierarchicalStoreTests.java b/platform-tests/src/test/java/org/junit/platform/engine/support/store/NamespacedHierarchicalStoreTests.java index cf5b418d2a52..52f3d5e07d77 100644 --- a/platform-tests/src/test/java/org/junit/platform/engine/support/store/NamespacedHierarchicalStoreTests.java +++ b/platform-tests/src/test/java/org/junit/platform/engine/support/store/NamespacedHierarchicalStoreTests.java @@ -10,6 +10,7 @@ package org.junit.platform.engine.support.store; +import static java.util.Objects.requireNonNull; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; @@ -323,7 +324,8 @@ void simulateRaceConditionInGetOrComputeIfAbsent() throws Exception { try (var localStore = new NamespacedHierarchicalStore<>(null)) { values = executeConcurrently(threads, // - () -> localStore.getOrComputeIfAbsent(namespace, key, it -> counter.incrementAndGet())); + () -> requireNonNull( + localStore.getOrComputeIfAbsent(namespace, key, it -> counter.incrementAndGet()))); } assertEquals(1, counter.get()); diff --git a/platform-tests/src/test/java/org/junit/platform/launcher/core/ClasspathAlignmentCheckerTests.java b/platform-tests/src/test/java/org/junit/platform/launcher/core/ClasspathAlignmentCheckerTests.java index c15ad7aa543f..3c16dd8a4f40 100644 --- a/platform-tests/src/test/java/org/junit/platform/launcher/core/ClasspathAlignmentCheckerTests.java +++ b/platform-tests/src/test/java/org/junit/platform/launcher/core/ClasspathAlignmentCheckerTests.java @@ -23,6 +23,7 @@ import io.github.classgraph.ClassGraph; import io.github.classgraph.PackageInfo; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; class ClasspathAlignmentCheckerTests { @@ -36,7 +37,7 @@ void classpathIsAligned() { void wrapsLinkageErrorForUnalignedClasspath() { var cause = new LinkageError(); AtomicInteger counter = new AtomicInteger(); - Function packageLookup = name -> { + Function packageLookup = name -> { var pkg = mock(Package.class); when(pkg.getName()).thenReturn(name); when(pkg.getImplementationVersion()).thenReturn(counter.incrementAndGet() + ".0.0"); diff --git a/platform-tooling-support-tests/platform-tooling-support-tests.gradle.kts b/platform-tooling-support-tests/platform-tooling-support-tests.gradle.kts index b321d09be1da..d2a769977d0c 100644 --- a/platform-tooling-support-tests/platform-tooling-support-tests.gradle.kts +++ b/platform-tooling-support-tests/platform-tooling-support-tests.gradle.kts @@ -225,7 +225,7 @@ val test by testing.suites.getting(JvmTestSuite::class) { jvmArgumentProviders += JavaHomeDir(project, 17, develocity.testDistribution.enabled) jvmArgumentProviders += JavaHomeDir(project, 17, develocity.testDistribution.enabled) - val gradleJavaVersion = JavaVersion.current().majorVersion.toInt() + val gradleJavaVersion = 21 jvmArgumentProviders += JavaHomeDir(project, gradleJavaVersion, develocity.testDistribution.enabled) jvmArgumentProviders += JavaHomeDir(project, gradleJavaVersion, develocity.testDistribution.enabled, nativeImage = true) systemProperty("gradle.java.version", gradleJavaVersion) diff --git a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GraalVmStarterTests.java b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GraalVmStarterTests.java index 560ec627068e..35cd950de960 100644 --- a/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GraalVmStarterTests.java +++ b/platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GraalVmStarterTests.java @@ -46,9 +46,8 @@ void runsTestsInNativeImage(@TempDir Path workspace, @FilePrefix("gradle") Outpu var result = ProcessStarters.gradlew() // .workingDir(copyToWorkspace(Projects.GRAALVM_STARTER, workspace)) // - .putEnvironment("GRAALVM_HOME", - graalVmHome.orElseThrow(TestAbortedException::new).toString()).addArguments( - "-Dmaven.repo=" + MavenRepo.dir()) // + .putEnvironment("GRAALVM_HOME", graalVmHome.orElseThrow(TestAbortedException::new).toString()) // + .addArguments("-Dmaven.repo=" + MavenRepo.dir()) // .addArguments("javaToolchains", "nativeTest", "--no-daemon", "--stacktrace", "--no-build-cache", "--warning-mode=fail", "--refresh-dependencies") // .redirectOutput(outputFiles) //