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 dfd77991cc9..c7d1bb9d63d 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 @@ -550,8 +550,8 @@ class KotlinJavaToolchainTest : KGPBaseTest() { """ tasks.named("compileKotlin") { doLast { - def actualJvmTarget = filteredArgumentsMap['jvmTarget'] - if (actualJvmTarget != "null") { + def actualJvmTarget = compilerOptions.jvmTarget.orNull + if (actualJvmTarget != null) { //noinspection GroovyAssignabilityCheck throw new GradleException("Expected `jvmTarget` value is 'null' but the actual value was ${'$'}actualJvmTarget") } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt index 0f4ea0eb84c..24cb0831647 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt @@ -113,7 +113,6 @@ abstract class KaptGenerateStubsTask @Inject constructor( (compilerOptions as CompilerJvmOptionsDefault).fillCompilerArguments(args) // Copied from KotlinCompile - defaultKotlinJavaToolchain.get().updateJvmTarget(this, args) if (reportingSettings().buildReportMode == BuildReportMode.VERBOSE) { args.reportPerf = true } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/DefaultKotlinJavaToolchain.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/DefaultKotlinJavaToolchain.kt index 09f359dd41d..a63590a2d2f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/DefaultKotlinJavaToolchain.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/DefaultKotlinJavaToolchain.kt @@ -15,8 +15,7 @@ import org.gradle.api.provider.Provider import org.gradle.api.tasks.Internal import org.gradle.internal.jvm.Jvm import org.gradle.jvm.toolchain.* -import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments -import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptionsImpl +import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.utils.chainedFinalizeValueOnRead import org.jetbrains.kotlin.gradle.utils.property import org.jetbrains.kotlin.gradle.utils.propertyWithConvention @@ -35,9 +34,6 @@ internal abstract class DefaultKotlinJavaToolchain @Inject constructor( .property(Jvm.current()) .chainedFinalizeValueOnRead() - @get:Internal - internal var providedJvmExplicitlySet = false - @get:Internal internal val providedJvm: Property = objects .propertyWithConvention(currentJvm) @@ -109,74 +105,38 @@ internal abstract class DefaultKotlinJavaToolchain @Inject constructor( final override val jdk: KotlinJavaToolchain.JdkSetter = DefaultJdkSetter( providedJvm, objects, - { providedJvmExplicitlySet = true }, kotlinCompileTaskProvider ) final override val toolchain: KotlinJavaToolchain.JavaToolchainSetter = DefaultJavaToolchainSetter(providedJvm, kotlinCompileTaskProvider) - /** - * Updates [task] 'jvmTarget' if user has configured toolchain and not 'jvmTarget'. - * - * Should be called on execution state to ensure 'jvmTarget' is set to correct value even on - * reusing configuration cache. - * - * Should be called on task execution phase! - */ - internal fun updateJvmTarget( - task: KotlinCompile, - args: K2JVMCompilerArguments - ) { - if (providedJvmExplicitlySet) { - val jdkVersion = javaVersion.get() - - // parentKotlinOptionsImpl is set from 'kotlin-android' plugin - val appliedJvmTargets = listOfNotNull(task.kotlinOptions, task.parentKotlinOptions.orNull) - .mapNotNull { (it as KotlinJvmOptionsImpl).jvmTarget } - - if (appliedJvmTargets.isEmpty()) { - // For Java 9 and Java 10 JavaVersion returns "1.9" or "1.10" accordingly - // that is not accepted by Kotlin compiler - val toolchainJvmTarget = when (jdkVersion) { - JavaVersion.VERSION_1_9 -> "9" - JavaVersion.VERSION_1_10 -> "10" - else -> jdkVersion.toString() - } - task.kotlinOptions.jvmTarget = toolchainJvmTarget - args.jvmTarget = toolchainJvmTarget - } - } - } - private abstract class JvmTargetUpdater( private val kotlinCompileTaskProvider: () -> KotlinCompile? ) { fun updateJvmTarget( - jdkVersion: JavaVersion + jdkVersion: Provider ) { kotlinCompileTaskProvider()?.let { task -> - // parentKotlinOptionsImpl is set from 'kotlin-android' plugin - val appliedJvmTargets = listOfNotNull(task.kotlinOptions, task.parentKotlinOptions.orNull) - .mapNotNull { (it as KotlinJvmOptionsImpl).jvmTarget } - - if (appliedJvmTargets.isEmpty()) { - // For Java 9 and Java 10 JavaVersion returns "1.9" or "1.10" accordingly - // that is not accepted by Kotlin compiler - task.kotlinOptions.jvmTarget = when (jdkVersion) { - JavaVersion.VERSION_1_9 -> "9" - JavaVersion.VERSION_1_10 -> "10" - else -> jdkVersion.toString() + task.compilerOptions.jvmTarget.convention( + jdkVersion.map { version -> + // For Java 9 and Java 10 JavaVersion returns "1.9" or "1.10" accordingly + // that is not accepted by Kotlin compiler + val normalizedVersion = when (version) { + JavaVersion.VERSION_1_9 -> "9" + JavaVersion.VERSION_1_10 -> "10" + else -> version.toString() + } + JvmTarget.fromTarget(normalizedVersion) } - } + ) } } } - private class DefaultJdkSetter( + private inner class DefaultJdkSetter( private val providedJvm: Property, private val objects: ObjectFactory, - private val updateProvidedJdkCallback: () -> Unit, kotlinCompileTaskProvider: () -> KotlinCompile? ) : JvmTargetUpdater(kotlinCompileTaskProvider), KotlinJavaToolchain.JdkSetter { @@ -192,10 +152,9 @@ internal abstract class DefaultKotlinJavaToolchain @Inject constructor( "Supplied jdkHomeLocation does not exist. You supplied: $jdkHomeLocation" } - updateProvidedJdkCallback.invoke() + updateJvmTarget(javaVersion) providedJvm.set( objects.providerWithLazyConvention { - updateJvmTarget(jdkVersion) Jvm.discovered(jdkHomeLocation, null, jdkVersion) } ) @@ -210,12 +169,11 @@ internal abstract class DefaultKotlinJavaToolchain @Inject constructor( override fun use( javaLauncher: Provider ) { - providedJvmExplicitlySet = true + updateJvmTarget(javaVersion) providedJvm.set( javaLauncher.map { val metadata = javaLauncher.get().metadata val javaVersion = JavaVersion.toVersion(metadata.languageVersion.asInt()) - updateJvmTarget(javaVersion) Jvm.discovered( metadata.installationPath.asFile, null, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 324d0af2260..497b6abdba7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -696,8 +696,6 @@ abstract class KotlinCompile @Inject constructor( ) ) - defaultKotlinJavaToolchain.get().updateJvmTarget(this, args) - if (reportingSettings().buildReportMode == BuildReportMode.VERBOSE) { args.reportPerf = true }