From ffbd0e8af198a1a662f0d12fe5c101696a3774d5 Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Thu, 14 Mar 2019 16:04:00 +0300 Subject: [PATCH] Automatically detect Android Java 1.8 source+target (KT-21030) When Android Java 8 desugaring is set as follows (or above): compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } set the Kotlin JVM target to 1.8 Issue #KT-21030 Fixed --- .../AbstractKotlinAndroidGradleTests.kt | 26 +++++++++++++++++++ .../kotlin/gradle/plugin/KotlinPlugin.kt | 11 ++++++++ 2 files changed, 37 insertions(+) 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 1f9312dcf0f..a3b09b10d63 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 @@ -673,4 +673,30 @@ fun getSomething() = 10 assertFileExists("libAndroid/build/tmp/kotlin-classes/debugUnitTest/foo/PlatformTest.class") } } + + @Test + fun testDetectAndroidJava8() = with(Project("AndroidProject")) { + setupWorkingDir() + + val kotlinJvmTarget18Regex = Regex("Kotlin compiler args: .* -jvm-target 1.8") + + build(":Lib:assemble") { + assertSuccessful() + assertNotContains(kotlinJvmTarget18Regex) + } + + gradleBuildScript("Lib").appendText( + "\n" + """ + android.compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + """.trimIndent() + ) + + build(":Lib:assemble") { + assertSuccessful() + assertContainsRegex(kotlinJvmTarget18Regex) + } + } } \ No newline at end of file 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 2bedb0e7553..b581897b348 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 @@ -734,6 +734,10 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationT } val kotlinOptions = KotlinJvmOptionsImpl() + project.whenEvaluated { + applyAndroidJavaVersion(project.extensions.getByType(BaseExtension::class.java), kotlinOptions) + } + kotlinOptions.noJdk = true ext.addExtension(KOTLIN_OPTIONS_DSL_NAME, kotlinOptions) @@ -778,6 +782,13 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationT } } + private fun applyAndroidJavaVersion(baseExtension: BaseExtension, kotlinOptions: KotlinJvmOptions) { + val javaVersion = + listOf(baseExtension.compileOptions.sourceCompatibility, baseExtension.compileOptions.targetCompatibility).min()!! + if (javaVersion >= JavaVersion.VERSION_1_8) + kotlinOptions.jvmTarget = "1.8" + } + private fun processVariant( variantData: V, compilation: KotlinJvmAndroidCompilation,