From 6710d216e1fd5744e09e1ab64bb44cbe2372d964 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Sun, 19 Jun 2022 22:35:51 +0200 Subject: [PATCH] Add simplified JVM toolchain configuration method in extension ^KT-52867 Fixed --- .../kotlin/gradle/KotlinJavaToolchainTest.kt | 34 +++++++++++++++++++ .../gradle/dsl/KotlinProjectExtension.kt | 12 +++++++ 2 files changed, 46 insertions(+) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJavaToolchainTest.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJavaToolchainTest.kt index bd405fdaead..a5aded01af4 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJavaToolchainTest.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinJavaToolchainTest.kt @@ -605,6 +605,40 @@ class KotlinJavaToolchainTest : KGPBaseTest() { } } + @DisplayName("Toolchain simplified method with JDK version in extension is working") + @GradleTest + internal fun toolchainSimplifiedConfiguration(gradleVersion: GradleVersion) { + project( + projectName = "simple".fullProjectName, + gradleVersion = gradleVersion, + buildJdk = getJdk11().javaHome + ) { + //language=Groovy + buildGradle.append( + """ + import org.gradle.api.plugins.JavaPluginExtension + import org.gradle.jvm.toolchain.JavaToolchainService + + kotlin { + jvmToolchain(8) + } + + afterEvaluate { + def toolchain = project.extensions.getByType(JavaPluginExtension.class).toolchain + def service = project.extensions.getByType(JavaToolchainService.class) + //noinspection GroovyUnusedAssignment + def defaultLauncher = service.launcherFor(toolchain) + logger.info("Toolchain jdk path: ${'$'}{defaultLauncher.get().metadata.installationPath.asFile.absolutePath}") + } + """.trimIndent() + ) + + build("assemble") { + assertJdkHomeIsUsingJdk(getToolchainExecPathFromLogs()) + } + } + } + private fun BuildResult.assertJdkHomeIsUsingJdk( javaexecPath: String ) = assertOutputContains("[KOTLIN] Kotlin compilation 'jdkHome' argument: $javaexecPath") diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt index 1654436242f..ff37afeb6ef 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt @@ -10,6 +10,7 @@ import org.gradle.api.Action import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project import org.gradle.api.internal.plugins.DslObject +import org.gradle.jvm.toolchain.JavaLanguageVersion import org.gradle.jvm.toolchain.JavaToolchainSpec import org.gradle.util.ConfigureUtil import org.jetbrains.kotlin.gradle.plugin.* @@ -74,6 +75,17 @@ abstract class KotlinTopLevelExtension(internal val project: Project) : KotlinTo toolchainSupport.applyToolchain(action) } + /** + * Configures [Java toolchain](https://docs.gradle.org/current/userguide/toolchains.html) both for Kotlin JVM and Java tasks. + * + * @param jdkVersion - jdk version as number. For example, 17 for Java 17. + */ + fun jvmToolchain(jdkVersion: Int) { + jvmToolchain { + it.languageVersion.set(JavaLanguageVersion.of(jdkVersion)) + } + } + /** * Configures Kotlin daemon JVM arguments for all tasks in this project. *