diff --git a/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/a_common_dep(stdlib)/common.kt b/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/a_common_dep(stdlib)/common.kt new file mode 100644 index 00000000000..bd92586b5c3 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/a_common_dep(stdlib)/common.kt @@ -0,0 +1,3 @@ +package common + +expect class A \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/a_jvm_id1/j1/Use.java b/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/a_jvm_id1/j1/Use.java new file mode 100644 index 00000000000..021f760c7de --- /dev/null +++ b/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/a_jvm_id1/j1/Use.java @@ -0,0 +1,10 @@ +package j1; + +import common.A; + +public class Use { + public static void use() { + A a = new A(); + a.id1(); + } +} \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/a_jvm_id1/jvm.kt b/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/a_jvm_id1/jvm.kt new file mode 100644 index 00000000000..fd218722112 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/a_jvm_id1/jvm.kt @@ -0,0 +1,5 @@ +package common + +actual class A { + fun id1() {} +} \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/a_jvm_id2/j2/Use.java b/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/a_jvm_id2/j2/Use.java new file mode 100644 index 00000000000..bff14164a5e --- /dev/null +++ b/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/a_jvm_id2/j2/Use.java @@ -0,0 +1,10 @@ +package j2; + +import common.A; + +public class Use { + public static void use() { + A a = new A(); + a.id2(); + } +} \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/a_jvm_id2/jvm.kt b/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/a_jvm_id2/jvm.kt new file mode 100644 index 00000000000..c3f47f64624 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/a_jvm_id2/jvm.kt @@ -0,0 +1,5 @@ +package common + +actual class A { + fun id2() {} +} \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/b_jvm_dep(a-jvm-id2)/j/Use.java b/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/b_jvm_dep(a-jvm-id2)/j/Use.java new file mode 100644 index 00000000000..5a85c731095 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/b_jvm_dep(a-jvm-id2)/j/Use.java @@ -0,0 +1,9 @@ +package j; + +import common.A; + +public class Use { + public static void use(A a) { + a.id2(); + } +} \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/b_jvm_dep(a-jvm-id2)/use.kt b/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/b_jvm_dep(a-jvm-id2)/use.kt new file mode 100644 index 00000000000..c07202bbbd5 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/b_jvm_dep(a-jvm-id2)/use.kt @@ -0,0 +1,7 @@ +package b + +import common.A + +fun use(a: A) { + a.id2() +} \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/c_jvm_dep(a-jvm-id1)/j/Use.java b/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/c_jvm_dep(a-jvm-id1)/j/Use.java new file mode 100644 index 00000000000..311c10222c9 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/c_jvm_dep(a-jvm-id1)/j/Use.java @@ -0,0 +1,9 @@ +package j; + +import common.A; + +public class Use { + public static void use(A a) { + a.id1(); + } +} \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/c_jvm_dep(a-jvm-id1)/use.kt b/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/c_jvm_dep(a-jvm-id1)/use.kt new file mode 100644 index 00000000000..7ad66b66a17 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/c_jvm_dep(a-jvm-id1)/use.kt @@ -0,0 +1,7 @@ +package c + +import common.A + +fun use(a: A) { + a.id1() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiPlatformHighlightingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiPlatformHighlightingTestGenerated.java index 719b9a7a213..b2ab0bd6423 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiPlatformHighlightingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiPlatformHighlightingTestGenerated.java @@ -49,6 +49,11 @@ public class MultiPlatformHighlightingTestGenerated extends AbstractMultiPlatfor runTest("idea/testData/multiModuleHighlighting/multiplatform/depends/"); } + @TestMetadata("differentJvmImpls") + public void testDifferentJvmImpls() throws Exception { + runTest("idea/testData/multiModuleHighlighting/multiplatform/differentJvmImpls/"); + } + @TestMetadata("headerClass") public void testHeaderClass() throws Exception { runTest("idea/testData/multiModuleHighlighting/multiplatform/headerClass/"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt b/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt index 2b5053783e4..3023326316e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt @@ -11,7 +11,6 @@ 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 @@ -154,7 +153,9 @@ private fun parseDependency(it: String): Dependency { private fun parseModuleId(parts: List): ModuleId { val platform = parsePlatform(parts) val name = parseModuleName(parts) - return ModuleId(name, platform) + val id = parseIndex(parts) ?: 0 + assert(id == 0 || platform !is TargetPlatformKind.Common) + return ModuleId(name, platform, id) } private fun parsePlatform(parts: List) = @@ -170,11 +171,19 @@ private fun parseModuleName(parts: List) = when { private fun parseIsTestRoot(parts: List) = testSuffixes.any { suffix -> parts.any { it.equals(suffix, ignoreCase = true) } } +private fun parseIndex(parts: List): Int? { + return parts.singleOrNull() { it.startsWith("id") }?.substringAfter("id")?.toInt() +} + private data class ModuleId( val groupName: String, - val platform: TargetPlatformKind<*> + val platform: TargetPlatformKind<*>, + val index: Int = 0 ) { - fun ideaModuleName() = "${groupName}_${platform.presentableName}" + fun ideaModuleName(): String { + val suffix = "_$index".takeIf { index != 0 } ?: "" + return "${groupName}_${platform.presentableName}$suffix" + } } private val TargetPlatformKind<*>.presentableName: String diff --git a/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt.181 b/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt.181 index 3bac7699ec1..c8d100bb03f 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt.181 +++ b/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt.181 @@ -154,7 +154,9 @@ private fun parseDependency(it: String): Dependency { private fun parseModuleId(parts: List): ModuleId { val platform = parsePlatform(parts) val name = parseModuleName(parts) - return ModuleId(name, platform) + val id = parseIndex(parts) ?: 0 + assert(id == 0 || platform !is TargetPlatformKind.Common) + return ModuleId(name, platform, id) } private fun parsePlatform(parts: List) = @@ -170,11 +172,19 @@ private fun parseModuleName(parts: List) = when { private fun parseIsTestRoot(parts: List) = testSuffixes.any { suffix -> parts.any { it.equals(suffix, ignoreCase = true) } } +private fun parseIndex(parts: List): Int? { + return parts.singleOrNull() { it.startsWith("id") }?.substringAfter("id")?.toInt() +} + private data class ModuleId( val groupName: String, - val platform: TargetPlatformKind<*> + val platform: TargetPlatformKind<*>, + val index: Int = 0 ) { - fun ideaModuleName() = "${groupName}_${platform.presentableName}" + fun ideaModuleName(): String { + val suffix = "_$index".takeIf { index != 0 } ?: "" + return "${groupName}_${platform.presentableName}$suffix" + } } private val TargetPlatformKind<*>.presentableName: String