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:
committed by
Yan Zhulanow
parent
060095d39f
commit
593fbadc98
+20
-1
@@ -17,13 +17,17 @@
|
|||||||
package org.jetbrains.kotlin.android.configure;
|
package org.jetbrains.kotlin.android.configure;
|
||||||
|
|
||||||
import com.intellij.openapi.module.Module;
|
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.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.idea.KotlinPluginUtil;
|
import org.jetbrains.kotlin.idea.KotlinPluginUtil;
|
||||||
import org.jetbrains.kotlin.idea.configuration.KotlinWithGradleConfigurator;
|
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.TargetPlatform;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
||||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyFile;
|
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 class KotlinAndroidGradleModuleConfigurator extends KotlinWithGradleConfigurator {
|
||||||
public static final String NAME = "android-gradle";
|
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() {
|
KotlinAndroidGradleModuleConfigurator() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -88,7 +88,7 @@ class GradleKotlinJavaFrameworkSupportProvider : GradleKotlinFrameworkSupportPro
|
|||||||
override fun getPluginDefinition() = KotlinGradleModuleConfigurator.APPLY_KOTLIN
|
override fun getPluginDefinition() = KotlinGradleModuleConfigurator.APPLY_KOTLIN
|
||||||
|
|
||||||
override fun getRuntimeLibrary(rootModel: ModifiableRootModel) =
|
override fun getRuntimeLibrary(rootModel: ModifiableRootModel) =
|
||||||
KotlinWithGradleConfigurator.getRuntimeLibrary(rootModel.sdk)
|
KotlinWithGradleConfigurator.getRuntimeLibraryForSdk(rootModel.sdk)
|
||||||
}
|
}
|
||||||
|
|
||||||
class GradleKotlinJSFrameworkSupportProvider : GradleKotlinFrameworkSupportProvider("KOTLIN_JS", "Kotlin (JavaScript)") {
|
class GradleKotlinJSFrameworkSupportProvider : GradleKotlinFrameworkSupportProvider("KOTLIN_JS", "Kotlin (JavaScript)") {
|
||||||
|
|||||||
@@ -195,6 +195,10 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator {
|
|||||||
return isModified
|
return isModified
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun getRuntimeLibrary(sdk: Sdk?): String {
|
||||||
|
return getRuntimeLibraryForSdk(sdk)
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val VERSION_TEMPLATE = "\$VERSION$"
|
private val VERSION_TEMPLATE = "\$VERSION$"
|
||||||
|
|
||||||
@@ -490,7 +494,7 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator {
|
|||||||
return addLastExpressionInBlockIfNeeded(snippet, repositoriesBlock)
|
return addLastExpressionInBlockIfNeeded(snippet, repositoriesBlock)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getRuntimeLibrary(sdk: Sdk?): String {
|
fun getRuntimeLibraryForSdk(sdk: Sdk?): String {
|
||||||
return getDependencySnippet(getStdlibArtifactId(sdk))
|
return getDependencySnippet(getStdlibArtifactId(sdk))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user