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 a3b09b10d63..687c5448c50 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 @@ -680,7 +680,7 @@ fun getSomething() = 10 val kotlinJvmTarget18Regex = Regex("Kotlin compiler args: .* -jvm-target 1.8") - build(":Lib:assemble") { + build(":Lib:assembleDebug", "-Pkotlin.setJvmTargetFromAndroidCompileOptions=true") { assertSuccessful() assertNotContains(kotlinJvmTarget18Regex) } @@ -694,7 +694,12 @@ fun getSomething() = 10 """.trimIndent() ) - build(":Lib:assemble") { + build("clean", ":Lib:assembleDebug") { + assertSuccessful() + assertNotContains(kotlinJvmTarget18Regex) + } + + build(":Lib:assembleDebug", "-Pkotlin.setJvmTargetFromAndroidCompileOptions=true") { assertSuccessful() assertContainsRegex(kotlinJvmTarget18Regex) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index 732c3eea082..8ef9ec3ccdb 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -735,7 +735,13 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationT val kotlinOptions = KotlinJvmOptionsImpl() project.whenEvaluated { - applyAndroidJavaVersion(project.extensions.getByType(BaseExtension::class.java), kotlinOptions) + // 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 diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt index c8b3391ea3f..4955f816844 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt @@ -85,6 +85,9 @@ internal class PropertiesProvider(private val project: Project) { val ignorePluginLoadedInMultipleProjects: Boolean? get() = booleanProperty("kotlin.pluginLoadedInMultipleProjects.ignore") + val setJvmTargetFromAndroidCompileOptions: Boolean? + get() = booleanProperty("kotlin.setJvmTargetFromAndroidCompileOptions") + /** * Enables parallel tasks execution within a project with Workers API. * Does not enable using actual worker proccesses