@@ -2,6 +2,7 @@ package net.ltgt.gradle.errorprone
22
33import com.google.common.truth.Truth.assertThat
44import com.google.common.truth.TruthJUnit.assume
5+ import org.gradle.api.JavaVersion
56import org.gradle.testkit.runner.BuildResult
67import org.gradle.testkit.runner.TaskOutcome
78import org.gradle.util.GradleVersion
@@ -230,7 +231,10 @@ class ToolchainsIntegrationTest : AbstractPluginIntegrationTest() {
230231 }
231232
232233 @Test
233- fun `configure forking in Java 16+ VM` () {
234+ fun `configure forking in Java 16+ VM (unless implicitly forked by incompatible toolchain)` () {
235+ // https://github.com/gradle/gradle/issues/16857#issuecomment-931610187
236+ assume().that(GradleVersion .version(testGradleVersion)).isAtLeast(GradleVersion .version(" 7.0" ))
237+
234238 // given
235239 buildFile.appendText(
236240 """
@@ -248,7 +252,53 @@ class ToolchainsIntegrationTest : AbstractPluginIntegrationTest() {
248252 // then
249253 result.assumeToolchainAvailable()
250254 assertThat(result.task(" :compileJava" )?.outcome).isEqualTo(TaskOutcome .SUCCESS )
251- assertThat(result.output).contains(FORKED )
255+ assertThat(result.output).contains(if (JavaVersion .current() == JavaVersion .VERSION_17 ) FORKED else NOT_FORKED )
256+ assertThat(result.output).contains(JVM_ARGS_STRONG_ENCAPSULATION )
257+ // Check that the configured jvm arg is preserved
258+ assertThat(result.output).contains(jvmArg(" -XshowSettings" ))
259+ }
260+
261+ // check that it doesn't mess with task avoidance
262+
263+ // when
264+ testProjectDir.buildWithArgsAndFail(" compileJava" ).also { result ->
265+ // then
266+ result.assumeToolchainAvailable()
267+ assertThat(result.task(" :compileJava" )?.outcome).isEqualTo(TaskOutcome .UP_TO_DATE )
268+ }
269+ }
270+
271+ @Test
272+ fun `does not configure forking in Java 16+ VM if current JVM has appropriate JVM args` () {
273+ // https://github.com/gradle/gradle/issues/16857#issuecomment-931610187
274+ assume().that(GradleVersion .version(testGradleVersion)).isAtLeast(GradleVersion .version(" 7.0" ))
275+ assume().withMessage(" isJava16Compatible" ).that(JavaVersion .current()).isAtLeast(JavaVersion .VERSION_16 )
276+
277+ testProjectDir.resolve(" gradle.properties" ).appendText(
278+ """
279+
280+ org.gradle.jvmargs=-Xmx512m "-XX:MaxMetaspaceSize=384m" ${ErrorPronePlugin .JVM_ARGS_STRONG_ENCAPSULATION .joinToString(" " )}
281+ """ .trimIndent()
282+ )
283+
284+ // given
285+ buildFile.appendText(
286+ """
287+
288+ java {
289+ toolchain {
290+ languageVersion.set(JavaLanguageVersion.of(${JavaVersion .current().majorVersion} ))
291+ }
292+ }
293+ """ .trimIndent()
294+ )
295+
296+ // when
297+ testProjectDir.buildWithArgsAndFail(" compileJava" ).also { result ->
298+ // then
299+ result.assumeToolchainAvailable()
300+ assertThat(result.task(" :compileJava" )?.outcome).isEqualTo(TaskOutcome .SUCCESS )
301+ assertThat(result.output).contains(NOT_FORKED )
252302 assertThat(result.output).contains(JVM_ARGS_STRONG_ENCAPSULATION )
253303 // Check that the configured jvm arg is preserved
254304 assertThat(result.output).contains(jvmArg(" -XshowSettings" ))
0 commit comments