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.jetbrains.kotlin.gradle.testbase.*
|
||||||
import org.junit.jupiter.api.DisplayName
|
import org.junit.jupiter.api.DisplayName
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import kotlin.io.path.appendText
|
||||||
|
|
||||||
@JvmGradlePluginTests
|
@JvmGradlePluginTests
|
||||||
@DisplayName("Kotlin Java Toolchain support")
|
@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(
|
private fun BuildResult.assertJdkHomeIsUsingJdk(
|
||||||
javaexecPath: String
|
javaexecPath: String
|
||||||
) = assertOutputContains("[KOTLIN] Kotlin compilation 'jdkHome' argument: $javaexecPath")
|
) = 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.api.tasks.TaskContainer
|
||||||
import org.gradle.jvm.toolchain.JavaToolchainService
|
import org.gradle.jvm.toolchain.JavaToolchainService
|
||||||
import org.gradle.jvm.toolchain.JavaToolchainSpec
|
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.UsesKotlinJavaToolchain
|
||||||
import org.jetbrains.kotlin.gradle.tasks.withType
|
import org.jetbrains.kotlin.gradle.tasks.withType
|
||||||
import org.jetbrains.kotlin.gradle.utils.newInstance
|
import org.jetbrains.kotlin.gradle.utils.newInstance
|
||||||
@@ -62,7 +63,8 @@ internal abstract class DefaultToolchainSupport @Inject constructor(
|
|||||||
tasks
|
tasks
|
||||||
.withType<UsesKotlinJavaToolchain>()
|
.withType<UsesKotlinJavaToolchain>()
|
||||||
.configureEach {
|
.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>
|
private val providedJvm: Property<Jvm>
|
||||||
) : KotlinJavaToolchain.JavaToolchainSetter {
|
) : KotlinJavaToolchain.JavaToolchainSetter {
|
||||||
|
|
||||||
|
internal fun useAsConvention(
|
||||||
|
javaLauncher: Provider<JavaLauncher>
|
||||||
|
) {
|
||||||
|
providedJvm.convention(javaLauncher.map(::mapToJvm))
|
||||||
|
}
|
||||||
|
|
||||||
override fun use(
|
override fun use(
|
||||||
javaLauncher: Provider<JavaLauncher>
|
javaLauncher: Provider<JavaLauncher>
|
||||||
) {
|
) {
|
||||||
providedJvm.set(
|
providedJvm.set(javaLauncher.map(::mapToJvm))
|
||||||
javaLauncher.map { launcher ->
|
}
|
||||||
val metadata = launcher.metadata
|
|
||||||
val javaVersion = JavaVersion.toVersion(metadata.languageVersion.asInt())
|
private fun mapToJvm(javaLauncher: JavaLauncher): Jvm {
|
||||||
Jvm.discovered(
|
val metadata = javaLauncher.metadata
|
||||||
metadata.installationPath.asFile,
|
val javaVersion = JavaVersion.toVersion(metadata.languageVersion.asInt())
|
||||||
null,
|
return Jvm.discovered(
|
||||||
javaVersion
|
metadata.installationPath.asFile,
|
||||||
)
|
null,
|
||||||
}
|
javaVersion
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user