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() {
}
}