From ff3a08de6e8de8b5024d5a31d9e317ef12716da8 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Thu, 10 Feb 2022 16:40:31 +0100 Subject: [PATCH] Cleanup JVM toolchain implementation Remove support for ) } - - companion object { - val TOOLCHAIN_SUPPORTED_VERSION: GradleVersion = GradleVersion.version("6.7") - } } 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 e9823af1625..c1680ae0623 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 @@ -19,7 +19,7 @@ import java.io.File @DisplayName("Kotlin Java Toolchain support") class KotlinJavaToolchainTest : KGPBaseTest() { - @GradleTestVersions(additionalVersions = [TestVersions.Gradle.G_6_7]) + @GradleTestVersions @GradleTest @DisplayName("Should use by default same jvm as Gradle daemon for jdkHome") internal fun byDefaultShouldUseGradleJDK(gradleVersion: GradleVersion) { @@ -102,7 +102,7 @@ class KotlinJavaToolchainTest : KGPBaseTest() { } @DisplayName("Kotlin compile task should reuse build cache when toolchain is set and build is happening on different JDKs") - @GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7) + @GradleTestVersions @GradleTest internal fun differentBuildJDKBuildCacheHit(gradleVersion: GradleVersion) { val buildCache = workingDir.resolve("custom-jdk-build-cache") @@ -331,7 +331,7 @@ class KotlinJavaToolchainTest : KGPBaseTest() { } @DisplayName("Should allow to set JDK version for tasks via Java toolchain") - @GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7) + @GradleTestVersions @GradleTest internal fun setJdkUsingJavaToolchain(gradleVersion: GradleVersion) { project( @@ -346,7 +346,7 @@ class KotlinJavaToolchainTest : KGPBaseTest() { } @DisplayName("Should allow to set Java toolchain via extension") - @GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7) + @GradleTestVersions @GradleTest internal fun setJdkUsingJavaToolchainViaExtension(gradleVersion: GradleVersion) { project( @@ -361,7 +361,7 @@ class KotlinJavaToolchainTest : KGPBaseTest() { } @DisplayName("Toolchain should be correctly supported in multiplatform plugin jvm targets") - @GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7) + @GradleTestVersions @GradleTest internal fun toolchainCorrectlySupportedInMPPlugin(gradleVersion: GradleVersion) { project( @@ -419,7 +419,7 @@ class KotlinJavaToolchainTest : KGPBaseTest() { } @DisplayName("Should set 'jvmTarget' option if user does not specify it explicitly via toolchain setter") - @GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7) + @GradleTestVersions @GradleTest internal fun shouldSetJvmTargetNonSpecifiedByUserViaToolchain(gradleVersion: GradleVersion) { project( @@ -437,7 +437,7 @@ class KotlinJavaToolchainTest : KGPBaseTest() { } @DisplayName("Should not override user specified 'jvmTarget' option via toolchain setter") - @GradleTestVersions(minVersion = "6.7.1") + @GradleTestVersions @GradleTest internal fun shouldNotOverrideUserSpecifiedJvmTargetViaToolchain(gradleVersion: GradleVersion) { project( @@ -456,7 +456,7 @@ class KotlinJavaToolchainTest : KGPBaseTest() { } @DisplayName("Setting toolchain via java extension should also affect Kotlin compilations") - @GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7) + @GradleTestVersions @GradleTest internal fun settingToolchainViaJavaShouldAlsoWork(gradleVersion: GradleVersion) { project( @@ -487,8 +487,8 @@ class KotlinJavaToolchainTest : KGPBaseTest() { } } - @DisplayName("Build should not produce warninings when '-no-jdk' option is present") - @GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7) + @DisplayName("Build should not produce warnings when '-no-jdk' option is present") + @GradleTestVersions @GradleTest internal fun noWarningOnNoJdkOptionPresent(gradleVersion: GradleVersion) { project( @@ -520,7 +520,7 @@ class KotlinJavaToolchainTest : KGPBaseTest() { } @DisplayName("Toolchain should take into account kotlin options that are set via android extension") - @GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7) + @GradleTestVersions @GradleTest internal fun kotlinOptionsAndroidAndToolchain(gradleVersion: GradleVersion) { project("android".fullProjectName, gradleVersion) { @@ -544,7 +544,7 @@ class KotlinJavaToolchainTest : KGPBaseTest() { } @DisplayName("Toolchain should not make an exception when build is running on JDK 11, but toolchain is set to JDK 1.8") - @GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7) + @GradleTestVersions @GradleTest internal fun shouldNotRaiseErrorOnJDK11withJDK1_8Toolchain(gradleVersion: GradleVersion) { project( @@ -559,7 +559,7 @@ class KotlinJavaToolchainTest : KGPBaseTest() { } @DisplayName("JVM target shouldn't be changed when toolchain is not configured") - @GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7) + @GradleTestVersions @GradleTest internal fun shouldNotChangeJvmTargetWithNoToolchain(gradleVersion: GradleVersion) { project( @@ -586,7 +586,7 @@ class KotlinJavaToolchainTest : KGPBaseTest() { } @DisplayName("Kotlin toolchain should support configuration cache") - @GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7) + @GradleTestVersions @GradleTest internal fun testConfigurationCache(gradleVersion: GradleVersion) { project( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt index 9be24a0499a..1a918e77c16 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt @@ -77,9 +77,9 @@ abstract class KotlinTopLevelExtension(internal val project: Project) : KotlinTo /** * Configures [Java toolchain](https://docs.gradle.org/current/userguide/toolchains.html) both for Kotlin JVM and Java tasks. * - * @param action - action to configure [JavaToolchainSpec]. You could safely cast `Any` into `JavaToolchainSpec`. + * @param action - action to configure [JavaToolchainSpec] */ - fun jvmToolchain(action: Action) { + fun jvmToolchain(action: Action) { toolchainSupport.applyToolchain(action) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/ToolchainDsl.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/ToolchainDsl.kt index c2821f9b218..ef273f57c6b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/ToolchainDsl.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/ToolchainDsl.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.gradle.dsl import org.gradle.api.Action -import org.gradle.api.GradleException import org.gradle.api.Project import org.gradle.api.plugins.ExtensionContainer import org.gradle.api.plugins.JavaPluginExtension @@ -14,41 +13,27 @@ 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.gradle.util.GradleVersion -import org.jetbrains.kotlin.gradle.tasks.KotlinJavaToolchain.Companion.TOOLCHAIN_SUPPORTED_VERSION import org.jetbrains.kotlin.gradle.tasks.UsesKotlinJavaToolchain import org.jetbrains.kotlin.gradle.tasks.withType import org.jetbrains.kotlin.gradle.utils.newInstance import javax.inject.Inject internal interface ToolchainSupport { - fun applyToolchain(action: Action) + fun applyToolchain(action: Action) companion object { internal fun createToolchain( project: Project ): ToolchainSupport { - val currentVersion = GradleVersion.version(project.gradle.gradleVersion) - return when { - currentVersion < TOOLCHAIN_SUPPORTED_VERSION -> project.objects.newInstance() - else -> project.objects.newInstance( - project.extensions, - project.tasks, - project.plugins - ) - } + return project.objects.newInstance( + project.extensions, + project.tasks, + project.plugins + ) } } } -internal abstract class NonExistingToolchainSupport : ToolchainSupport { - override fun applyToolchain( - action: Action - ) { - throw GradleException("JavaToolchain support is only available from Gradle 6.7") - } -} - internal abstract class DefaultToolchainSupport @Inject constructor( private val extensions: ExtensionContainer, private val tasks: TaskContainer, @@ -64,7 +49,7 @@ internal abstract class DefaultToolchainSupport @Inject constructor( } override fun applyToolchain( - action: Action + action: Action ) { action.execute(toolchainSpec) configureToolchain() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptTask.kt index 4c257f50321..83335ec2935 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptTask.kt @@ -123,10 +123,7 @@ abstract class KaptTask @Inject constructor( @get:Internal internal val defaultKotlinJavaToolchain: Provider = objectFactory - .propertyWithNewInstance( - project.gradle, - { null } - ) + .propertyWithNewInstance({ null }) final override val kotlinJavaToolchainProvider: Provider = defaultKotlinJavaToolchain.cast() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/DefaultKotlinJavaToolchain.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/DefaultKotlinJavaToolchain.kt index b49071a277e..2721b354d30 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/DefaultKotlinJavaToolchain.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/DefaultKotlinJavaToolchain.kt @@ -9,34 +9,27 @@ import org.gradle.api.GradleException import org.gradle.api.JavaVersion import org.gradle.api.file.ProjectLayout import org.gradle.api.file.RegularFileProperty -import org.gradle.api.invocation.Gradle import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.Property 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.gradle.util.GradleVersion import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptionsImpl -import org.jetbrains.kotlin.gradle.tasks.KotlinJavaToolchain.Companion.TOOLCHAIN_SUPPORTED_VERSION import org.jetbrains.kotlin.gradle.utils.chainedFinalizeValueOnRead import org.jetbrains.kotlin.gradle.utils.property import org.jetbrains.kotlin.gradle.utils.propertyWithConvention import org.jetbrains.kotlin.gradle.utils.providerWithLazyConvention import java.io.File import javax.inject.Inject -import kotlin.reflect.full.functions internal abstract class DefaultKotlinJavaToolchain @Inject constructor( private val objects: ObjectFactory, projectLayout: ProjectLayout, - gradle: Gradle, kotlinCompileTaskProvider: () -> KotlinCompile? ) : KotlinJavaToolchain { - private val currentGradleVersion = GradleVersion.version(gradle.gradleVersion) - @get:Internal internal val currentJvm: Provider = objects .property(Jvm.current()) @@ -116,23 +109,13 @@ internal abstract class DefaultKotlinJavaToolchain @Inject constructor( final override val jdk: KotlinJavaToolchain.JdkSetter = DefaultJdkSetter( providedJvm, - currentGradleVersion, objects, { providedJvmExplicitlySet = true }, kotlinCompileTaskProvider ) - private val defaultJavaToolchainSetter by lazy(LazyThreadSafetyMode.NONE) { - if (currentGradleVersion >= TOOLCHAIN_SUPPORTED_VERSION) { - DefaultJavaToolchainSetter(providedJvm, kotlinCompileTaskProvider) - } else { - null - } - } - - final override val toolchain: KotlinJavaToolchain.JavaToolchainSetter - get() = defaultJavaToolchainSetter - ?: throw GradleException("Toolchain support is available from $TOOLCHAIN_SUPPORTED_VERSION") + final override val toolchain: KotlinJavaToolchain.JavaToolchainSetter = + DefaultJavaToolchainSetter(providedJvm, kotlinCompileTaskProvider) /** * Updates [task] 'jvmTarget' if user has configured toolchain and not 'jvmTarget'. @@ -197,7 +180,6 @@ internal abstract class DefaultKotlinJavaToolchain @Inject constructor( private class DefaultJdkSetter( private val providedJvm: Property, - private val currentGradleVersion: GradleVersion, private val objects: ObjectFactory, private val updateProvidedJdkCallback: () -> Unit, kotlinCompileTaskProvider: () -> KotlinCompile? @@ -219,14 +201,7 @@ internal abstract class DefaultKotlinJavaToolchain @Inject constructor( providedJvm.set( objects.providerWithLazyConvention { updateJvmTarget(jdkVersion) - if (currentGradleVersion < GradleVersion.version("6.2.0")) { - // Before Gradle 6.2.0 'Jvm.discovered' does not have 'implementationJavaVersion' parameter - Jvm::class.functions - .first { it.name == "discovered" } - .call(jdkHomeLocation, jdkVersion) as Jvm - } else { - Jvm.discovered(jdkHomeLocation, null, jdkVersion) - } + Jvm.discovered(jdkHomeLocation, null, jdkVersion) } ) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index b2a39cf191c..fcc8c9681d2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -678,10 +678,7 @@ abstract class KotlinCompile @Inject constructor( @get:Internal internal val defaultKotlinJavaToolchain: Provider = objects - .propertyWithNewInstance( - project.gradle, - { this } - ) + .propertyWithNewInstance({ this }) final override val kotlinJavaToolchainProvider: Provider = defaultKotlinJavaToolchain.cast()