Specify library kind when configuring library in tests

This commit is contained in:
Dmitry Jemerov
2017-07-13 12:12:44 +02:00
parent 060b8e0025
commit 0e6c9a96c7
8 changed files with 48 additions and 24 deletions
@@ -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
}
@@ -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)
}
}
@@ -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) {
@@ -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)
}
@@ -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())
}
})
@@ -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
@@ -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) {
@@ -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
}
}