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.
This commit is contained in:
Yan Zhulanow
2017-02-27 19:58:33 +03:00
committed by Yan Zhulanow
parent 060095d39f
commit 593fbadc98
3 changed files with 26 additions and 3 deletions
@@ -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() {
}
}
@@ -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)") {
@@ -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))
}