From f134575b86aa89a759ce5ab20f6c2ecf6254a798 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 11 Apr 2022 21:35:27 +0200 Subject: [PATCH] Gradle: remove setJvmTargetFromAndroidCompileOptions This flag was introduced for KT-21030 (see also KT-31027), to change JVM target 1.6 to 1.8 if Android options declare source/target compatibility with JDK 1.8. After JVM target 1.8 became the default for Kotlin (KT-29405), the logic was changed in e9436da858 to the reverse: if Android options declare source/target compatibility 1.6, then also use JVM target 1.6. Note that at that point, the problem with usages of default interface methods described in KT-21030 became obsolete, because it described a runtime crash when Kotlin tooling failed to recognized that JVM target >= 1.8 should be used -- which was now always the case, unless you explicitly opted in with `-jvm-target 1.6` (which would make little sense). Now that we're removing support for JVM target 1.6 in KT-45165, there is no use in this flag anymore. Even if Android options declare source/target compatibility 1.6, Kotlin should still use the minimal supported version for the JVM target, which is now 1.8. And since 1.8 is the default, no changes to the compiler options are needed. --- .../AbstractKotlinAndroidGradleTests.kt | 40 ------------------- .../kotlin/gradle/plugin/KotlinPlugin.kt | 31 +++++--------- .../kotlin/gradle/plugin/KotlinProperties.kt | 3 -- 3 files changed, 10 insertions(+), 64 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt index 83893a870ed..9decdc4be63 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt @@ -1098,46 +1098,6 @@ fun getSomething() = 10 } } - @Test - fun testDetectAndroidJava8() = with(Project("AndroidProject")) { - setupWorkingDir() - - val kotlinJvmTarget16Regex = Regex("Kotlin compiler args: .* -jvm-target 1.6") - - gradleBuildScript("Lib").appendText( - "\n" + """ - android.compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - """.trimIndent() - ) - - build(":Lib:assembleDebug", "-Pkotlin.setJvmTargetFromAndroidCompileOptions=true") { - assertSuccessful() - assertNotContains(kotlinJvmTarget16Regex) - } - - gradleBuildScript("Lib").appendText( - "\n" + """ - android.compileOptions { - sourceCompatibility JavaVersion.VERSION_1_6 - targetCompatibility JavaVersion.VERSION_1_6 - } - """.trimIndent() - ) - - build("clean", ":Lib:assembleDebug") { - assertSuccessful() - assertNotContains(kotlinJvmTarget16Regex) - } - - build(":Lib:assembleDebug", "-Pkotlin.setJvmTargetFromAndroidCompileOptions=true") { - assertSuccessful() - assertContainsRegex(kotlinJvmTarget16Regex) - } - } - @Test fun shouldAllowToApplyPluginWhenAndroidPluginIsMissing() { with(Project("simpleProject", minLogLevel = LogLevel.WARN)) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index 4c30e06e0e5..04690e3f531 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -6,8 +6,10 @@ package org.jetbrains.kotlin.gradle.plugin import com.android.build.gradle.* -import com.android.build.gradle.BasePlugin -import com.android.build.gradle.api.* +import com.android.build.gradle.api.AndroidSourceSet +import com.android.build.gradle.api.BaseVariant +import com.android.build.gradle.api.SourceKind +import com.android.build.gradle.api.UnitTestVariant import org.gradle.api.* import org.gradle.api.attributes.Category import org.gradle.api.attributes.Usage @@ -16,12 +18,16 @@ import org.gradle.api.file.Directory import org.gradle.api.file.FileCollection import org.gradle.api.file.SourceDirectorySet import org.gradle.api.logging.Logging -import org.gradle.api.plugins.* +import org.gradle.api.plugins.InvalidPluginException +import org.gradle.api.plugins.JavaPlugin +import org.gradle.api.plugins.JavaPluginConvention import org.gradle.api.provider.Provider import org.gradle.api.publish.PublishingExtension import org.gradle.api.publish.maven.MavenPom import org.gradle.api.publish.maven.MavenPublication -import org.gradle.api.tasks.* +import org.gradle.api.tasks.SourceSet +import org.gradle.api.tasks.TaskProvider +import org.gradle.api.tasks.Upload import org.gradle.api.tasks.compile.AbstractCompile import org.gradle.jvm.tasks.Jar import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry @@ -743,16 +749,6 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationTool val ext = project.extensions.getByName("android") as BaseExtension val kotlinOptions = KotlinJvmOptionsImpl() - project.whenEvaluated { - // TODO don't require the flag once there is an Android Gradle plugin build that supports desugaring of Long.hashCode and - // Boolean.hashCode. Instead, run conditionally, only with the AGP versions that play well with Kotlin bytecode for - // JVM target 1.8. - // See: KT-31027 - if (PropertiesProvider(project).setJvmTargetFromAndroidCompileOptions == true) { - applyAndroidJavaVersion(project.extensions.getByType(BaseExtension::class.java), kotlinOptions) - } - } - kotlinOptions.noJdk = true ext.addExtension(KOTLIN_OPTIONS_DSL_NAME, kotlinOptions) @@ -890,13 +886,6 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationTool } } - private fun applyAndroidJavaVersion(baseExtension: BaseExtension, kotlinOptions: KotlinJvmOptions) { - val javaVersion = - minOf(baseExtension.compileOptions.sourceCompatibility, baseExtension.compileOptions.targetCompatibility) - if (javaVersion == JavaVersion.VERSION_1_6) - kotlinOptions.jvmTarget = "1.6" - } - private fun addAndroidUnitTestTasksAsDependenciesToAllTest(project: Project) { val allTestTaskName = project.kotlinTestRegistry.allTestsTaskName project.tasks.matching { it.name == allTestTaskName }.configureEach { task -> diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt index 86843f5876c..04999dda8fb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt @@ -141,9 +141,6 @@ internal class PropertiesProvider private constructor(private val project: Proje val ignorePluginLoadedInMultipleProjects: Boolean? get() = booleanProperty("kotlin.pluginLoadedInMultipleProjects.ignore") - val setJvmTargetFromAndroidCompileOptions: Boolean? - get() = booleanProperty("kotlin.setJvmTargetFromAndroidCompileOptions") - val keepAndroidBuildTypeAttribute: Boolean get() = booleanProperty("kotlin.android.buildTypeAttribute.keep") ?: false