From 593fbadc985b5585882d03c29da53e1d1b127b4e Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Mon, 27 Feb 2017 19:58:33 +0300 Subject: [PATCH] Force using the 'kotlin-stdlib-jre7' artifact when configuring Android modules with JDK >= 1.8 as Dex can't process our 'kotlin-stdlib-jre8' artifact. This fixes KT-16530: Configure Kotlin in Project inserts dependency to kotlin-stdlib-jre8 in Android projects. --- ...KotlinAndroidGradleModuleConfigurator.java | 21 ++++++++++++++++++- .../GradleKotlinFrameworkSupportProvider.kt | 2 +- .../KotlinWithGradleConfigurator.kt | 6 +++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleModuleConfigurator.java b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleModuleConfigurator.java index 3bc7804c400..7379408a33d 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleModuleConfigurator.java +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleModuleConfigurator.java @@ -17,13 +17,17 @@ package org.jetbrains.kotlin.android.configure; import com.intellij.openapi.module.Module; +import com.intellij.openapi.projectRoots.JavaSdk; +import com.intellij.openapi.projectRoots.JavaSdkVersion; +import com.intellij.openapi.projectRoots.Sdk; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.idea.KotlinPluginUtil; import org.jetbrains.kotlin.idea.configuration.KotlinWithGradleConfigurator; +import org.jetbrains.kotlin.idea.versions.KotlinRuntimeLibraryUtilKt; import org.jetbrains.kotlin.resolve.TargetPlatform; import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock; public class KotlinAndroidGradleModuleConfigurator extends KotlinWithGradleConfigurator { public static final String NAME = "android-gradle"; @@ -68,6 +72,21 @@ public class KotlinAndroidGradleModuleConfigurator extends KotlinWithGradleConfi } } + @NotNull + @Override + public String getRuntimeLibrary(@Nullable Sdk sdk) { + if (sdk != null) { + JavaSdkVersion version = JavaSdk.getInstance().getVersion(sdk); + if (version != null && version.isAtLeast(JavaSdkVersion.JDK_1_8)) { + // Android dex can't convert our kotlin-stdlib-jre8 artifact, so use jre7 instead (KT-16530) + return KotlinWithGradleConfigurator.Companion.getDependencySnippet( + KotlinRuntimeLibraryUtilKt.getMAVEN_STDLIB_ID_JRE7()); + } + } + + return super.getRuntimeLibrary(sdk); + } + KotlinAndroidGradleModuleConfigurator() { } } diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/GradleKotlinFrameworkSupportProvider.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/GradleKotlinFrameworkSupportProvider.kt index fb7cb1afaed..2922e708e06 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/GradleKotlinFrameworkSupportProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/GradleKotlinFrameworkSupportProvider.kt @@ -88,7 +88,7 @@ class GradleKotlinJavaFrameworkSupportProvider : GradleKotlinFrameworkSupportPro override fun getPluginDefinition() = KotlinGradleModuleConfigurator.APPLY_KOTLIN override fun getRuntimeLibrary(rootModel: ModifiableRootModel) = - KotlinWithGradleConfigurator.getRuntimeLibrary(rootModel.sdk) + KotlinWithGradleConfigurator.getRuntimeLibraryForSdk(rootModel.sdk) } class GradleKotlinJSFrameworkSupportProvider : GradleKotlinFrameworkSupportProvider("KOTLIN_JS", "Kotlin (JavaScript)") { diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithGradleConfigurator.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithGradleConfigurator.kt index 242e6342ee6..ad41cba4acf 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithGradleConfigurator.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithGradleConfigurator.kt @@ -195,6 +195,10 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator { return isModified } + open fun getRuntimeLibrary(sdk: Sdk?): String { + return getRuntimeLibraryForSdk(sdk) + } + companion object { private val VERSION_TEMPLATE = "\$VERSION$" @@ -490,7 +494,7 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator { return addLastExpressionInBlockIfNeeded(snippet, repositoriesBlock) } - fun getRuntimeLibrary(sdk: Sdk?): String { + fun getRuntimeLibraryForSdk(sdk: Sdk?): String { return getDependencySnippet(getStdlibArtifactId(sdk)) }