From 81a66258fa99ee5d0b3e5113167b192cce7735c1 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Thu, 17 Feb 2022 11:13:52 +0100 Subject: [PATCH] Fix kapt compile classpath was using wrong JRE classes Kapt worker compile classpath was using JRE classes from 'java.home' instead of toolchain one. This was leading to invocation errors when build is running on latest JDK releases, but Kotlin jvm target is set to "1.8". ^KT-48402 Fixed --- .../org/jetbrains/kotlin/gradle/Kapt3IT.kt | 28 +++++++++++++++++++ .../internal/kapt/KaptWithoutKotlincTask.kt | 5 +++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt index d0201fb7afc..6835eccc7fe 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt @@ -101,6 +101,34 @@ open class Kapt3WorkersIT : Kapt3IT() { } } + @DisplayName("KT-48402: Kapt worker classpath is using JRE classes from toolchain") + @JdkVersions(versions = [JavaVersion.VERSION_16]) + @GradleWithJdkTest + fun kaptClasspathJreToolchain( + gradleVersion: GradleVersion, + jdk: JdkVersions.ProvidedJdk + ) { + project( + "simple".withPrefix, + gradleVersion, + buildJdk = jdk.location + ) { + buildGradle.modify { + """ + $it + + kotlin { + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of("8")) + } + } + """.trimIndent() + } + + build("assemble") + } + } + @DisplayName("Additional Kapt jvm arguments are passed to the process") @GradleTest internal fun additionalJvmArgumentsArePassed(gradleVersion: GradleVersion) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptWithoutKotlincTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptWithoutKotlincTask.kt index b9f6d1893e5..8d89cb798c9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptWithoutKotlincTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptWithoutKotlincTask.kt @@ -112,7 +112,10 @@ abstract class KaptWithoutKotlincTask @Inject constructor( val compileClasspath = classpath.files.toMutableList() if (addJdkClassesToClasspath.get()) { - compileClasspath.addAll(0, PathUtil.getJdkClassesRootsFromCurrentJre()) + compileClasspath.addAll( + 0, + PathUtil.getJdkClassesRoots(defaultKotlinJavaToolchain.get().providedJvm.get().javaHome) + ) } val kaptFlagsForWorker = mutableSetOf().apply {