diff --git a/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/ConfigLibraryUtil.kt b/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/ConfigLibraryUtil.kt index e219282318e..5cdc9460430 100644 --- a/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/ConfigLibraryUtil.kt +++ b/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/ConfigLibraryUtil.kt @@ -25,9 +25,10 @@ import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.OrderRootType import com.intellij.openapi.roots.impl.libraries.LibraryEx import com.intellij.openapi.roots.libraries.Library +import com.intellij.openapi.roots.libraries.PersistentLibraryKind import com.intellij.openapi.roots.ui.configuration.libraryEditor.NewLibraryEditor -import com.intellij.openapi.util.Computable import com.intellij.openapi.vfs.VfsUtil +import org.jetbrains.kotlin.idea.framework.JSLibraryKind import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.utils.PathUtil @@ -58,7 +59,8 @@ object ConfigLibraryUtil { fun configureKotlinJsRuntimeAndSdk(module: Module, sdk: Sdk) { configureSdk(module, sdk) addLibrary(getKotlinRuntimeLibEditor(DEFAULT_KOTLIN_JS_STDLIB_NAME, - PathUtil.getKotlinPathsForDistDirectory().jsStdLibJarPath), module) + PathUtil.getKotlinPathsForDistDirectory().jsStdLibJarPath), module, + JSLibraryKind) } fun configureKotlinRuntime(module: Module) { @@ -93,26 +95,27 @@ object ConfigLibraryUtil { } } - fun addLibrary(editor: NewLibraryEditor, module: Module): Library { - return ApplicationManager.getApplication().runWriteAction(Computable { + fun addLibrary(editor: NewLibraryEditor, module: Module, kind: PersistentLibraryKind<*>? = null): Library = + runWriteAction { val rootManager = ModuleRootManager.getInstance(module) val model = rootManager.modifiableModel - val library = addLibrary(editor, model) + val library = addLibrary(editor, model, kind) model.commit() library - }) - } + } - fun addLibrary(editor: NewLibraryEditor, model: ModifiableRootModel): Library { - val library = model.moduleLibraryTable.createLibrary(editor.name) + fun addLibrary(editor: NewLibraryEditor, model: ModifiableRootModel, kind: PersistentLibraryKind<*>? = null): Library { + val libraryTableModifiableModel = model.moduleLibraryTable.modifiableModel + val library = libraryTableModifiableModel.createLibrary(editor.name, kind) val libModel = library.modifiableModel editor.applyTo(libModel as LibraryEx.ModifiableModelEx) libModel.commit() + libraryTableModifiableModel.commit() return library } diff --git a/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/KotlinStdJSProjectDescriptor.kt b/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/KotlinStdJSProjectDescriptor.kt index c8c8ddfe09c..fe82a69c363 100644 --- a/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/KotlinStdJSProjectDescriptor.kt +++ b/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/KotlinStdJSProjectDescriptor.kt @@ -22,6 +22,7 @@ import com.intellij.openapi.module.StdModuleTypes import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.roots.ModifiableRootModel import com.intellij.openapi.roots.ui.configuration.libraryEditor.NewLibraryEditor +import org.jetbrains.kotlin.idea.framework.JSLibraryKind import org.jetbrains.kotlin.idea.framework.JSLibraryStdDescription object KotlinStdJSProjectDescriptor : KotlinLightProjectDescriptor() { @@ -34,6 +35,6 @@ object KotlinStdJSProjectDescriptor : KotlinLightProjectDescriptor() { val editor = NewLibraryEditor(configuration.libraryType, configuration.properties) configuration.addRoots(editor) - ConfigLibraryUtil.addLibrary(editor, model) + ConfigLibraryUtil.addLibrary(editor, model, JSLibraryKind) } } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleHighlightingTest.kt b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleHighlightingTest.kt index 1cdd28e1fa4..440f6300157 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleHighlightingTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleHighlightingTest.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.caches.resolve import com.intellij.openapi.module.Module import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime import org.jetbrains.kotlin.config.TargetPlatformKind +import org.jetbrains.kotlin.idea.framework.CommonLibraryKind import org.jetbrains.kotlin.idea.stubs.AbstractMultiHighlightingTest import org.jetbrains.kotlin.test.TestJdkKind @@ -41,7 +42,7 @@ abstract class AbstractMultiModuleHighlightingTest : AbstractMultiHighlightingTe val commonModule = module("common", jdk) commonModule.createFacet(TargetPlatformKind.Common) if (withStdlibCommon) { - commonModule.addLibrary(ForTestCompileRuntime.stdlibCommonForTests()) + commonModule.addLibrary(ForTestCompileRuntime.stdlibCommonForTests(), kind = CommonLibraryKind) } for (platform in platforms) { diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfoTest.kt b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfoTest.kt index 3db6f7134e7..983a0f854ed 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfoTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfoTest.kt @@ -24,6 +24,8 @@ import com.intellij.openapi.roots.libraries.Library import com.intellij.testFramework.ModuleTestCase import com.intellij.testFramework.UsefulTestCase import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime +import org.jetbrains.kotlin.idea.framework.CommonLibraryKind +import org.jetbrains.kotlin.idea.framework.JSLibraryKind import org.jetbrains.kotlin.test.util.addDependency import org.jetbrains.kotlin.test.util.jarRoot import org.jetbrains.kotlin.test.util.projectLibrary @@ -322,9 +324,13 @@ class IdeaModuleInfoTest : ModuleTestCase() { UsefulTestCase.assertSameElements(this.getDependentModules(), expected.toList()) } - private fun stdlibCommon(): Library = projectLibrary("kotlin-stdlib-common", ForTestCompileRuntime.stdlibCommonForTests().jarRoot) + private fun stdlibCommon(): Library = projectLibrary("kotlin-stdlib-common", + ForTestCompileRuntime.stdlibCommonForTests().jarRoot, + kind = CommonLibraryKind) private fun stdlibJvm(): Library = projectLibrary("kotlin-stdlib", ForTestCompileRuntime.runtimeJarForTests().jarRoot) - private fun stdlibJs(): Library = projectLibrary("kotlin-stdlib-js", ForTestCompileRuntime.runtimeJarForTests().jarRoot) + private fun stdlibJs(): Library = projectLibrary("kotlin-stdlib-js", + ForTestCompileRuntime.runtimeJarForTests().jarRoot, + kind = JSLibraryKind) } 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 927098d8532..e86b61dc5ec 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTest.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.config.TargetPlatformKind import org.jetbrains.kotlin.idea.completion.test.withServiceRegistered import org.jetbrains.kotlin.idea.facet.KotlinFacetConfiguration import org.jetbrains.kotlin.idea.facet.KotlinFacetType +import org.jetbrains.kotlin.idea.framework.JSLibraryKind import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.test.TestJdkKind.FULL_JDK @@ -177,7 +178,7 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { doMultiPlatformTest(TargetPlatformKind.Jvm[JvmTarget.JVM_1_8], TargetPlatformKind.JavaScript, withStdlibCommon = true, jdk = FULL_JDK, configureModule = { module, platform -> if (platform == TargetPlatformKind.JavaScript) { - module.addLibrary(ForTestCompileRuntime.stdlibJsForTests()) + module.addLibrary(ForTestCompileRuntime.stdlibJsForTests(), kind = JSLibraryKind) module.addLibrary(ForTestCompileRuntime.stdlibCommonForTests()) } }) diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinDebuggerTestCase.java b/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinDebuggerTestCase.java index 342cdf80b58..422b367280c 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinDebuggerTestCase.java +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinDebuggerTestCase.java @@ -205,7 +205,7 @@ public abstract class KotlinDebuggerTestCase extends DescriptorTestCase { customLibEditor.addRoot(VfsUtil.getUrlForLibraryRoot(classes), OrderRootType.CLASSES); customLibEditor.addRoot(VfsUtil.getUrlForLibraryRoot(sources), OrderRootType.SOURCES); - ConfigLibraryUtil.INSTANCE.addLibrary(customLibEditor, model); + ConfigLibraryUtil.INSTANCE.addLibrary(customLibEditor, model, null); } @Override diff --git a/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt b/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt index d6b87e40843..322792b79d3 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt @@ -25,6 +25,7 @@ import com.intellij.openapi.module.StdModuleTypes import com.intellij.openapi.roots.DependencyScope import com.intellij.openapi.roots.ModuleRootModificationUtil import com.intellij.openapi.roots.OrderRootType +import com.intellij.openapi.roots.libraries.PersistentLibraryKind import com.intellij.openapi.roots.ui.configuration.libraryEditor.NewLibraryEditor import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.vfs.LocalFileSystem @@ -86,11 +87,13 @@ abstract class AbstractMultiModuleTest : DaemonAnalyzerTestCase() { exported: Boolean = false ): Module = this.apply { ModuleRootModificationUtil.addDependency(this, other, dependencyScope, exported) } - protected fun Module.addLibrary(jar: File, name: String = KotlinJdkAndLibraryProjectDescriptor.LIBRARY_NAME) { + protected fun Module.addLibrary(jar: File, + name: String = KotlinJdkAndLibraryProjectDescriptor.LIBRARY_NAME, + kind: PersistentLibraryKind<*>? = null) { ConfigLibraryUtil.addLibrary(NewLibraryEditor().apply { this.name = name addRoot(VfsUtil.getUrlForLibraryRoot(jar), OrderRootType.CLASSES) - }, this) + }, this, kind) } protected fun Module.createFacet(platformKind: TargetPlatformKind<*>? = null) { diff --git a/idea/tests/org/jetbrains/kotlin/test/util/ProjectStructureUtils.kt b/idea/tests/org/jetbrains/kotlin/test/util/ProjectStructureUtils.kt index 37ede048b9c..58bcd97039c 100644 --- a/idea/tests/org/jetbrains/kotlin/test/util/ProjectStructureUtils.kt +++ b/idea/tests/org/jetbrains/kotlin/test/util/ProjectStructureUtils.kt @@ -22,6 +22,7 @@ import com.intellij.openapi.roots.ModuleRootModificationUtil import com.intellij.openapi.roots.OrderRootType import com.intellij.openapi.roots.impl.libraries.ProjectLibraryTable import com.intellij.openapi.roots.libraries.Library +import com.intellij.openapi.roots.libraries.PersistentLibraryKind import com.intellij.openapi.vfs.LocalFileSystem import com.intellij.openapi.vfs.StandardFileSystems import com.intellij.openapi.vfs.VirtualFile @@ -30,16 +31,24 @@ import org.jetbrains.kotlin.test.testFramework.runWriteAction import java.io.File fun PlatformTestCase.projectLibrary( - libraryName: String = "TestLibrary", classesRoot: VirtualFile? = null, sourcesRoot: VirtualFile? = null + libraryName: String = "TestLibrary", + classesRoot: VirtualFile? = null, + sourcesRoot: VirtualFile? = null, + kind: PersistentLibraryKind<*>? = null ): Library { return runWriteAction { - ProjectLibraryTable.getInstance(project).createLibrary(libraryName).also { - with (it.modifiableModel) { - classesRoot?.let { addRoot(it, OrderRootType.CLASSES) } - sourcesRoot?.let { addRoot(it, OrderRootType.SOURCES) } - commit() - } + val modifiableModel = ProjectLibraryTable.getInstance(project).modifiableModel + val library = try { + modifiableModel.createLibrary(libraryName, kind) + } finally { + modifiableModel.commit() } + with (library.modifiableModel) { + classesRoot?.let { addRoot(it, OrderRootType.CLASSES) } + sourcesRoot?.let { addRoot(it, OrderRootType.SOURCES) } + commit() + } + library } }