Fix child default toolchain configuration overwrites parent one
Caused by configure actions ordering - parent are applied first. ^KT-55004 Fixed
This commit is contained in:
committed by
Space Team
parent
1d76bce3dd
commit
f6dd302dc7
+32
@@ -14,6 +14,7 @@ import org.gradle.util.GradleVersion
|
||||
import org.jetbrains.kotlin.gradle.testbase.*
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import java.io.File
|
||||
import kotlin.io.path.appendText
|
||||
|
||||
@JvmGradlePluginTests
|
||||
@DisplayName("Kotlin Java Toolchain support")
|
||||
@@ -659,6 +660,37 @@ class KotlinJavaToolchainTest : KGPBaseTest() {
|
||||
}
|
||||
}
|
||||
|
||||
@DisplayName("KT-55004: Should use non-default toolchain for parent project")
|
||||
@GradleTest
|
||||
internal fun toolchainFromParentProject(gradleVersion: GradleVersion) {
|
||||
project(
|
||||
projectName = "multiproject".fullProjectName,
|
||||
gradleVersion = gradleVersion,
|
||||
buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)
|
||||
) {
|
||||
//language=Groovy
|
||||
buildGradle.appendText(
|
||||
"""
|
||||
|
|
||||
|allprojects {
|
||||
| tasks.withType(org.jetbrains.kotlin.gradle.tasks.UsesKotlinJavaToolchain.class)
|
||||
| .configureEach {
|
||||
| kotlinJavaToolchain.jdk.use(
|
||||
| "${getJdk11Path()}",
|
||||
| JavaVersion.VERSION_11
|
||||
| )
|
||||
| }
|
||||
|}
|
||||
""".trimMargin()
|
||||
)
|
||||
|
||||
build(":lib:compileKotlin") {
|
||||
assertOutputDoesNotContain("-jvm-target 1.8")
|
||||
assertOutputContains("-jvm-target 11")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun BuildResult.assertJdkHomeIsUsingJdk(
|
||||
javaexecPath: String
|
||||
) = assertOutputContains("[KOTLIN] Kotlin compilation 'jdkHome' argument: $javaexecPath")
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
plugins {
|
||||
id "org.jetbrains.kotlin.jvm" apply false
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
plugins {
|
||||
id("org.jetbrains.kotlin.jvm")
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
fun main() {
|
||||
println("I know what you've done last summer...")
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
include ":lib"
|
||||
+3
-1
@@ -13,6 +13,7 @@ import org.gradle.api.plugins.PluginContainer
|
||||
import org.gradle.api.tasks.TaskContainer
|
||||
import org.gradle.jvm.toolchain.JavaToolchainService
|
||||
import org.gradle.jvm.toolchain.JavaToolchainSpec
|
||||
import org.jetbrains.kotlin.gradle.tasks.DefaultKotlinJavaToolchain
|
||||
import org.jetbrains.kotlin.gradle.tasks.UsesKotlinJavaToolchain
|
||||
import org.jetbrains.kotlin.gradle.tasks.withType
|
||||
import org.jetbrains.kotlin.gradle.utils.newInstance
|
||||
@@ -62,7 +63,8 @@ internal abstract class DefaultToolchainSupport @Inject constructor(
|
||||
tasks
|
||||
.withType<UsesKotlinJavaToolchain>()
|
||||
.configureEach {
|
||||
it.kotlinJavaToolchain.toolchain.use(javaLauncher)
|
||||
(it.kotlinJavaToolchain.toolchain as DefaultKotlinJavaToolchain.DefaultJavaToolchainSetter)
|
||||
.useAsConvention(javaLauncher)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+18
-11
@@ -164,22 +164,29 @@ internal abstract class DefaultKotlinJavaToolchain @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private class DefaultJavaToolchainSetter(
|
||||
internal class DefaultJavaToolchainSetter(
|
||||
private val providedJvm: Property<Jvm>
|
||||
) : KotlinJavaToolchain.JavaToolchainSetter {
|
||||
|
||||
internal fun useAsConvention(
|
||||
javaLauncher: Provider<JavaLauncher>
|
||||
) {
|
||||
providedJvm.convention(javaLauncher.map(::mapToJvm))
|
||||
}
|
||||
|
||||
override fun use(
|
||||
javaLauncher: Provider<JavaLauncher>
|
||||
) {
|
||||
providedJvm.set(
|
||||
javaLauncher.map { launcher ->
|
||||
val metadata = launcher.metadata
|
||||
val javaVersion = JavaVersion.toVersion(metadata.languageVersion.asInt())
|
||||
Jvm.discovered(
|
||||
metadata.installationPath.asFile,
|
||||
null,
|
||||
javaVersion
|
||||
)
|
||||
}
|
||||
providedJvm.set(javaLauncher.map(::mapToJvm))
|
||||
}
|
||||
|
||||
private fun mapToJvm(javaLauncher: JavaLauncher): Jvm {
|
||||
val metadata = javaLauncher.metadata
|
||||
val javaVersion = JavaVersion.toVersion(metadata.languageVersion.asInt())
|
||||
return Jvm.discovered(
|
||||
metadata.installationPath.asFile,
|
||||
null,
|
||||
javaVersion
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user