Skip to content

Commit 593fbad

Browse files
committed
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.
1 parent 060095d commit 593fbad

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleModuleConfigurator.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,17 @@
1717
package org.jetbrains.kotlin.android.configure;
1818

1919
import com.intellij.openapi.module.Module;
20+
import com.intellij.openapi.projectRoots.JavaSdk;
21+
import com.intellij.openapi.projectRoots.JavaSdkVersion;
22+
import com.intellij.openapi.projectRoots.Sdk;
2023
import org.jetbrains.annotations.NotNull;
24+
import org.jetbrains.annotations.Nullable;
2125
import org.jetbrains.kotlin.idea.KotlinPluginUtil;
2226
import org.jetbrains.kotlin.idea.configuration.KotlinWithGradleConfigurator;
27+
import org.jetbrains.kotlin.idea.versions.KotlinRuntimeLibraryUtilKt;
2328
import org.jetbrains.kotlin.resolve.TargetPlatform;
2429
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
2530
import org.jetbrains.plugins.groovy.lang.psi.GroovyFile;
26-
import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock;
2731

2832
public class KotlinAndroidGradleModuleConfigurator extends KotlinWithGradleConfigurator {
2933
public static final String NAME = "android-gradle";
@@ -68,6 +72,21 @@ protected boolean addElementsToFile(@NotNull GroovyFile groovyFile, boolean isTo
6872
}
6973
}
7074

75+
@NotNull
76+
@Override
77+
public String getRuntimeLibrary(@Nullable Sdk sdk) {
78+
if (sdk != null) {
79+
JavaSdkVersion version = JavaSdk.getInstance().getVersion(sdk);
80+
if (version != null && version.isAtLeast(JavaSdkVersion.JDK_1_8)) {
81+
// Android dex can't convert our kotlin-stdlib-jre8 artifact, so use jre7 instead (KT-16530)
82+
return KotlinWithGradleConfigurator.Companion.getDependencySnippet(
83+
KotlinRuntimeLibraryUtilKt.getMAVEN_STDLIB_ID_JRE7());
84+
}
85+
}
86+
87+
return super.getRuntimeLibrary(sdk);
88+
}
89+
7190
KotlinAndroidGradleModuleConfigurator() {
7291
}
7392
}

idea/src/org/jetbrains/kotlin/idea/configuration/GradleKotlinFrameworkSupportProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ class GradleKotlinJavaFrameworkSupportProvider : GradleKotlinFrameworkSupportPro
8888
override fun getPluginDefinition() = KotlinGradleModuleConfigurator.APPLY_KOTLIN
8989

9090
override fun getRuntimeLibrary(rootModel: ModifiableRootModel) =
91-
KotlinWithGradleConfigurator.getRuntimeLibrary(rootModel.sdk)
91+
KotlinWithGradleConfigurator.getRuntimeLibraryForSdk(rootModel.sdk)
9292
}
9393

9494
class GradleKotlinJSFrameworkSupportProvider : GradleKotlinFrameworkSupportProvider("KOTLIN_JS", "Kotlin (JavaScript)") {

idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithGradleConfigurator.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,10 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator {
195195
return isModified
196196
}
197197

198+
open fun getRuntimeLibrary(sdk: Sdk?): String {
199+
return getRuntimeLibraryForSdk(sdk)
200+
}
201+
198202
companion object {
199203
private val VERSION_TEMPLATE = "\$VERSION$"
200204

@@ -490,7 +494,7 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator {
490494
return addLastExpressionInBlockIfNeeded(snippet, repositoriesBlock)
491495
}
492496

493-
fun getRuntimeLibrary(sdk: Sdk?): String {
497+
fun getRuntimeLibraryForSdk(sdk: Sdk?): String {
494498
return getDependencySnippet(getStdlibArtifactId(sdk))
495499
}
496500

0 commit comments

Comments
 (0)