diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt index 1d98580d35d..d7e9152c3da 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt @@ -31,8 +31,12 @@ sealed class TargetPlatformKind( ) : DescriptionAware { override val description = "$name ${version.description}" - sealed class Jvm(version: JvmTarget) : TargetPlatformKind(version, "JVM") { - object JVM_1_6 : Jvm(JvmTarget.JVM_1_6) + class Jvm(version: JvmTarget) : TargetPlatformKind(version, "JVM") { + companion object { + val JVM_PLATFORMS by lazy { JvmTarget.values().map(::Jvm) } + + operator fun get(version: JvmTarget) = JVM_PLATFORMS[version.ordinal] + } } object JavaScript : TargetPlatformKind(NoVersion, "JavaScript") @@ -40,7 +44,8 @@ sealed class TargetPlatformKind( object Common : TargetPlatformKind(NoVersion, "Common (experimental)") companion object { - val ALL_PLATFORMS: List> by lazy { listOf(Jvm.JVM_1_6, JavaScript, Common) } + + val ALL_PLATFORMS: List> by lazy { Jvm.JVM_PLATFORMS + JavaScript + Common } } } diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/KotlinMavenImporter.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/KotlinMavenImporter.kt index 5a185013d23..cb634b04675 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/KotlinMavenImporter.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/KotlinMavenImporter.kt @@ -34,6 +34,7 @@ import org.jetbrains.idea.maven.project.* import org.jetbrains.jps.model.java.JavaSourceRootType import org.jetbrains.jps.model.module.JpsModuleSourceRootType import org.jetbrains.kotlin.config.CoroutineSupport +import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.TargetPlatformKind import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor import org.jetbrains.kotlin.idea.facet.KotlinFacet @@ -116,7 +117,7 @@ class KotlinMavenImporter : MavenImporter(KOTLIN_PLUGIN_GROUP_ID, KOTLIN_PLUGIN_ private fun detectPlatformByExecutions(mavenProject: MavenProject): TargetPlatformKind<*>? { return mavenProject.findPlugin(KOTLIN_PLUGIN_GROUP_ID, KOTLIN_PLUGIN_ARTIFACT_ID)?.executions?.flatMap { it.goals }?.mapNotNull { goal -> when (goal) { - PomFile.KotlinGoals.Compile, PomFile.KotlinGoals.TestCompile -> TargetPlatformKind.Jvm.JVM_1_6 + PomFile.KotlinGoals.Compile, PomFile.KotlinGoals.TestCompile -> TargetPlatformKind.Jvm[JvmTarget.JVM_1_6] PomFile.KotlinGoals.Js, PomFile.KotlinGoals.TestJs -> TargetPlatformKind.JavaScript PomFile.KotlinGoals.MetaData -> TargetPlatformKind.Common else -> null diff --git a/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java b/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java index 5477a26b2ee..7de6b59b6d2 100644 --- a/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java +++ b/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java @@ -195,7 +195,9 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co @SuppressWarnings("unchecked") private void fillJvmVersionList() { - jvmVersionComboBox.addItem(TargetPlatformKind.Jvm.JVM_1_6.INSTANCE.getVersion().getDescription()); + for (TargetPlatformKind.Jvm jvm : TargetPlatformKind.Jvm.Companion.getJVM_PLATFORMS()) { + jvmVersionComboBox.addItem(jvm.getVersion().getDescription()); + } } @SuppressWarnings("unchecked") diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectDataService.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectDataService.kt index 6108825669d..537c028cb36 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectDataService.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectDataService.kt @@ -25,6 +25,7 @@ import com.intellij.openapi.externalSystem.service.project.manage.AbstractProjec import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil import com.intellij.openapi.project.Project import org.jetbrains.kotlin.config.CoroutineSupport +import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.TargetPlatformKind import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor import org.jetbrains.kotlin.idea.facet.KotlinFacet @@ -56,7 +57,7 @@ class KotlinGradleProjectDataService : AbstractProjectDataService, ExternalProjectDataService.KEY) return externalProjectNode?.let { when (it.data.plugins.values.map { it.id }.firstOrNull { it.startsWith("kotlin-platform-") }) { - "kotlin-platform-jvm" -> TargetPlatformKind.Jvm.JVM_1_6 + "kotlin-platform-jvm" -> TargetPlatformKind.Jvm[JvmTarget.JVM_1_6] "kotlin-platform-js" -> TargetPlatformKind.JavaScript "kotlin-platform-common" -> TargetPlatformKind.Common else -> null diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt index f079bce28d3..cac9a9838ad 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt @@ -18,16 +18,15 @@ package org.jetbrains.kotlin.idea.facet import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider import com.intellij.openapi.module.Module +import com.intellij.openapi.projectRoots.JavaSdk +import com.intellij.openapi.projectRoots.JavaSdkVersion import com.intellij.openapi.roots.LibraryOrderEntry import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.ModuleRootModel import com.intellij.openapi.roots.OrderRootType import com.intellij.util.text.VersionComparatorUtil import org.jetbrains.kotlin.cli.common.arguments.copyBean -import org.jetbrains.kotlin.config.CoroutineSupport -import org.jetbrains.kotlin.config.KotlinFacetSettings -import org.jetbrains.kotlin.config.LanguageVersion -import org.jetbrains.kotlin.config.TargetPlatformKind +import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.idea.compiler.configuration.Kotlin2JsCompilerArgumentsHolder import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgumentsHolder import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCompilerSettings @@ -70,7 +69,13 @@ private fun getDefaultTargetPlatform(module: Module, rootModel: ModuleRootModel? if (getRuntimeLibraryVersions(module, rootModel, TargetPlatformKind.Common).isNotEmpty()) { return TargetPlatformKind.Common } - return TargetPlatformKind.Jvm.JVM_1_6 + + val sdk = ((rootModel ?: ModuleRootManager.getInstance(module))).sdk + val sdkVersion = (sdk?.sdkType as? JavaSdk)?.getVersion(sdk!!) + return when { + sdkVersion == null || sdkVersion >= JavaSdkVersion.JDK_1_8 -> TargetPlatformKind.Jvm[JvmTarget.JVM_1_8] + else -> TargetPlatformKind.Jvm[JvmTarget.JVM_1_6] + } } private fun getDefaultLanguageLevel( @@ -93,7 +98,7 @@ internal fun getLibraryLanguageLevel( rootModel: ModuleRootModel?, targetPlatform: TargetPlatformKind<*>? ): LanguageVersion { - val minVersion = getRuntimeLibraryVersions(module, rootModel, targetPlatform ?: TargetPlatformKind.Jvm.JVM_1_6) + val minVersion = getRuntimeLibraryVersions(module, rootModel, targetPlatform ?: TargetPlatformKind.Jvm[JvmTarget.JVM_1_8]) .minWith(VersionComparatorUtil.COMPARATOR) return getDefaultLanguageLevel(module, minVersion) } diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTest.kt b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTest.kt index e14dd08dd45..e17a128b256 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTest.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.idea.caches.resolve import com.intellij.openapi.roots.DependencyScope +import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.TargetPlatformKind class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { @@ -65,7 +66,7 @@ class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { header.setPlatformKind(TargetPlatformKind.Common) val jvm = module("jvm") - jvm.setPlatformKind(TargetPlatformKind.Jvm.JVM_1_6) + jvm.setPlatformKind(TargetPlatformKind.Jvm[JvmTarget.JVM_1_6]) jvm.enableMultiPlatform() jvm.addDependency(header) @@ -77,7 +78,7 @@ class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { header.setPlatformKind(TargetPlatformKind.Common) val jvm = module("jvm") - jvm.setPlatformKind(TargetPlatformKind.Jvm.JVM_1_6) + jvm.setPlatformKind(TargetPlatformKind.Jvm[JvmTarget.JVM_1_6]) jvm.enableMultiPlatform() jvm.addDependency(header) @@ -89,7 +90,7 @@ class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { header.setPlatformKind(TargetPlatformKind.Common) val jvm = module("jvm") - jvm.setPlatformKind(TargetPlatformKind.Jvm.JVM_1_6) + jvm.setPlatformKind(TargetPlatformKind.Jvm[JvmTarget.JVM_1_6]) jvm.enableMultiPlatform() jvm.addDependency(header) @@ -106,7 +107,7 @@ class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { header.setPlatformKind(TargetPlatformKind.Common) val jvm = module("jvm") - jvm.setPlatformKind(TargetPlatformKind.Jvm.JVM_1_6) + jvm.setPlatformKind(TargetPlatformKind.Jvm[JvmTarget.JVM_1_6]) jvm.enableMultiPlatform() jvm.addDependency(header) @@ -130,7 +131,7 @@ class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { header.setPlatformKind(TargetPlatformKind.Common) val jvm = module("jvm") - jvm.setPlatformKind(TargetPlatformKind.Jvm.JVM_1_6) + jvm.setPlatformKind(TargetPlatformKind.Jvm[JvmTarget.JVM_1_6]) jvm.enableMultiPlatform() jvm.addDependency(header) diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleLineMarkerTest.kt b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleLineMarkerTest.kt index 90790be54bf..32cf99475d4 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleLineMarkerTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleLineMarkerTest.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.caches.resolve +import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.TargetPlatformKind class MultiModuleLineMarkerTest : AbstractMultiModuleLineMarkerTest() { @@ -24,7 +25,7 @@ class MultiModuleLineMarkerTest : AbstractMultiModuleLineMarkerTest() { header.setPlatformKind(TargetPlatformKind.Common) val jvm = module("jvm") - jvm.setPlatformKind(TargetPlatformKind.Jvm.JVM_1_6) + jvm.setPlatformKind(TargetPlatformKind.Jvm[JvmTarget.JVM_1_6]) jvm.enableMultiPlatform() jvm.addDependency(header) @@ -36,7 +37,7 @@ class MultiModuleLineMarkerTest : AbstractMultiModuleLineMarkerTest() { header.setPlatformKind(TargetPlatformKind.Common) val jvm = module("jvm") - jvm.setPlatformKind(TargetPlatformKind.Jvm.JVM_1_6) + jvm.setPlatformKind(TargetPlatformKind.Jvm[JvmTarget.JVM_1_6]) jvm.enableMultiPlatform() jvm.addDependency(header) @@ -48,7 +49,7 @@ class MultiModuleLineMarkerTest : AbstractMultiModuleLineMarkerTest() { header.setPlatformKind(TargetPlatformKind.Common) val jvm = module("jvm") - jvm.setPlatformKind(TargetPlatformKind.Jvm.JVM_1_6) + jvm.setPlatformKind(TargetPlatformKind.Jvm[JvmTarget.JVM_1_6]) jvm.enableMultiPlatform() jvm.addDependency(header) diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTest.kt b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTest.kt index f472ad567d8..1f5e159f498 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTest.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.quickfix +import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.TargetPlatformKind import org.junit.Test @@ -23,7 +24,7 @@ class QuickFixMultiModuleTest : AbstractQuickFixMultiModuleTest() { private fun doMultiPlatformTest(headerName: String = "header", implName: String = "jvm", - implKind: TargetPlatformKind<*> = TargetPlatformKind.Jvm.JVM_1_6) { + implKind: TargetPlatformKind<*> = TargetPlatformKind.Jvm[JvmTarget.JVM_1_6]) { val header = module(headerName) header.setPlatformKind(TargetPlatformKind.Common)