diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt index 4b9aaf0fbfc..a968d6b071e 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt @@ -288,7 +288,7 @@ class LibraryInfo(val project: Project, val library: Library) : IdeaModuleInfo, } override val platform: TargetPlatform - get() = getLibraryPlatform(library) + get() = getLibraryPlatform(project, library) override val sourcesModuleInfo: SourceForBinaryModuleInfo get() = LibrarySourceInfo(project, library) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/LibraryDependenciesCache.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/LibraryDependenciesCache.kt index eb00b1363ee..7d4af2d999f 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/LibraryDependenciesCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/LibraryDependenciesCache.kt @@ -61,7 +61,7 @@ class LibraryDependenciesCacheImpl(private val project: Project) : LibraryDepend val libraries = LinkedHashSet() val sdks = LinkedHashSet() - val platform = getLibraryPlatform(library) + val platform = getLibraryPlatform(project, library) for (module in getLibraryUsageIndex().modulesLibraryIsUsedIn[library]) { if (!processedModules.add(module)) continue @@ -73,7 +73,7 @@ class LibraryDependenciesCacheImpl(private val project: Project) : LibraryDepend override fun visitLibraryOrderEntry(libraryOrderEntry: LibraryOrderEntry, value: Unit) { val otherLibrary = libraryOrderEntry.library - if (otherLibrary != null && compatiblePlatforms(platform, getLibraryPlatform(otherLibrary))) { + if (otherLibrary != null && compatiblePlatforms(platform, getLibraryPlatform(project, otherLibrary))) { libraries.add(otherLibrary) } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/JsLibraryStdDetectionUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/JsLibraryStdDetectionUtil.kt index 86ff79b07e4..9136071f442 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/JsLibraryStdDetectionUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/JsLibraryStdDetectionUtil.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.framework +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 @@ -33,16 +34,16 @@ import java.util.jar.Attributes object JsLibraryStdDetectionUtil { private val IS_JS_LIBRARY_STD_LIB = Key.create("IS_JS_LIBRARY_STD_LIB") - fun hasJsStdlibJar(library: Library, ignoreKind: Boolean = false): Boolean { + fun hasJsStdlibJar(library: Library, project: Project, ignoreKind: Boolean = false): Boolean { if (library !is LibraryEx || library.isDisposed) return false - if (!ignoreKind && library.kind !is JSLibraryKind) return false + if (!ignoreKind && library.effectiveKind(project) !is JSLibraryKind) return false val classes = Arrays.asList(*library.getFiles(OrderRootType.CLASSES)) return getJsStdLibJar(classes) != null } - fun getJsLibraryStdVersion(library: Library): String? { - if ((library as LibraryEx).kind !is JSLibraryKind) return null + fun getJsLibraryStdVersion(library: Library, project: Project): String? { + if ((library as LibraryEx).effectiveKind(project) !is JSLibraryKind) return null val jar = getJsStdLibJar(library.getFiles(OrderRootType.CLASSES).toList()) ?: return null return JarUtil.getJarAttribute(VfsUtilCore.virtualToIoFile(jar), Attributes.Name.IMPLEMENTATION_VERSION) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/LibraryEffectiveKindProvider.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/LibraryEffectiveKindProvider.kt new file mode 100644 index 00000000000..c97dccc26aa --- /dev/null +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/LibraryEffectiveKindProvider.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.framework + +import com.intellij.openapi.components.ServiceManager +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) = ServiceManager.getService(project, LibraryEffectiveKindProvider::class.java)!! + } +} + +fun LibraryEx.effectiveKind(project: Project) = LibraryEffectiveKindProvider.getInstance(project).getEffectiveKind(this) \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/LibraryKinds.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/LibraryKinds.kt index 9c98f9b85d8..7c15d8cbde6 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/LibraryKinds.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/LibraryKinds.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.framework +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.DummyLibraryProperties @@ -31,19 +32,21 @@ import org.jetbrains.kotlin.utils.PathUtil import java.util.jar.Attributes import java.util.regex.Pattern -object JSLibraryKind : PersistentLibraryKind("kotlin.js") { +interface KotlinLibraryKind + +object JSLibraryKind : PersistentLibraryKind("kotlin.js"), KotlinLibraryKind { override fun createDefaultProperties() = DummyLibraryProperties.INSTANCE!! } -object CommonLibraryKind : PersistentLibraryKind("kotlin.common") { +object CommonLibraryKind : PersistentLibraryKind("kotlin.common"), KotlinLibraryKind { override fun createDefaultProperties() = DummyLibraryProperties.INSTANCE!! } -fun getLibraryPlatform(library: Library): TargetPlatform { +fun getLibraryPlatform(project: Project, library: Library): TargetPlatform { library as? LibraryEx ?: return JvmPlatform if (library.isDisposed) return JvmPlatform - return when (library.kind) { + return when (library.effectiveKind(project)) { JSLibraryKind -> JsPlatform CommonLibraryKind -> TargetPlatform.Common else -> JvmPlatform diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInProjectUtils.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInProjectUtils.kt index c5ad71285a4..66cfa88938e 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInProjectUtils.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInProjectUtils.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.configuration.ui.notifications.ConfigureKotlinNotification import org.jetbrains.kotlin.idea.framework.JSLibraryKind +import org.jetbrains.kotlin.idea.framework.effectiveKind import org.jetbrains.kotlin.idea.quickfix.KotlinAddRequiredModuleFix import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.idea.util.findFirstPsiJavaModule @@ -278,7 +279,7 @@ private class LibraryKindSearchScope(val module: Module, if (!super.contains(file)) return false val orderEntry = ModuleRootManager.getInstance(module).fileIndex.getOrderEntryForFile(file) if (orderEntry is LibraryOrderEntry) { - return (orderEntry.library as LibraryEx).kind == libraryKind + return (orderEntry.library as LibraryEx).effectiveKind(module.project) == libraryKind } return true } diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.kt index 45cc357da73..b2aeba6c34d 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.configuration import com.intellij.openapi.extensions.Extensions import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl import com.intellij.openapi.module.Module +import com.intellij.openapi.project.Project import com.intellij.openapi.projectRoots.JavaSdkVersion import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.roots.LibraryOrderEntry @@ -92,8 +93,8 @@ open class KotlinJavaModuleConfigurator protected constructor() : KotlinWithLibr return result } - override val libraryMatcher: (Library) -> Boolean = - { library -> JavaRuntimeDetectionUtil.getRuntimeJar(library.getFiles(OrderRootType.CLASSES).asList()) != null } + override val libraryMatcher: (Library, Project) -> Boolean = + { library, _ -> JavaRuntimeDetectionUtil.getRuntimeJar(library.getFiles(OrderRootType.CLASSES).asList()) != null } override fun configureKotlinSettings(modules: List) { val project = modules.firstOrNull()?.project ?: return @@ -140,7 +141,7 @@ open class KotlinJavaModuleConfigurator protected constructor() : KotlinWithLibr private fun hasBrokenJsRuntime(module: Module): Boolean { for (orderEntry in ModuleRootManager.getInstance(module).orderEntries) { val library = (orderEntry as? LibraryOrderEntry)?.library as? LibraryEx ?: continue - if (JsLibraryStdDetectionUtil.hasJsStdlibJar(library, ignoreKind = true)) return true + if (JsLibraryStdDetectionUtil.hasJsStdlibJar(library, module.project, ignoreKind = true)) return true } return false } diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJsModuleConfigurator.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJsModuleConfigurator.kt index e57dfa7b9c9..567e25115f9 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJsModuleConfigurator.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJsModuleConfigurator.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.idea.configuration import com.intellij.openapi.module.Module +import com.intellij.openapi.project.Project import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.roots.LibraryOrderEntry import com.intellij.openapi.roots.ModuleRootManager @@ -64,7 +65,9 @@ open class KotlinJsModuleConfigurator : KotlinWithLibraryConfigurator() { LibraryJarDescriptor.JS_STDLIB_SRC_JAR ) - override val libraryMatcher: (Library) -> Boolean = { library -> JsLibraryStdDetectionUtil.hasJsStdlibJar(library) } + override val libraryMatcher: (Library, Project) -> Boolean = { library, project -> + JsLibraryStdDetectionUtil.hasJsStdlibJar(library, project) + } override val libraryType: LibraryType? get() = JSLibraryType.getInstance() @@ -82,7 +85,7 @@ open class KotlinJsModuleConfigurator : KotlinWithLibraryConfigurator() { for (orderEntry in ModuleRootManager.getInstance(module).orderEntries) { val library = (orderEntry as? LibraryOrderEntry)?.library as? LibraryEx ?: continue allLibraries.add(library) - if (JsLibraryStdDetectionUtil.hasJsStdlibJar(library, ignoreKind = true) && library.kind == null) { + if (JsLibraryStdDetectionUtil.hasJsStdlibJar(library, module.project, ignoreKind = true) && library.kind == null) { brokenStdlib = library } } diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinWithLibraryConfigurator.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinWithLibraryConfigurator.kt index a4005570c91..9cb623a611c 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinWithLibraryConfigurator.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinWithLibraryConfigurator.kt @@ -209,8 +209,8 @@ abstract class KotlinWithLibraryConfigurator internal constructor() : KotlinProj } fun getKotlinLibrary(project: Project): Library? { - return LibraryTablesRegistrar.getInstance().getLibraryTable(project).libraries.firstOrNull(this::isKotlinLibrary) ?: - LibraryTablesRegistrar.getInstance().libraryTable.libraries.firstOrNull(this::isKotlinLibrary) + return LibraryTablesRegistrar.getInstance().getLibraryTable(project).libraries.firstOrNull { isKotlinLibrary(it, project) } ?: + LibraryTablesRegistrar.getInstance().libraryTable.libraries.firstOrNull { isKotlinLibrary(it, project) } } @Contract("!null, _, _ -> !null") @@ -272,13 +272,13 @@ abstract class KotlinWithLibraryConfigurator internal constructor() : KotlinProj return library != null && library.getUrls(OrderRootType.CLASSES).size > 0 } - protected abstract val libraryMatcher: (Library) -> Boolean + protected abstract val libraryMatcher: (Library, Project) -> Boolean fun getKotlinLibrary(module: Module): Library? { return findKotlinRuntimeLibrary(module, this::isKotlinLibrary) } - private fun isKotlinLibrary(library: Library) = library.name == libraryName || libraryMatcher(library) + private fun isKotlinLibrary(library: Library, project: Project) = library.name == libraryName || libraryMatcher(library, project) protected fun needToChooseJarPath(project: Project): Boolean { val defaultPath = getDefaultPathToJarFile(project) diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/versions/OutdatedKotlinRuntimeChecker.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/versions/OutdatedKotlinRuntimeChecker.kt index cc94eb9a558..c3cc5324182 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/versions/OutdatedKotlinRuntimeChecker.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/versions/OutdatedKotlinRuntimeChecker.kt @@ -50,7 +50,7 @@ fun findOutdatedKotlinLibraries(project: Project): List { val outdatedLibraries = arrayListOf() for ((library, modules) in findAllUsedLibraries(project).entrySet()) { - getOutdatedRuntimeLibraryVersion(library)?.let { version -> + getOutdatedRuntimeLibraryVersion(library, project)?.let { version -> outdatedLibraries.add(VersionedLibrary(library, version, modules)) } } @@ -58,30 +58,30 @@ fun findOutdatedKotlinLibraries(project: Project): List { return outdatedLibraries } -private fun getOutdatedRuntimeLibraryVersion(library: Library): String? { - val libraryVersion = getKotlinLibraryVersion(library) ?: return null +private fun getOutdatedRuntimeLibraryVersion(library: Library, project: Project): String? { + val libraryVersion = getKotlinLibraryVersion(library, project) ?: return null val runtimeVersion = bundledRuntimeVersion() return if (isRuntimeOutdated(libraryVersion, runtimeVersion)) libraryVersion else null } -private fun getKotlinLibraryVersion(library: Library): String? = - JavaRuntimeDetectionUtil.getJavaRuntimeVersion(library) ?: JsLibraryStdDetectionUtil.getJsLibraryStdVersion(library) +private fun getKotlinLibraryVersion(library: Library, project: Project): String? = + JavaRuntimeDetectionUtil.getJavaRuntimeVersion(library) ?: JsLibraryStdDetectionUtil.getJsLibraryStdVersion(library, project) -fun findKotlinRuntimeLibrary(module: Module, predicate: (Library) -> Boolean = ::isKotlinRuntime): Library? { +fun findKotlinRuntimeLibrary(module: Module, predicate: (Library, Project) -> Boolean = ::isKotlinRuntime): Library? { val orderEntries = ModuleRootManager.getInstance(module).orderEntries.filterIsInstance() return orderEntries.asSequence() .mapNotNull { it.library } - .firstOrNull(predicate) + .firstOrNull { predicate(it, module.project) } } -private fun isKotlinRuntime(library: Library) = isKotlinJavaRuntime(library) || isKotlinJsRuntime(library) +private fun isKotlinRuntime(library: Library, project: Project) = isKotlinJavaRuntime(library) || isKotlinJsRuntime(library, project) private fun isKotlinJavaRuntime(library: Library) = JavaRuntimeDetectionUtil.getRuntimeJar(library.getFiles(OrderRootType.CLASSES).asList()) != null -private fun isKotlinJsRuntime(library: Library) = - JsLibraryStdDetectionUtil.hasJsStdlibJar(library) +private fun isKotlinJsRuntime(library: Library, project: Project) = + JsLibraryStdDetectionUtil.hasJsStdlibJar(library, project) fun collectModulesWithOutdatedRuntime(libraries: List): List = libraries.flatMap { it.usedInModules } diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index a02ddf7aef8..2aeb0bba032 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -320,6 +320,9 @@ + + diff --git a/idea/src/META-INF/plugin.xml.172 b/idea/src/META-INF/plugin.xml.172 index 4c83c10cf9c..908c4ac8b9b 100644 --- a/idea/src/META-INF/plugin.xml.172 +++ b/idea/src/META-INF/plugin.xml.172 @@ -320,6 +320,9 @@ + + diff --git a/idea/src/META-INF/plugin.xml.173 b/idea/src/META-INF/plugin.xml.173 index 6f7e863d3c1..7ec614803c8 100644 --- a/idea/src/META-INF/plugin.xml.173 +++ b/idea/src/META-INF/plugin.xml.173 @@ -320,6 +320,9 @@ + + diff --git a/idea/src/META-INF/plugin.xml.182 b/idea/src/META-INF/plugin.xml.182 index c8543d69b3c..e3c37e65634 100644 --- a/idea/src/META-INF/plugin.xml.182 +++ b/idea/src/META-INF/plugin.xml.182 @@ -321,6 +321,9 @@ + + diff --git a/idea/src/META-INF/plugin.xml.as31 b/idea/src/META-INF/plugin.xml.as31 index 93e88de319e..f3ed228e07b 100644 --- a/idea/src/META-INF/plugin.xml.as31 +++ b/idea/src/META-INF/plugin.xml.as31 @@ -320,6 +320,9 @@ + + diff --git a/idea/src/META-INF/plugin.xml.as32 b/idea/src/META-INF/plugin.xml.as32 index f45bc5b063c..85bc38ec488 100644 --- a/idea/src/META-INF/plugin.xml.as32 +++ b/idea/src/META-INF/plugin.xml.as32 @@ -320,6 +320,9 @@ + + diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/KotlinVersionInfoProviderByModuleDependencies.kt b/idea/src/org/jetbrains/kotlin/idea/facet/KotlinVersionInfoProviderByModuleDependencies.kt index df8d16c6b5d..971bf66df1a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/KotlinVersionInfoProviderByModuleDependencies.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/KotlinVersionInfoProviderByModuleDependencies.kt @@ -32,7 +32,7 @@ class KotlinVersionInfoProviderByModuleDependencies : KotlinVersionInfoProvider override fun getLibraryVersions(module: Module, targetPlatform: TargetPlatformKind<*>, rootModel: ModuleRootModel?): Collection { val versionProvider: (Library) -> String? = when (targetPlatform) { - is TargetPlatformKind.JavaScript -> JsLibraryStdDetectionUtil::getJsLibraryStdVersion + is TargetPlatformKind.JavaScript -> fun(library: Library) = JsLibraryStdDetectionUtil.getJsLibraryStdVersion(library, module.project) is TargetPlatformKind.Jvm -> JavaRuntimeDetectionUtil::getJavaRuntimeVersion is TargetPlatformKind.Common -> ::getCommonRuntimeLibraryVersion } diff --git a/idea/src/org/jetbrains/kotlin/idea/framework/LibraryEffectiveKindProviderImpl.kt b/idea/src/org/jetbrains/kotlin/idea/framework/LibraryEffectiveKindProviderImpl.kt new file mode 100644 index 00000000000..70f8d3c25ee --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/framework/LibraryEffectiveKindProviderImpl.kt @@ -0,0 +1,46 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.framework + +import com.intellij.ProjectTopics +import com.intellij.openapi.project.Project +import com.intellij.openapi.roots.ModuleRootEvent +import com.intellij.openapi.roots.ModuleRootListener +import com.intellij.openapi.roots.OrderRootType +import com.intellij.openapi.roots.impl.libraries.LibraryEx +import com.intellij.openapi.roots.libraries.PersistentLibraryKind +import java.util.* + +class LibraryEffectiveKindProviderImpl(project: Project) : LibraryEffectiveKindProvider { + companion object { + private val effectiveKindMap = HashMap?>() + } + + init { + project.messageBus.connect(project).subscribe( + ProjectTopics.PROJECT_ROOTS, + object : ModuleRootListener { + override fun rootsChanged(event: ModuleRootEvent?) { + synchronized(effectiveKindMap) { + effectiveKindMap.clear() + } + } + } + ) + } + + override fun getEffectiveKind(library: LibraryEx): PersistentLibraryKind<*>? { + val kind = library.kind + return when (kind) { + is KotlinLibraryKind -> kind + else -> { + synchronized(effectiveKindMap) { + effectiveKindMap.getOrPut(library) { detectLibraryKind(library.getFiles(OrderRootType.CLASSES)) } + } + } + } + } +} \ No newline at end of file diff --git a/idea/testData/configuration/jsTest12Maven/kotlin-test-js-1.2.31.jar b/idea/testData/configuration/jsTest12Maven/kotlin-test-js-1.2.31.jar new file mode 100644 index 00000000000..b3c24486619 Binary files /dev/null and b/idea/testData/configuration/jsTest12Maven/kotlin-test-js-1.2.31.jar differ diff --git a/idea/testData/configuration/mavenProvidedTestJsKind/module.iml b/idea/testData/configuration/mavenProvidedTestJsKind/module.iml new file mode 100644 index 00000000000..8df57cb44ce --- /dev/null +++ b/idea/testData/configuration/mavenProvidedTestJsKind/module.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/mavenProvidedTestJsKind/projectFile.ipr b/idea/testData/configuration/mavenProvidedTestJsKind/projectFile.ipr new file mode 100644 index 00000000000..210159ca264 --- /dev/null +++ b/idea/testData/configuration/mavenProvidedTestJsKind/projectFile.ipr @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/mavenProvidedTestJsKind/src/foo.kt b/idea/testData/configuration/mavenProvidedTestJsKind/src/foo.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java b/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java index 6813971389f..6f217a45fde 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.configuration; +import com.intellij.jarRepository.RepositoryLibraryType; import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; @@ -24,6 +25,7 @@ import com.intellij.openapi.roots.LibraryOrderEntry; import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.RootPolicy; +import com.intellij.openapi.roots.impl.libraries.LibraryEx; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; @@ -35,7 +37,10 @@ import org.jetbrains.kotlin.config.*; import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgumentsHolder; import org.jetbrains.kotlin.idea.facet.FacetUtilsKt; import org.jetbrains.kotlin.idea.facet.KotlinFacet; +import org.jetbrains.kotlin.idea.framework.JSLibraryKind; import org.jetbrains.kotlin.idea.framework.JsLibraryStdDetectionUtil; +import org.jetbrains.kotlin.idea.framework.LibraryEffectiveKindProviderKt; +import org.jetbrains.kotlin.idea.framework.LibraryKindsKt; import org.jetbrains.kotlin.idea.project.PlatformKt; import org.jetbrains.kotlin.idea.util.Java9StructureUtilKt; import org.jetbrains.kotlin.idea.versions.KotlinRuntimeLibraryUtilKt; @@ -152,7 +157,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest { } public void testJsLibraryWrongKind() { - doTestOneJsModule(KotlinWithLibraryConfigurator.FileState.EXISTS); + AbstractConfigureKotlinTest.Companion.assertProperlyConfigured(getModule(), AbstractConfigureKotlinTest.Companion.getJS_CONFIGURATOR()); assertEquals(1, ModuleRootManager.getInstance(getModule()).orderEntries().process(new LibraryCountingRootPolicy(), 0).intValue()); } @@ -178,16 +183,22 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest { public void testJsLibraryVersion11() { Library jsRuntime = KotlinRuntimeLibraryUtilKt.findAllUsedLibraries(myProject).keySet().iterator().next(); - String version = JsLibraryStdDetectionUtil.INSTANCE.getJsLibraryStdVersion(jsRuntime); + String version = JsLibraryStdDetectionUtil.INSTANCE.getJsLibraryStdVersion(jsRuntime, myProject); assertEquals("1.1.0", version); } public void testJsLibraryVersion106() { Library jsRuntime = KotlinRuntimeLibraryUtilKt.findAllUsedLibraries(myProject).keySet().iterator().next(); - String version = JsLibraryStdDetectionUtil.INSTANCE.getJsLibraryStdVersion(jsRuntime); + String version = JsLibraryStdDetectionUtil.INSTANCE.getJsLibraryStdVersion(jsRuntime, myProject); assertEquals("1.0.6", version); } + public void testMavenProvidedTestJsKind() { + LibraryEx jsTest = (LibraryEx) KotlinRuntimeLibraryUtilKt.findAllUsedLibraries(myProject).keySet().toArray()[1]; + assertEquals(RepositoryLibraryType.REPOSITORY_LIBRARY_KIND, jsTest.getKind()); + assertEquals(JSLibraryKind.INSTANCE, LibraryEffectiveKindProviderKt.effectiveKind(jsTest, myProject)); + } + @SuppressWarnings("ConstantConditions") public void testJvmProjectWithV1FacetConfig() { KotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(myProject).getInitializedSettings(getModule()); diff --git a/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java.182 b/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java.182 index 2a24bf977da..b58298b83ef 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java.182 +++ b/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java.182 @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.configuration; +import com.intellij.jarRepository.RepositoryLibraryType; import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; @@ -24,6 +25,7 @@ import com.intellij.openapi.roots.LibraryOrderEntry; import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.RootPolicy; +import com.intellij.openapi.roots.impl.libraries.LibraryEx; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; @@ -35,7 +37,10 @@ import org.jetbrains.kotlin.config.*; import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgumentsHolder; import org.jetbrains.kotlin.idea.facet.FacetUtilsKt; import org.jetbrains.kotlin.idea.facet.KotlinFacet; +import org.jetbrains.kotlin.idea.framework.JSLibraryKind; import org.jetbrains.kotlin.idea.framework.JsLibraryStdDetectionUtil; +import org.jetbrains.kotlin.idea.framework.LibraryEffectiveKindProviderKt; +import org.jetbrains.kotlin.idea.framework.LibraryKindsKt; import org.jetbrains.kotlin.idea.project.PlatformKt; import org.jetbrains.kotlin.idea.util.Java9StructureUtilKt; import org.jetbrains.kotlin.idea.versions.KotlinRuntimeLibraryUtilKt; @@ -178,16 +183,22 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest { public void testJsLibraryVersion11() { Library jsRuntime = KotlinRuntimeLibraryUtilKt.findAllUsedLibraries(myProject).keySet().iterator().next(); - String version = JsLibraryStdDetectionUtil.INSTANCE.getJsLibraryStdVersion(jsRuntime); + String version = JsLibraryStdDetectionUtil.INSTANCE.getJsLibraryStdVersion(jsRuntime, myProject); assertEquals("1.1.0", version); } public void testJsLibraryVersion106() { Library jsRuntime = KotlinRuntimeLibraryUtilKt.findAllUsedLibraries(myProject).keySet().iterator().next(); - String version = JsLibraryStdDetectionUtil.INSTANCE.getJsLibraryStdVersion(jsRuntime); + String version = JsLibraryStdDetectionUtil.INSTANCE.getJsLibraryStdVersion(jsRuntime, myProject); assertEquals("1.0.6", version); } + public void testMavenProvidedTestJsKind() { + LibraryEx jsTest = (LibraryEx) KotlinRuntimeLibraryUtilKt.findAllUsedLibraries(myProject).keySet().toArray()[1]; + assertEquals(RepositoryLibraryType.REPOSITORY_LIBRARY_KIND, jsTest.getKind()); + assertEquals(JSLibraryKind.INSTANCE, LibraryEffectiveKindProviderKt.effectiveKind(jsTest, myProject)); + } + @SuppressWarnings("ConstantConditions") public void testJvmProjectWithV1FacetConfig() { KotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(myProject).getInitializedSettings(getModule());