diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.172 b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.172 index 894fb0e3973..81dffdd2d85 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.172 +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.172 @@ -52,6 +52,7 @@ import org.jetbrains.kotlin.idea.AbstractSmartSelectionTest import org.jetbrains.kotlin.idea.actions.AbstractGotoTestOrCodeActionTest import org.jetbrains.kotlin.idea.caches.resolve.AbstractIdeCompiledLightClassTest import org.jetbrains.kotlin.idea.caches.resolve.AbstractIdeLightClassTest +import org.jetbrains.kotlin.idea.caches.resolve.AbstractMultiModuleHighlightingTest import org.jetbrains.kotlin.idea.caches.resolve.AbstractMultiModuleLineMarkerTest import org.jetbrains.kotlin.idea.codeInsight.* import org.jetbrains.kotlin.idea.codeInsight.generate.AbstractCodeInsightActionTest @@ -641,6 +642,10 @@ fun main(args: Array) { model("multiFileHighlighting", recursive = false) } + testClass { + model("multiModuleHighlighting/multiplatform/", recursive = false, extension = null) + } + testClass { model("multiModuleQuickFix", recursive = false, extension = null) } diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as31 b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as31 index 5cc0e1ed1f2..bc85cd9f5c4 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as31 +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as31 @@ -51,6 +51,7 @@ import org.jetbrains.kotlin.idea.AbstractSmartSelectionTest import org.jetbrains.kotlin.idea.actions.AbstractGotoTestOrCodeActionTest import org.jetbrains.kotlin.idea.caches.resolve.AbstractIdeCompiledLightClassTest import org.jetbrains.kotlin.idea.caches.resolve.AbstractIdeLightClassTest +import org.jetbrains.kotlin.idea.caches.resolve.AbstractMultiModuleHighlightingTest import org.jetbrains.kotlin.idea.caches.resolve.AbstractMultiModuleLineMarkerTest import org.jetbrains.kotlin.idea.codeInsight.* import org.jetbrains.kotlin.idea.codeInsight.generate.AbstractCodeInsightActionTest @@ -640,6 +641,10 @@ fun main(args: Array) { model("multiFileHighlighting", recursive = false) } + testClass { + model("multiModuleHighlighting/multiplatform/", recursive = false, extension = null) + } + testClass { model("multiModuleQuickFix", recursive = false, extension = null) } diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as32 b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as32 index 5cc0e1ed1f2..bc85cd9f5c4 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as32 +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as32 @@ -51,6 +51,7 @@ import org.jetbrains.kotlin.idea.AbstractSmartSelectionTest import org.jetbrains.kotlin.idea.actions.AbstractGotoTestOrCodeActionTest import org.jetbrains.kotlin.idea.caches.resolve.AbstractIdeCompiledLightClassTest import org.jetbrains.kotlin.idea.caches.resolve.AbstractIdeLightClassTest +import org.jetbrains.kotlin.idea.caches.resolve.AbstractMultiModuleHighlightingTest import org.jetbrains.kotlin.idea.caches.resolve.AbstractMultiModuleLineMarkerTest import org.jetbrains.kotlin.idea.codeInsight.* import org.jetbrains.kotlin.idea.codeInsight.generate.AbstractCodeInsightActionTest @@ -640,6 +641,10 @@ fun main(args: Array) { model("multiFileHighlighting", recursive = false) } + testClass { + model("multiModuleHighlighting/multiplatform/", recursive = false, extension = null) + } + testClass { model("multiModuleQuickFix", recursive = false, extension = null) } diff --git a/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt.182 b/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt.182 index 7ec2166b047..32c6d0ce05e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt.182 +++ b/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt.182 @@ -11,11 +11,18 @@ import com.intellij.openapi.module.StdModuleTypes import com.intellij.openapi.roots.CompilerModuleExtension import com.intellij.openapi.roots.ModuleRootModificationUtil import com.intellij.openapi.vfs.LocalFileSystem +import com.intellij.testFramework.PlatformTestCase import junit.framework.TestCase +import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.TargetPlatformKind +import org.jetbrains.kotlin.idea.framework.CommonLibraryKind +import org.jetbrains.kotlin.idea.framework.JSLibraryKind import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest import org.jetbrains.kotlin.idea.stubs.createFacet +import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil +import org.jetbrains.kotlin.idea.test.PluginTestCaseBase +import org.jetbrains.kotlin.test.TestJdkKind import java.io.File // allows to configure a test mpp project @@ -33,7 +40,21 @@ fun AbstractMultiModuleTest.setupMppProjectFromDirStructure(testRoot: File) { infosByModuleId.entries.forEach { (id, rootInfos) -> val module = modulesById[id]!! rootInfos.flatMap { it.dependencies }.forEach { - module.addDependency(modulesById[it]!!) + when (it) { + is ModuleDependency -> module.addDependency(modulesById[it.moduleId]!!) + is StdlibDependency -> when (id.platform) { + is TargetPlatformKind.Common -> module.addLibrary( + ForTestCompileRuntime.stdlibCommonForTests(), kind = CommonLibraryKind + ) + is TargetPlatformKind.Jvm -> module.addLibrary(ForTestCompileRuntime.runtimeJarForTests()) + is TargetPlatformKind.JavaScript -> module.addLibrary(ForTestCompileRuntime.stdlibJsForTests(), kind = JSLibraryKind) + } + is FullJdkDependency -> { + ConfigLibraryUtil.configureSdk(module, PluginTestCaseBase.addJdk(testRootDisposable) { + PluginTestCaseBase.jdk(TestJdkKind.FULL_JDK) + }) + } + } } } @@ -87,7 +108,7 @@ private fun AbstractMultiModuleTest.createModule(name: String): Module { TestCase.assertNotNull(root) object : WriteCommandAction.Simple(module.project) { @Throws(Throwable::class) - protected override fun run() { + override fun run() { root!!.refresh(false, true) } }.execute().throwException() @@ -96,9 +117,11 @@ private fun AbstractMultiModuleTest.createModule(name: String): Module { private val testSuffixes = setOf("test", "tests") private val platformNames = mapOf( - TargetPlatformKind.Common to listOf("header", "common", "expect"), - TargetPlatformKind.Jvm[JvmTarget.DEFAULT] to listOf("java", "jvm"), - TargetPlatformKind.JavaScript to listOf("js", "javascript") + listOf("header", "common", "expect") to TargetPlatformKind.Common, + listOf("java", "jvm") to TargetPlatformKind.Jvm[JvmTarget.DEFAULT], + listOf("java8", "jvm8") to TargetPlatformKind.Jvm[JvmTarget.JVM_1_8], + listOf("java6", "jvm6") to TargetPlatformKind.Jvm[JvmTarget.JVM_1_6], + listOf("js", "javascript") to TargetPlatformKind.JavaScript ) private fun parseDirName(dir: File): RootInfo { @@ -108,20 +131,29 @@ private fun parseDirName(dir: File): RootInfo { private fun parseDependencies(parts: List) = parts.filter { it.startsWith("dep(") && it.endsWith(")") }.map { - parseModuleId(it.removePrefix("dep(").removeSuffix(")").split("-")) + parseDependency(it) } +private fun parseDependency(it: String): Dependency { + val dependencyString = it.removePrefix("dep(").removeSuffix(")") + + return when { + dependencyString.equals("stdlib", ignoreCase = true) -> StdlibDependency + dependencyString.equals("fulljdk", ignoreCase = true) -> FullJdkDependency + else -> ModuleDependency(parseModuleId(dependencyString.split("-"))) + } +} + private fun parseModuleId(parts: List): ModuleId { - val platform = parsePlatform(parts).key + val platform = parsePlatform(parts) val name = parseModuleName(parts) - val moduleId = ModuleId(name, platform) - return moduleId + return ModuleId(name, platform) } private fun parsePlatform(parts: List) = - platformNames.entries.single { (_, names) -> + platformNames.entries.single { (names, _) -> names.any { name -> parts.any { part -> part.equals(name, ignoreCase = true) } } - } + }.value private fun parseModuleName(parts: List) = when { parts.size > 1 -> parts.first() @@ -149,5 +181,10 @@ private data class RootInfo( val moduleId: ModuleId, val isTestRoot: Boolean, val moduleRoot: File, - val dependencies: List -) \ No newline at end of file + val dependencies: List +) + +private sealed class Dependency +private class ModuleDependency(val moduleId: ModuleId) : Dependency() +private object StdlibDependency : Dependency() +private object FullJdkDependency : Dependency() \ No newline at end of file