Set default jvmTarget when creating new Gradle project

jvmTarget "1.8" is required to be able to use inline functions from
kotlin-stdlib-jre8.
This commit is contained in:
Dmitry Jemerov
2017-04-19 12:59:30 +02:00
parent d3682025cb
commit 948699a24b
2 changed files with 22 additions and 0 deletions
@@ -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)") {
@@ -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) ||