From 948699a24ba297e032a90d2ae87294bf154fe72a Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 19 Apr 2017 12:59:30 +0200 Subject: [PATCH] Set default jvmTarget when creating new Gradle project jvmTarget "1.8" is required to be able to use inline functions from kotlin-stdlib-jre8. --- .../GradleKotlinFrameworkSupportProvider.kt | 10 ++++++++++ .../kotlin/idea/versions/KotlinRuntimeLibraryUtil.kt | 12 ++++++++++++ 2 files changed, 22 insertions(+) diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/GradleKotlinFrameworkSupportProvider.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/GradleKotlinFrameworkSupportProvider.kt index 1b4f6e9b675..935ab0a3986 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/GradleKotlinFrameworkSupportProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/GradleKotlinFrameworkSupportProvider.kt @@ -24,6 +24,7 @@ import com.intellij.openapi.roots.ModifiableRootModel import org.jetbrains.kotlin.idea.KotlinIcons import org.jetbrains.kotlin.idea.versions.MAVEN_JS_STDLIB_ID import org.jetbrains.kotlin.idea.versions.bundledRuntimeVersion +import org.jetbrains.kotlin.idea.versions.getDefaultJvmTarget import org.jetbrains.plugins.gradle.frameworkSupport.BuildScriptDataBuilder import org.jetbrains.plugins.gradle.frameworkSupport.GradleFrameworkSupportProvider import javax.swing.Icon @@ -77,6 +78,15 @@ class GradleKotlinJavaFrameworkSupportProvider : GradleKotlinFrameworkSupportPro override fun getRuntimeLibrary(rootModel: ModifiableRootModel) = KotlinWithGradleConfigurator.getRuntimeLibraryForSdk(rootModel.sdk, bundledRuntimeVersion()) + + override fun addSupport(module: Module, rootModel: ModifiableRootModel, modifiableModelsProvider: ModifiableModelsProvider, buildScriptData: BuildScriptDataBuilder) { + super.addSupport(module, rootModel, modifiableModelsProvider, buildScriptData) + val jvmTarget = getDefaultJvmTarget(rootModel.sdk, bundledRuntimeVersion()) + if (jvmTarget != null) { + buildScriptData.addOther("compileKotlin {\n kotlinOptions.jvmTarget = \"1.8\"\n}\n\n") + buildScriptData.addOther("compileTestKotlin {\n kotlinOptions.jvmTarget = \"1.8\"\n}\n") + } + } } class GradleKotlinJSFrameworkSupportProvider : GradleKotlinFrameworkSupportProvider("KOTLIN_JS", "Kotlin (JavaScript)") { diff --git a/idea/src/org/jetbrains/kotlin/idea/versions/KotlinRuntimeLibraryUtil.kt b/idea/src/org/jetbrains/kotlin/idea/versions/KotlinRuntimeLibraryUtil.kt index f6919be23a6..daad1fb9347 100644 --- a/idea/src/org/jetbrains/kotlin/idea/versions/KotlinRuntimeLibraryUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/versions/KotlinRuntimeLibraryUtil.kt @@ -41,6 +41,7 @@ import com.intellij.util.indexing.FileBasedIndex import com.intellij.util.indexing.ScalarIndexExtension import com.intellij.util.text.VersionComparatorUtil import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.idea.KotlinPluginUtil import org.jetbrains.kotlin.idea.configuration.* import org.jetbrains.kotlin.idea.framework.JavaRuntimeDetectionUtil @@ -344,6 +345,17 @@ fun getStdlibArtifactId(sdk: Sdk?, version: String): String { return artifactId } +fun getDefaultJvmTarget(sdk: Sdk?, version: String): JvmTarget? { + if (!hasJreSpecificRuntime(version)) { + return null + } + val sdkVersion = sdk?.let { JavaSdk.getInstance().getVersion(it) } + if (sdkVersion != null && sdkVersion.isAtLeast(JavaSdkVersion.JDK_1_8)) { + return JvmTarget.JVM_1_8 + } + return null +} + fun hasJreSpecificRuntime(version: String): Boolean = VersionComparatorUtil.compare(version, "1.1.0") >= 0 || isSnapshot(version) ||