diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleLibraryDataService.kt b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleLibraryDataService.kt index 8c4a6a7e0c6..4988b342bd8 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleLibraryDataService.kt +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleLibraryDataService.kt @@ -28,7 +28,7 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.roots.OrderRootType import com.intellij.openapi.roots.impl.libraries.LibraryEx import com.intellij.openapi.roots.libraries.Library -import org.jetbrains.kotlin.idea.configuration.detectPlatformByPlugin +import org.jetbrains.kotlin.idea.configuration.detectPlatformKindByPlugin import org.jetbrains.kotlin.idea.framework.detectLibraryKind import org.jetbrains.kotlin.idea.platform.tooling import java.io.File @@ -44,7 +44,7 @@ class KotlinAndroidGradleLibraryDataService : AbstractProjectDataService)?.tooling?.libraryKind + val targetLibraryKind = detectPlatformKindByPlugin(dataNode.parent as DataNode)?.tooling?.libraryKind if (targetLibraryKind != null) { for (dep in dataNode.data.jarLibraryDependencies) { val library = modelsProvider.findLibraryByBinaryPath(dep.binaryPath) as LibraryEx? ?: continue diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleLibraryDataService.kt.181 b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleLibraryDataService.kt.181 index 8a6d2b7997e..0770030b883 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleLibraryDataService.kt.181 +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleLibraryDataService.kt.181 @@ -28,7 +28,7 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.roots.OrderRootType import com.intellij.openapi.roots.impl.libraries.LibraryEx import com.intellij.openapi.roots.libraries.Library -import org.jetbrains.kotlin.idea.configuration.detectPlatformByPlugin +import org.jetbrains.kotlin.idea.configuration.detectPlatformKindByPlugin import org.jetbrains.kotlin.idea.framework.detectLibraryKind import org.jetbrains.kotlin.idea.platform.tooling import java.io.File @@ -44,7 +44,7 @@ class KotlinAndroidGradleLibraryDataService : AbstractProjectDataService)?.tooling?.libraryKind + val targetLibraryKind = detectPlatformKindByPlugin(dataNode.parent as DataNode)?.tooling?.libraryKind if (targetLibraryKind != null) { for (dep in dataNode.data.jarLibraryDependencies) { val library = modelsProvider.findLibraryByBinaryPath(dep.binaryPath) as LibraryEx? ?: continue diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleLibraryDataService.kt.as31 b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleLibraryDataService.kt.as31 index 8c4a6a7e0c6..4988b342bd8 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleLibraryDataService.kt.as31 +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleLibraryDataService.kt.as31 @@ -28,7 +28,7 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.roots.OrderRootType import com.intellij.openapi.roots.impl.libraries.LibraryEx import com.intellij.openapi.roots.libraries.Library -import org.jetbrains.kotlin.idea.configuration.detectPlatformByPlugin +import org.jetbrains.kotlin.idea.configuration.detectPlatformKindByPlugin import org.jetbrains.kotlin.idea.framework.detectLibraryKind import org.jetbrains.kotlin.idea.platform.tooling import java.io.File @@ -44,7 +44,7 @@ class KotlinAndroidGradleLibraryDataService : AbstractProjectDataService)?.tooling?.libraryKind + val targetLibraryKind = detectPlatformKindByPlugin(dataNode.parent as DataNode)?.tooling?.libraryKind if (targetLibraryKind != null) { for (dep in dataNode.data.jarLibraryDependencies) { val library = modelsProvider.findLibraryByBinaryPath(dep.binaryPath) as LibraryEx? ?: continue diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleLibraryDataService.kt.as32 b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleLibraryDataService.kt.as32 index 8c4a6a7e0c6..4988b342bd8 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleLibraryDataService.kt.as32 +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleLibraryDataService.kt.as32 @@ -28,7 +28,7 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.roots.OrderRootType import com.intellij.openapi.roots.impl.libraries.LibraryEx import com.intellij.openapi.roots.libraries.Library -import org.jetbrains.kotlin.idea.configuration.detectPlatformByPlugin +import org.jetbrains.kotlin.idea.configuration.detectPlatformKindByPlugin import org.jetbrains.kotlin.idea.framework.detectLibraryKind import org.jetbrains.kotlin.idea.platform.tooling import java.io.File @@ -44,7 +44,7 @@ class KotlinAndroidGradleLibraryDataService : AbstractProjectDataService)?.tooling?.libraryKind + val targetLibraryKind = detectPlatformKindByPlugin(dataNode.parent as DataNode)?.tooling?.libraryKind if (targetLibraryKind != null) { for (dep in dataNode.data.jarLibraryDependencies) { val library = modelsProvider.findLibraryByBinaryPath(dep.binaryPath) as LibraryEx? ?: continue diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt index bdbd1f4897f..c03e6ab1152 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt @@ -162,7 +162,7 @@ class KotlinGradleLibraryDataService : AbstractProjectDataService> val anyNonJvmModules = moduleDataNodes - .any { node -> detectPlatformByPlugin(node)?.takeIf { !it.isJvm } != null } + .any { node -> detectPlatformKindByPlugin(node)?.takeIf { !it.isJvm } != null } for (libraryDataNode in toImport) { val ideLibrary = modelsProvider.findIdeLibrary(libraryDataNode.data) ?: continue @@ -202,11 +202,26 @@ class KotlinGradleLibraryDataService : AbstractProjectDataService): IdePlatformKind<*>? { +fun detectPlatformKindByPlugin(moduleNode: DataNode): IdePlatformKind<*>? { val pluginId = moduleNode.platformPluginId return IdePlatformKind.ALL_KINDS.firstOrNull { it.tooling.gradlePluginId == pluginId } } +@Suppress("DEPRECATION_ERROR") +@Deprecated( + "Use detectPlatformKindByPlugin() instead", + replaceWith = ReplaceWith("detectPlatformKindByPlugin(moduleNode)"), + level = DeprecationLevel.ERROR +) +fun detectPlatformByPlugin(moduleNode: DataNode): TargetPlatformKind<*>? { + return when (moduleNode.platformPluginId) { + "kotlin-platform-jvm" -> TargetPlatformKind.Jvm[JvmTarget.JVM_1_6] + "kotlin-platform-js" -> TargetPlatformKind.JavaScript + "kotlin-platform-common" -> TargetPlatformKind.Common + else -> null + } +} + private fun detectPlatformByLibrary(moduleNode: DataNode): IdePlatformKind<*>? { val detectedPlatforms = mavenLibraryIdToPlatform.entries @@ -246,7 +261,7 @@ fun configureFacetByGradleModule( val compilerVersion = moduleNode.findAll(BuildScriptClasspathData.KEY).firstOrNull()?.data?.let(::findKotlinPluginVersion) ?: return null - val platformKind = detectPlatformByPlugin(moduleNode) ?: detectPlatformByLibrary(moduleNode) + val platformKind = detectPlatformKindByPlugin(moduleNode) ?: detectPlatformByLibrary(moduleNode) // TODO there should be a way to figure out the correct platform version val platform = platformKind?.defaultPlatform 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 c3428d7b61c..8b1cf56172b 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 @@ -26,6 +26,31 @@ import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind import org.jetbrains.kotlin.utils.DescriptionAware +@Deprecated("Use IdePlatformKind instead.", level = DeprecationLevel.ERROR) +sealed class TargetPlatformKind( + val version: Version, + val name: String +) : DescriptionAware { + override val description = "$name ${version.description}" + + class Jvm(version: JvmTarget) : @Suppress("DEPRECATION_ERROR") TargetPlatformKind(version, "JVM") { + companion object { + private val JVM_PLATFORMS by lazy { JvmTarget.values().map(::Jvm) } + operator fun get(version: JvmTarget) = JVM_PLATFORMS[version.ordinal] + } + } + + object JavaScript : @Suppress("DEPRECATION_ERROR") TargetPlatformKind( + TargetPlatformVersion.NoVersion, + "JavaScript" + ) + + object Common : @Suppress("DEPRECATION_ERROR") TargetPlatformKind( + TargetPlatformVersion.NoVersion, + "Common (experimental)" + ) +} + object CoroutineSupport { @JvmStatic fun byCompilerArguments(arguments: CommonCompilerArguments?): LanguageFeature.State = diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/JSLibraryType.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/JSLibraryType.kt index 95568e8938b..50c06ca1e3c 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/JSLibraryType.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/JSLibraryType.kt @@ -82,4 +82,13 @@ class JSLibraryType : LibraryType(JSLibraryKind) { } } -private fun isAcceptedForJsLibrary(extension: String?) = extension == "js" || extension == "kjsm" \ No newline at end of file +private fun isAcceptedForJsLibrary(extension: String?) = extension == "js" || extension == "kjsm" + +@Suppress("DEPRECATION_ERROR") +// Can't import a member annotated with DEPRECATION_ERROR +val org.jetbrains.kotlin.config.TargetPlatformKind<*>.libraryKind: PersistentLibraryKind<*>? + get() = when (this) { + org.jetbrains.kotlin.config.TargetPlatformKind.JavaScript -> JSLibraryKind + org.jetbrains.kotlin.config.TargetPlatformKind.Common -> CommonLibraryKind + else -> null + }