diff --git a/.idea/modules.xml b/.idea/modules.xml
index f1576db4311a..e7f8af998f50 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -1027,10 +1027,14 @@
+
+
+
+
diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/kotlin/KotlinPluginBuilder.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/kotlin/KotlinPluginBuilder.groovy
index 192a7e21ae93..306871aa8cb2 100644
--- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/kotlin/KotlinPluginBuilder.groovy
+++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/kotlin/KotlinPluginBuilder.groovy
@@ -68,6 +68,10 @@ final class KotlinPluginBuilder {
"kotlin.base.compiler-configuration",
"kotlin.base.plugin",
"kotlin.base.psi",
+ "kotlin.base.platforms",
+ "kotlin.base.facet",
+ "kotlin.base.jps",
+ "kotlin.base.compiler-configuration-ui",
"kotlin.base.resources",
"kotlin.base.fe10.analysis",
"kotlin.base.fe10.kdoc",
diff --git a/plugins/kotlin/analysis/resources/messages/KotlinIdeaAnalysisBundle.properties b/plugins/kotlin/analysis/resources/messages/KotlinIdeaAnalysisBundle.properties
index 1b2ba3498702..f2d44e1c9f43 100644
--- a/plugins/kotlin/analysis/resources/messages/KotlinIdeaAnalysisBundle.properties
+++ b/plugins/kotlin/analysis/resources/messages/KotlinIdeaAnalysisBundle.properties
@@ -94,6 +94,4 @@ function.receiver.0=receiver: {0}
kotlin.javascript.meta.file=Kotlin JavaScript meta file
kotlin.compiler.error=Kotlin compiler error
kotlin.compiler.warning=Kotlin compiler warning
-kotlin.compiler.warning.0.options=Compiler warning ''{0}'' options
-
-framework.name.kotlin.sdk=Kotlin SDK
+kotlin.compiler.warning.0.options=Compiler warning ''{0}'' options
\ No newline at end of file
diff --git a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/caches/resolve/CommonPlatformKindResolution.kt b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/caches/resolve/CommonPlatformKindResolution.kt
index 881a52d55659..cc86f76a9e55 100644
--- a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/caches/resolve/CommonPlatformKindResolution.kt
+++ b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/caches/resolve/CommonPlatformKindResolution.kt
@@ -5,8 +5,6 @@ package org.jetbrains.kotlin.caches.resolve
import com.intellij.openapi.project.Project
import com.intellij.openapi.roots.OrderRootType
import com.intellij.openapi.roots.libraries.Library
-import com.intellij.openapi.roots.libraries.PersistentLibraryKind
-import com.intellij.openapi.vfs.VirtualFile
import com.intellij.util.PathUtil
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.analyzer.PlatformAnalysisParameters
@@ -20,14 +18,13 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.context.ProjectContext
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
+import org.jetbrains.kotlin.idea.base.platforms.isKlibLibraryRootForPlatform
import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo
import org.jetbrains.kotlin.idea.caches.project.LibraryInfo
import org.jetbrains.kotlin.idea.caches.project.SdkInfo
import org.jetbrains.kotlin.idea.caches.resolve.BuiltInsCacheKey
-import org.jetbrains.kotlin.idea.framework.CommonLibraryKind
import org.jetbrains.kotlin.idea.klib.AbstractKlibLibraryInfo
import org.jetbrains.kotlin.idea.klib.createKlibPackageFragmentProvider
-import org.jetbrains.kotlin.idea.klib.isKlibLibraryRootForPlatform
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer
@@ -35,19 +32,10 @@ import org.jetbrains.kotlin.platform.CommonPlatforms
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.impl.CommonIdePlatformKind
import org.jetbrains.kotlin.resolve.TargetEnvironment
-import org.jetbrains.kotlin.serialization.deserialization.MetadataPackageFragment
import org.jetbrains.kotlin.serialization.konan.impl.KlibMetadataModuleDescriptorFactoryImpl
import org.jetbrains.kotlin.storage.StorageManager
class CommonPlatformKindResolution : IdePlatformKindResolution {
- override fun isLibraryFileForPlatform(virtualFile: VirtualFile): Boolean {
- return virtualFile.extension == MetadataPackageFragment.METADATA_FILE_EXTENSION ||
- virtualFile.isKlibLibraryRootForPlatform(CommonPlatforms.defaultCommonPlatform)
- }
-
- override val libraryKind: PersistentLibraryKind<*>
- get() = CommonLibraryKind
-
override val kind get() = CommonIdePlatformKind
override fun getKeyForBuiltIns(moduleInfo: ModuleInfo, sdkInfo: SdkInfo?, stdlibInfo: LibraryInfo?): BuiltInsCacheKey =
@@ -64,9 +52,8 @@ class CommonPlatformKindResolution : IdePlatformKindResolution {
}
override fun createLibraryInfo(project: Project, library: Library): List {
- val klibFiles = library.getFiles(OrderRootType.CLASSES).filter {
- it.isKlibLibraryRootForPlatform(CommonPlatforms.defaultCommonPlatform)
- }
+ val klibFiles = library.getFiles(OrderRootType.CLASSES)
+ .filter { it.isKlibLibraryRootForPlatform(CommonPlatforms.defaultCommonPlatform) }
return if (klibFiles.isNotEmpty()) {
klibFiles.mapNotNull {
diff --git a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/caches/resolve/IdePlatformKindResolution.kt b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/caches/resolve/IdePlatformKindResolution.kt
index 04d888710f57..ca8b7a225dbe 100644
--- a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/caches/resolve/IdePlatformKindResolution.kt
+++ b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/caches/resolve/IdePlatformKindResolution.kt
@@ -43,8 +43,6 @@ interface IdePlatformKindResolution {
platform: TargetPlatform
): ResolverForModuleFactory
- fun isLibraryFileForPlatform(virtualFile: VirtualFile): Boolean
-
fun createKlibPackageFragmentProvider(
moduleInfo: ModuleInfo,
storageManager: StorageManager,
@@ -52,8 +50,6 @@ interface IdePlatformKindResolution {
moduleDescriptor: ModuleDescriptor
): PackageFragmentProvider? = null
- val libraryKind: PersistentLibraryKind<*>?
-
fun createLibraryInfo(project: Project, library: Library): List
companion object : ApplicationExtensionDescriptor(
diff --git a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/caches/resolve/JsPlatformKindResolution.kt b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/caches/resolve/JsPlatformKindResolution.kt
index d71243168a82..1d87e4c96b16 100644
--- a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/caches/resolve/JsPlatformKindResolution.kt
+++ b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/caches/resolve/JsPlatformKindResolution.kt
@@ -5,8 +5,6 @@ package org.jetbrains.kotlin.caches.resolve
import com.intellij.openapi.project.Project
import com.intellij.openapi.roots.OrderRootType
import com.intellij.openapi.roots.libraries.Library
-import com.intellij.openapi.roots.libraries.PersistentLibraryKind
-import com.intellij.openapi.vfs.VirtualFile
import com.intellij.util.PathUtil
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.analyzer.PlatformAnalysisParameters
@@ -18,14 +16,13 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.context.ProjectContext
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
+import org.jetbrains.kotlin.idea.base.platforms.isKlibLibraryRootForPlatform
import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo
import org.jetbrains.kotlin.idea.caches.project.LibraryInfo
import org.jetbrains.kotlin.idea.caches.project.SdkInfo
import org.jetbrains.kotlin.idea.caches.resolve.BuiltInsCacheKey
-import org.jetbrains.kotlin.idea.framework.JSLibraryKind
import org.jetbrains.kotlin.idea.klib.AbstractKlibLibraryInfo
import org.jetbrains.kotlin.idea.klib.createKlibPackageFragmentProvider
-import org.jetbrains.kotlin.idea.klib.isKlibLibraryRootForPlatform
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
import org.jetbrains.kotlin.platform.TargetPlatform
@@ -37,15 +34,6 @@ import org.jetbrains.kotlin.serialization.konan.impl.KlibMetadataModuleDescripto
import org.jetbrains.kotlin.storage.StorageManager
class JsPlatformKindResolution : IdePlatformKindResolution {
- override fun isLibraryFileForPlatform(virtualFile: VirtualFile): Boolean {
- return virtualFile.extension == "js"
- || virtualFile.extension == "kjsm"
- || virtualFile.isKlibLibraryRootForPlatform(JsPlatforms.defaultJsPlatform)
- }
-
- override val libraryKind: PersistentLibraryKind<*>
- get() = JSLibraryKind
-
override val kind get() = JsIdePlatformKind
override fun getKeyForBuiltIns(moduleInfo: ModuleInfo, sdkInfo: SdkInfo?, stdlibInfo: LibraryInfo?): BuiltInsCacheKey {
@@ -69,9 +57,8 @@ class JsPlatformKindResolution : IdePlatformKindResolution {
): ResolverForModuleFactory = JsResolverForModuleFactory(environment)
override fun createLibraryInfo(project: Project, library: Library): List {
- val klibFiles = library.getFiles(OrderRootType.CLASSES).filter {
- it.isKlibLibraryRootForPlatform(JsPlatforms.defaultJsPlatform)
- }
+ val klibFiles = library.getFiles(OrderRootType.CLASSES)
+ .filter { it.isKlibLibraryRootForPlatform(JsPlatforms.defaultJsPlatform) }
return if (klibFiles.isNotEmpty()) {
klibFiles.mapNotNull {
diff --git a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/caches/resolve/JvmPlatformKindResolution.kt b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/caches/resolve/JvmPlatformKindResolution.kt
index 456d15141c07..c9ab83ee0918 100644
--- a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/caches/resolve/JvmPlatformKindResolution.kt
+++ b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/caches/resolve/JvmPlatformKindResolution.kt
@@ -6,8 +6,6 @@ import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.roots.libraries.Library
-import com.intellij.openapi.roots.libraries.PersistentLibraryKind
-import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.analyzer.PlatformAnalysisParameters
import org.jetbrains.kotlin.analyzer.ResolverForModuleFactory
@@ -33,10 +31,6 @@ import org.jetbrains.kotlin.resolve.jvm.JvmResolverForModuleFactory
private val LOG = Logger.getInstance(JvmPlatformKindResolution::class.java)
class JvmPlatformKindResolution : IdePlatformKindResolution {
- override fun isLibraryFileForPlatform(virtualFile: VirtualFile): Boolean {
- return false // TODO: No library kind for JVM
- }
-
override fun createResolverForModuleFactory(
settings: PlatformAnalysisParameters,
environment: TargetEnvironment,
@@ -45,9 +39,6 @@ class JvmPlatformKindResolution : IdePlatformKindResolution {
return JvmResolverForModuleFactory(settings as JvmPlatformParameters, environment, platform)
}
- override val libraryKind: PersistentLibraryKind<*>?
- get() = null
-
override fun createLibraryInfo(project: Project, library: Library): List =
listOf(JvmLibraryInfo(project, library))
diff --git a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt
index 26f76267bd56..ad3d561cc32c 100644
--- a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt
+++ b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt
@@ -26,6 +26,9 @@ import org.jetbrains.kotlin.config.SourceKotlinRootType
import org.jetbrains.kotlin.config.TestSourceKotlinRootType
import org.jetbrains.kotlin.descriptors.ModuleCapability
import org.jetbrains.kotlin.idea.KotlinIdeaAnalysisBundle
+import org.jetbrains.kotlin.idea.base.platforms.IdePlatformKindProjectStructure
+import org.jetbrains.kotlin.idea.base.platforms.LibraryEffectiveKindProvider
+import org.jetbrains.kotlin.idea.base.platforms.platform
import org.jetbrains.kotlin.idea.caches.resolve.util.enlargedSearchScope
import org.jetbrains.kotlin.idea.caches.trackers.KotlinModuleOutOfCodeBlockModificationTracker
import org.jetbrains.kotlin.idea.framework.KotlinSdkType
diff --git a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/caches/project/LibraryInfoCache.kt b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/caches/project/LibraryInfoCache.kt
index 74f3bf4e84f1..1e8b97e9fca0 100644
--- a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/caches/project/LibraryInfoCache.kt
+++ b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/caches/project/LibraryInfoCache.kt
@@ -18,8 +18,8 @@ import com.intellij.workspaceModel.storage.VersionedStorageChange
import com.intellij.workspaceModel.storage.bridgeEntities.api.LibraryEntity
import org.jetbrains.kotlin.caches.project.cacheInvalidatingOnRootModifications
import org.jetbrains.kotlin.caches.resolve.resolution
-import org.jetbrains.kotlin.idea.framework.effectiveKind
-import org.jetbrains.kotlin.idea.framework.platform
+import org.jetbrains.kotlin.idea.base.platforms.LibraryEffectiveKindProvider
+import org.jetbrains.kotlin.idea.base.platforms.platform
import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider
import org.jetbrains.kotlin.platform.idePlatformKind
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
@@ -57,7 +57,7 @@ class LibraryInfoCache(private val project: Project): Disposable {
val approximatePlatform = if (library is LibraryEx && !library.isDisposed) {
// for Native returns 'unspecifiedNativePlatform', thus "approximate"
- library.effectiveKind(project).platform
+ LibraryEffectiveKindProvider.getInstance(project).getEffectiveKind(library).platform
} else {
DefaultIdeTargetPlatformKindProvider.defaultPlatform
}
diff --git a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/caches/project/moduleInfosFromIdeaModel.kt b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/caches/project/moduleInfosFromIdeaModel.kt
index 62dbdb086a53..ae653eeb6200 100644
--- a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/caches/project/moduleInfosFromIdeaModel.kt
+++ b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/caches/project/moduleInfosFromIdeaModel.kt
@@ -6,6 +6,7 @@ import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleManager
import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.project.Project
+import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.roots.JdkOrderEntry
import com.intellij.openapi.roots.LibraryOrderEntry
@@ -15,7 +16,7 @@ import com.intellij.openapi.roots.impl.libraries.LibraryEx
import com.intellij.openapi.roots.libraries.Library
import com.intellij.util.containers.MultiMap
import org.jetbrains.kotlin.caches.project.cacheInvalidatingOnRootModifications
-import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe
+import org.jetbrains.kotlin.idea.util.application.runReadAction
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.isCommon
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus.checkCanceled
@@ -151,4 +152,4 @@ private fun mergePlatformModules(
return rest + platformModules
}
-fun getAllProjectSdks(): Array = getProjectJdkTableSafe().allJdks
+fun getAllProjectSdks(): Array = runReadAction { ProjectJdkTable.getInstance() }.allJdks
diff --git a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt
index eaa0d4f8fcf0..03bd7daf6a64 100644
--- a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt
+++ b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt
@@ -11,6 +11,7 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Key
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analyzer.ModuleInfo
+import org.jetbrains.kotlin.base.util.isAndroidModule
import org.jetbrains.kotlin.caches.project.cacheInvalidatingOnRootModifications
import org.jetbrains.kotlin.caches.resolve.KotlinCacheService
import org.jetbrains.kotlin.config.KotlinFacetSettings
@@ -20,7 +21,6 @@ import org.jetbrains.kotlin.config.isNewMPP
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.idea.caches.project.SourceType.PRODUCTION
import org.jetbrains.kotlin.idea.caches.project.SourceType.TEST
-import org.jetbrains.kotlin.idea.core.isAndroidModule
import org.jetbrains.kotlin.idea.facet.KotlinFacet
import org.jetbrains.kotlin.idea.facet.KotlinFacetType
import org.jetbrains.kotlin.idea.facet.KotlinFacetType.Companion.ID
diff --git a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/framework/CommonLibraryType.kt b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/framework/CommonLibraryType.kt
index cc54b54f526d..38e2040af740 100644
--- a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/framework/CommonLibraryType.kt
+++ b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/framework/CommonLibraryType.kt
@@ -9,9 +9,10 @@ import com.intellij.openapi.roots.libraries.NewLibraryConfiguration
import com.intellij.openapi.roots.libraries.ui.LibraryEditorComponent
import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.idea.KotlinIcons
+import org.jetbrains.kotlin.idea.base.platforms.KotlinCommonLibraryKind
import javax.swing.JComponent
-object CommonLibraryType : LibraryType(CommonLibraryKind) {
+object CommonLibraryType : LibraryType(KotlinCommonLibraryKind) {
override fun createPropertiesEditor(editorComponent: LibraryEditorComponent) = null
override fun getCreateActionName() = null
diff --git a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/framework/LibraryEffectiveKindProvider.kt b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/framework/LibraryEffectiveKindProvider.kt
deleted file mode 100644
index a3cace79c1a4..000000000000
--- a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/framework/LibraryEffectiveKindProvider.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-
-package org.jetbrains.kotlin.idea.framework
-
-import com.intellij.openapi.components.service
-import com.intellij.openapi.project.Project
-import com.intellij.openapi.roots.impl.libraries.LibraryEx
-import com.intellij.openapi.roots.libraries.PersistentLibraryKind
-
-interface LibraryEffectiveKindProvider {
- fun getEffectiveKind(library: LibraryEx): PersistentLibraryKind<*>?
-
- companion object {
- fun getInstance(project: Project): LibraryEffectiveKindProvider = project.service()
- }
-}
-
-fun LibraryEx.effectiveKind(project: Project) = LibraryEffectiveKindProvider.getInstance(project).getEffectiveKind(this)
\ No newline at end of file
diff --git a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/framework/LibraryKinds.kt b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/framework/LibraryKinds.kt
deleted file mode 100644
index fa19fa2451e5..000000000000
--- a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/framework/LibraryKinds.kt
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-
-package org.jetbrains.kotlin.idea.framework
-
-import com.intellij.openapi.roots.OrderRootType
-import com.intellij.openapi.roots.libraries.DummyLibraryProperties
-import com.intellij.openapi.roots.libraries.Library
-import com.intellij.openapi.roots.libraries.PersistentLibraryKind
-import com.intellij.openapi.util.io.JarUtil
-import com.intellij.openapi.vfs.*
-import org.jetbrains.kotlin.caches.resolve.IdePlatformKindResolution
-import org.jetbrains.kotlin.caches.resolve.resolution
-import org.jetbrains.kotlin.idea.compiler.configuration.IdeKotlinVersion
-import org.jetbrains.kotlin.idea.vfilefinder.KnownLibraryKindForIndex
-import org.jetbrains.kotlin.idea.vfilefinder.getLibraryKindForJar
-import org.jetbrains.kotlin.platform.CommonPlatforms
-import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider
-import org.jetbrains.kotlin.platform.TargetPlatform
-import org.jetbrains.kotlin.platform.idePlatformKind
-import org.jetbrains.kotlin.platform.js.JsPlatforms
-import org.jetbrains.kotlin.utils.PathUtil
-import java.util.jar.Attributes
-import java.util.regex.Pattern
-
-interface KotlinLibraryKind {
- // TODO: Drop this property. See https://youtrack.jetbrains.com/issue/KT-38233
- // This property returns approximate library platform, as the real platform can be evaluated only for concrete library.
- val compilerPlatform: TargetPlatform
-}
-
-object JSLibraryKind : PersistentLibraryKind("kotlin.js"), KotlinLibraryKind {
- override val compilerPlatform: TargetPlatform
- get() = JsPlatforms.defaultJsPlatform
-
- override fun createDefaultProperties() = DummyLibraryProperties.INSTANCE!!
-}
-
-object CommonLibraryKind : PersistentLibraryKind("kotlin.common"), KotlinLibraryKind {
- override val compilerPlatform: TargetPlatform
- get() = CommonPlatforms.defaultCommonPlatform
-
- override fun createDefaultProperties() = DummyLibraryProperties.INSTANCE!!
-}
-
-// TODO: Drop this property. See https://youtrack.jetbrains.com/issue/KT-38233
-// It returns approximate library platform, as the real platform can be evaluated only for concrete library.
-val PersistentLibraryKind<*>?.platform: TargetPlatform
- get() = when (this) {
- is KotlinLibraryKind -> this.compilerPlatform
- else -> DefaultIdeTargetPlatformKindProvider.defaultPlatform
- }
-
-fun detectLibraryKind(roots: Array): PersistentLibraryKind<*>? {
- val jarFile = roots.firstOrNull() ?: return null
- if (jarFile.fileSystem is JarFileSystem) {
- // TODO: Detect library kind for Jar file using IdePlatformKindResolution.
- when (jarFile.getLibraryKindForJar()) {
- KnownLibraryKindForIndex.COMMON -> return CommonLibraryKind
- KnownLibraryKindForIndex.JS -> return JSLibraryKind
- KnownLibraryKindForIndex.UNKNOWN -> {
- /* Continue detection of library kind via IdePlatformKindResolution. */
- }
- }
- }
-
- val matchingResolution =
- IdePlatformKindResolution
- .getInstances()
- .firstOrNull { it.isLibraryFileForPlatform(jarFile) }
-
- if (matchingResolution != null) return matchingResolution.libraryKind
-
- return DefaultIdeTargetPlatformKindProvider.defaultPlatform.idePlatformKind.resolution.libraryKind
-}
-
-fun getLibraryJar(roots: Array, jarPattern: Pattern): VirtualFile? {
- return roots.firstOrNull { jarPattern.matcher(it.name).matches() }
-}
-
-fun getLibraryJarVersion(library: Library, jarPattern: Pattern): IdeKotlinVersion? {
- val libraryJar = getLibraryJar(library.getFiles(OrderRootType.CLASSES), jarPattern) ?: return null
- return IdeKotlinVersion.fromManifest(libraryJar)
-}
-
-fun getCommonRuntimeLibraryVersion(library: Library): IdeKotlinVersion? {
- return getLibraryJarVersion(library, PathUtil.KOTLIN_STDLIB_COMMON_JAR_PATTERN)
-}
diff --git a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/klib/utils.kt b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/klib/utils.kt
index ce206c746ad4..fd471edd7610 100644
--- a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/klib/utils.kt
+++ b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/klib/utils.kt
@@ -2,10 +2,7 @@
package org.jetbrains.kotlin.idea.klib
-import com.intellij.ide.highlighter.ArchiveFileType
import com.intellij.openapi.project.Project
-import com.intellij.openapi.vfs.InvalidVirtualFileAccessException
-import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiFileFactory
import com.intellij.psi.SingleRootFileViewProvider
import com.intellij.psi.impl.PsiFileFactoryImpl
@@ -18,79 +15,11 @@ import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.incremental.components.LookupTracker
-import org.jetbrains.kotlin.library.*
-import org.jetbrains.kotlin.library.impl.BuiltInsPlatform
-import org.jetbrains.kotlin.platform.TargetPlatform
-import org.jetbrains.kotlin.platform.isCommon
-import org.jetbrains.kotlin.platform.js.isJs
-import org.jetbrains.kotlin.platform.jvm.isJvm
-import org.jetbrains.kotlin.platform.konan.isNative
+import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
import org.jetbrains.kotlin.storage.StorageManager
import java.io.IOException
-import java.util.*
-
-fun VirtualFile.isKlibLibraryRootForPlatform(targetPlatform: TargetPlatform): Boolean {
- // The virtual file for a library packed in a ZIP file will have path like "/some/path/to/the/file.klib!/",
- // and therefore will be recognized by VFS as a directory (isDirectory == true).
- // So, first, let's check the file type and file extension.
- if ((fileType == ArchiveFileType.INSTANCE && extension != KLIB_FILE_EXTENSION) || !isDirectory)
- return false
-
- // run check for library root too
- // this is necessary to recognize old style KLIBs that do not have components, and report tem to user appropriately
- // (relevant only for Kotlin/Native KLIBs)
- val requestedBuiltInsPlatform = targetPlatform.toBuiltInsPlatform()
- if (requestedBuiltInsPlatform == BuiltInsPlatform.NATIVE && checkKlibComponent(this, requestedBuiltInsPlatform)) {
- return true
- }
-
- try {
- return children?.any { checkKlibComponent(it, requestedBuiltInsPlatform) } == true
- } catch (e: InvalidVirtualFileAccessException) {
- return false
- }
-}
-
-private fun checkKlibComponent(componentFile: VirtualFile, requestedBuiltInsPlatform: BuiltInsPlatform): Boolean {
- val manifestFile = componentFile.findChild(KLIB_MANIFEST_FILE_NAME)?.takeIf { !it.isDirectory } ?: return false
-
- val manifestProperties = try {
- manifestFile.inputStream.use { Properties().apply { load(it) } }
- } catch (_: IOException) {
- return false
- }
-
- if (!manifestProperties.containsKey(KLIB_PROPERTY_UNIQUE_NAME)) return false
-
- val builtInsPlatformProperty = manifestProperties.getProperty(KLIB_PROPERTY_BUILTINS_PLATFORM)
- // No builtins_platform property => either a new common klib (we don't write builtins_platform for common) or old Native klib
- ?: return when (requestedBuiltInsPlatform) {
- BuiltInsPlatform.NATIVE -> componentFile.isLegacyNativeKlibComponent // TODO(dsavvinov): drop additional legacy check after 1.4
- BuiltInsPlatform.COMMON -> !componentFile.isLegacyNativeKlibComponent
- else -> false
- }
-
- val builtInsPlatform = BuiltInsPlatform.parseFromString(builtInsPlatformProperty) ?: return false
-
- return builtInsPlatform == requestedBuiltInsPlatform
-}
-
-private fun TargetPlatform.toBuiltInsPlatform() = when {
- isCommon() -> BuiltInsPlatform.COMMON
- isNative() -> BuiltInsPlatform.NATIVE
- isJvm() -> BuiltInsPlatform.JVM
- isJs() -> BuiltInsPlatform.JS
- else -> throw IllegalArgumentException("Unknown platform $this")
-}
-
-private val VirtualFile.isLegacyNativeKlibComponent: Boolean
- get() {
- val irFolder = findChild(KLIB_IR_FOLDER_NAME)
- return irFolder != null && irFolder.children.isNotEmpty()
- }
-
fun KotlinLibrary.safeRead(defaultValue: T, action: KotlinLibrary.() -> T) = try {
action()
diff --git a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/util/ijPlatformUtil.kt b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/util/ijPlatformUtil.kt
deleted file mode 100644
index 6a446c572484..000000000000
--- a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/util/ijPlatformUtil.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-@file:JvmName("IjPlatformUtil")
-
-package org.jetbrains.kotlin.idea.util
-
-
-import com.intellij.openapi.projectRoots.ProjectJdkTable
-import org.jetbrains.kotlin.idea.util.application.runReadAction
-
-fun getProjectJdkTableSafe(): ProjectJdkTable = runReadAction { ProjectJdkTable.getInstance() }
diff --git a/plugins/kotlin/base/compiler-configuration-ui/kotlin.base.compiler-configuration-ui.iml b/plugins/kotlin/base/compiler-configuration-ui/kotlin.base.compiler-configuration-ui.iml
new file mode 100644
index 000000000000..796216bb1100
--- /dev/null
+++ b/plugins/kotlin/base/compiler-configuration-ui/kotlin.base.compiler-configuration-ui.iml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/plugins/kotlin/base/compiler-configuration-ui/resources/messages/KotlinBaseCompilerConfigurationUiBundle.properties b/plugins/kotlin/base/compiler-configuration-ui/resources/messages/KotlinBaseCompilerConfigurationUiBundle.properties
new file mode 100644
index 000000000000..7e8d830ea289
--- /dev/null
+++ b/plugins/kotlin/base/compiler-configuration-ui/resources/messages/KotlinBaseCompilerConfigurationUiBundle.properties
@@ -0,0 +1,58 @@
+facet.name.general=General
+
+facet.column.name.options=Options
+facet.column.name.plugin=Plugin
+
+facet.name.compiler.plugins=Compiler Plugins
+facet.text.following.options.are.not.correct=Following options are not correct:
+
+facet.label.text.target.platform=Target platform:
+facet.label.text.selected.target.platforms=Selected target platforms:
+facet.label.text.the.project.is.imported.from.external.build.system.and.could.not.be.edited=The project is imported from external build system and could not be edited
+
+facet.checkbox.text.use.project.settings=Use project settings
+
+facet.label.text.project.settings.that.are.used.for.this.facet=Project settings that are used for this facet:
+
+facet.text.multiplatform=Multiplatform
+
+facet.link.text.edit.project.settings=Edit project settings
+
+facet.error.text.at.least.one.target.platform.should.be.selected=At least one target platform should be selected
+
+facet.text.following.arguments.are.redundant=Following arguments are redundant: {0}
+facet.text.following.arguments.override.facet.settings=Following arguments override facet settings: {0}
+
+facets.editor.general.tab.label.depends.on.0=Depends on: {0}.
+
+configuration.description.plain.put.to.global.scope=Plain (put to global scope)
+
+configuration.description.amd=AMD
+configuration.description.commonjs=CommonJS
+configuration.description.umd.detect.amd.or.commonjs.if.available.fallback.to.plain=UMD (detect AMD or CommonJS if available, fallback to plain)
+
+configuration.description.always=Always
+configuration.description.never=Never
+
+configuration.description.when.inlining.a.function.from.other.module.with.embedded.sources=When inlining a function from other module with embedded sources
+
+configuration.title.kotlin.compiler.js.option.output.prefix.browse.title=Choose File to Prepend to Generated Code
+configuration.title.kotlin.compiler.js.option.output.postfix.browse.title=Choose File to Append to Generated Code
+configuration.title.choose.output.directory=Choose Output Directory
+
+configuration.warning.text.modules.override.project.settings={0} modules override project settings
+configuration.warning.text.following.modules.override.project.settings=Following modules override project settings:
+configuration.text.and=and
+configuration.text.other.s=other(s)
+
+loading.available.versions.from.maven=Loading available versions from Maven...
+failed.fetching.all.available.versions.from.maven=Failed fetching all available versions from Maven
+
+configuration.name.kotlin.compiler=Kotlin Compiler
+configuration.text.bundled.0.jps.version=Bundled ({0})
+configuration.text.0.unsupported.jps.version={0} (Unsupported)
+
+deprecated.jvm.version=(deprecated)
+
+configuration.warning.text.language.version.unsupported=Language version {0} is no longer supported
+configuration.warning.text.api.version.unsupported=API version {0} is no longer supported
\ No newline at end of file
diff --git a/plugins/kotlin/base/compiler-configuration-ui/src/org/jetbrains/kotlin/idea/base/compilerPreferences/KotlinBaseCompilerConfigurationUiBundle.kt b/plugins/kotlin/base/compiler-configuration-ui/src/org/jetbrains/kotlin/idea/base/compilerPreferences/KotlinBaseCompilerConfigurationUiBundle.kt
new file mode 100644
index 000000000000..53c1fd620ab1
--- /dev/null
+++ b/plugins/kotlin/base/compiler-configuration-ui/src/org/jetbrains/kotlin/idea/base/compilerPreferences/KotlinBaseCompilerConfigurationUiBundle.kt
@@ -0,0 +1,16 @@
+// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package org.jetbrains.kotlin.idea.base.compilerPreferences
+
+import org.jetbrains.annotations.Nls
+import org.jetbrains.annotations.NonNls
+import org.jetbrains.annotations.PropertyKey
+import org.jetbrains.kotlin.util.AbstractKotlinBundle
+
+@NonNls
+private const val BUNDLE = "messages.KotlinBaseCompilerConfigurationUiBundle"
+
+object KotlinBaseCompilerConfigurationUiBundle : AbstractKotlinBundle(BUNDLE) {
+ @Nls
+ @JvmStatic
+ fun message(@NonNls @PropertyKey(resourceBundle = BUNDLE) key: String, vararg params: Any): String = getMessage(key, *params)
+}
\ No newline at end of file
diff --git a/plugins/kotlin/base/compiler-configuration-ui/src/org/jetbrains/kotlin/idea/base/compilerPreferences/KotlinFacetEditorProviderServiceImpl.kt b/plugins/kotlin/base/compiler-configuration-ui/src/org/jetbrains/kotlin/idea/base/compilerPreferences/KotlinFacetEditorProviderServiceImpl.kt
new file mode 100644
index 000000000000..83502650213b
--- /dev/null
+++ b/plugins/kotlin/base/compiler-configuration-ui/src/org/jetbrains/kotlin/idea/base/compilerPreferences/KotlinFacetEditorProviderServiceImpl.kt
@@ -0,0 +1,29 @@
+// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package org.jetbrains.kotlin.idea.base.compilerPreferences
+
+import com.intellij.facet.ui.*
+import com.intellij.openapi.project.Project
+import org.jetbrains.kotlin.idea.base.compilerPreferences.facet.KotlinFacetCompilerPluginsTab
+import org.jetbrains.kotlin.idea.base.compilerPreferences.facet.KotlinFacetEditorGeneralTab
+import org.jetbrains.kotlin.idea.base.compilerPreferences.facet.MultipleKotlinFacetEditor
+import org.jetbrains.kotlin.idea.facet.KotlinFacetConfiguration
+import org.jetbrains.kotlin.idea.facet.KotlinFacetEditorProviderService
+
+class KotlinFacetEditorProviderServiceImpl : KotlinFacetEditorProviderService {
+ override fun getEditorTabs(
+ configuration: KotlinFacetConfiguration,
+ editorContext: FacetEditorContext,
+ validatorsManager: FacetValidatorsManager
+ ): List {
+ val tabs = ArrayList(2)
+ tabs += KotlinFacetEditorGeneralTab(configuration, editorContext, validatorsManager)
+ if (KotlinFacetCompilerPluginsTab.parsePluginOptions(configuration).isNotEmpty()) {
+ tabs += KotlinFacetCompilerPluginsTab(configuration, validatorsManager)
+ }
+ return tabs
+ }
+
+ override fun getMultipleConfigurationEditor(project: Project, editors: Array): MultipleFacetSettingsEditor {
+ return MultipleKotlinFacetEditor(project, editors)
+ }
+}
\ No newline at end of file
diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/JpsVersionItem.java b/plugins/kotlin/base/compiler-configuration-ui/src/org/jetbrains/kotlin/idea/base/compilerPreferences/configuration/JpsVersionItem.java
similarity index 81%
rename from plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/JpsVersionItem.java
rename to plugins/kotlin/base/compiler-configuration-ui/src/org/jetbrains/kotlin/idea/base/compilerPreferences/configuration/JpsVersionItem.java
index 834a3a56f2f4..a7ea5bba363f 100644
--- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/JpsVersionItem.java
+++ b/plugins/kotlin/base/compiler-configuration-ui/src/org/jetbrains/kotlin/idea/base/compilerPreferences/configuration/JpsVersionItem.java
@@ -1,12 +1,14 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package org.jetbrains.kotlin.idea.compiler.configuration;
+package org.jetbrains.kotlin.idea.base.compilerPreferences.configuration;
import com.intellij.openapi.util.NlsSafe;
import kotlin.KotlinVersion;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import org.jetbrains.kotlin.idea.KotlinBundle;
+import org.jetbrains.kotlin.idea.base.compilerPreferences.KotlinBaseCompilerConfigurationUiBundle;
+import org.jetbrains.kotlin.idea.compiler.configuration.IdeKotlinVersion;
+import org.jetbrains.kotlin.idea.compiler.configuration.KotlinJpsPluginSettings;
import org.jetbrains.kotlin.utils.DescriptionAware;
import java.util.Objects;
@@ -41,13 +43,13 @@ class JpsVersionItem implements DescriptionAware {
public @NotNull String getDescription() {
if (myVersion == null) return Objects.requireNonNull(myText);
if (myVersion.equals(KotlinJpsPluginSettings.getBundledVersion())) {
- return KotlinBundle.message("configuration.text.bundled.0.jps.version", myVersion);
+ return KotlinBaseCompilerConfigurationUiBundle.message("configuration.text.bundled.0.jps.version", myVersion);
}
KotlinVersion kotlinVersion = myVersion.getKotlinVersion();
if (kotlinVersion.compareTo(KotlinJpsPluginSettings.getJpsMinimumSupportedVersion()) < 0 ||
kotlinVersion.compareTo(KotlinJpsPluginSettings.getJpsMaximumSupportedVersion()) > 0) {
- return KotlinBundle.message("configuration.text.0.unsupported.jps.version", myVersion);
+ return KotlinBaseCompilerConfigurationUiBundle.message("configuration.text.0.unsupported.jps.version", myVersion);
}
return myVersion.toString();
diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.form b/plugins/kotlin/base/compiler-configuration-ui/src/org/jetbrains/kotlin/idea/base/compilerPreferences/configuration/KotlinCompilerConfigurableTab.form
similarity index 99%
rename from plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.form
rename to plugins/kotlin/base/compiler-configuration-ui/src/org/jetbrains/kotlin/idea/base/compilerPreferences/configuration/KotlinCompilerConfigurableTab.form
index 0eb5af3c5d22..4315fbd04037 100644
--- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.form
+++ b/plugins/kotlin/base/compiler-configuration-ui/src/org/jetbrains/kotlin/idea/base/compilerPreferences/configuration/KotlinCompilerConfigurableTab.form
@@ -1,5 +1,5 @@
-