diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index 7c4c786bd06..c49e2516b6a 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -41,10 +41,7 @@ import org.jetbrains.kotlin.idea.AbstractExpressionSelectionTest import org.jetbrains.kotlin.idea.index.AbstractKotlinTypeAliasByExpansionShortNameIndexTest 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.AbstractMultiModuleLineMarkerTest -import org.jetbrains.kotlin.idea.caches.resolve.AbstractMultiPlatformHighlightingTest +import org.jetbrains.kotlin.idea.caches.resolve.* import org.jetbrains.kotlin.idea.codeInsight.* import org.jetbrains.kotlin.idea.codeInsight.generate.AbstractCodeInsightActionTest import org.jetbrains.kotlin.idea.codeInsight.generate.AbstractGenerateHashCodeAndEqualsActionTest @@ -672,6 +669,10 @@ fun main(args: Array) { model("multiModuleHighlighting/multiplatform/", recursive = false, extension = null) } + testClass { + model("multiModuleHighlighting/hierarchicalExpectActualMatching/", recursive = false, extension = null) + } + testClass { model("multiModuleQuickFix", recursive = false, extension = null) } diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.183 b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.183 index 7255841d6b7..1539739672a 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.183 +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.183 @@ -50,10 +50,7 @@ import org.jetbrains.kotlin.idea.AbstractExpressionSelectionTest import org.jetbrains.kotlin.idea.index.AbstractKotlinTypeAliasByExpansionShortNameIndexTest 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.AbstractMultiModuleLineMarkerTest -import org.jetbrains.kotlin.idea.caches.resolve.AbstractMultiPlatformHighlightingTest +import org.jetbrains.kotlin.idea.caches.resolve.* import org.jetbrains.kotlin.idea.codeInsight.* import org.jetbrains.kotlin.idea.codeInsight.generate.AbstractCodeInsightActionTest import org.jetbrains.kotlin.idea.codeInsight.generate.AbstractGenerateHashCodeAndEqualsActionTest @@ -685,6 +682,10 @@ fun main(args: Array) { model("multiModuleHighlighting/multiplatform/", recursive = false, extension = null) } + testClass { + model("multiModuleHighlighting/hierarchicalExpectActualMatching/", recursive = false, extension = null) + } + testClass { model("multiModuleQuickFix", recursive = false, extension = null) } diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as33 b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as33 index 3e65b3e2fa3..9b242cbca95 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as33 +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as33 @@ -41,10 +41,7 @@ import org.jetbrains.kotlin.idea.AbstractExpressionSelectionTest import org.jetbrains.kotlin.idea.index.AbstractKotlinTypeAliasByExpansionShortNameIndexTest 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.AbstractMultiModuleLineMarkerTest -import org.jetbrains.kotlin.idea.caches.resolve.AbstractMultiPlatformHighlightingTest +import org.jetbrains.kotlin.idea.caches.resolve.* import org.jetbrains.kotlin.idea.codeInsight.* import org.jetbrains.kotlin.idea.codeInsight.generate.AbstractCodeInsightActionTest import org.jetbrains.kotlin.idea.codeInsight.generate.AbstractGenerateHashCodeAndEqualsActionTest @@ -649,6 +646,10 @@ fun main(args: Array) { model("multiModuleHighlighting/multiplatform/", recursive = false, extension = null) } + testClass { + model("multiModuleHighlighting/hierarchicalExpectActualMatching/", recursive = false, extension = null) + } + testClass { model("multiModuleQuickFix", recursive = false, extension = null) } diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as34 b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as34 index aa0027f08a9..e1dd47550b6 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as34 +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as34 @@ -41,10 +41,7 @@ import org.jetbrains.kotlin.idea.AbstractExpressionSelectionTest import org.jetbrains.kotlin.idea.index.AbstractKotlinTypeAliasByExpansionShortNameIndexTest 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.AbstractMultiModuleLineMarkerTest -import org.jetbrains.kotlin.idea.caches.resolve.AbstractMultiPlatformHighlightingTest +import org.jetbrains.kotlin.idea.caches.resolve.* import org.jetbrains.kotlin.idea.codeInsight.* import org.jetbrains.kotlin.idea.codeInsight.generate.AbstractCodeInsightActionTest import org.jetbrains.kotlin.idea.codeInsight.generate.AbstractGenerateHashCodeAndEqualsActionTest @@ -653,6 +650,10 @@ fun main(args: Array) { model("multiModuleHighlighting/multiplatform/", recursive = false, extension = null) } + testClass { + model("multiModuleHighlighting/hierarchicalExpectActualMatching/", recursive = false, extension = null) + } + testClass { model("multiModuleQuickFix", recursive = false, extension = null) } diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as35 b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as35 index 407a19b980d..fe8117cf690 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as35 +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt.as35 @@ -41,10 +41,7 @@ import org.jetbrains.kotlin.idea.AbstractExpressionSelectionTest import org.jetbrains.kotlin.idea.index.AbstractKotlinTypeAliasByExpansionShortNameIndexTest 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.AbstractMultiModuleLineMarkerTest -import org.jetbrains.kotlin.idea.caches.resolve.AbstractMultiPlatformHighlightingTest +import org.jetbrains.kotlin.idea.caches.resolve.* import org.jetbrains.kotlin.idea.codeInsight.* import org.jetbrains.kotlin.idea.codeInsight.generate.AbstractCodeInsightActionTest import org.jetbrains.kotlin.idea.codeInsight.generate.AbstractGenerateHashCodeAndEqualsActionTest @@ -651,6 +648,10 @@ fun main(args: Array) { model("multiModuleHighlighting/multiplatform/", recursive = false, extension = null) } + testClass { + model("multiModuleHighlighting/hierarchicalExpectActualMatching/", recursive = false, extension = null) + } + testClass { model("multiModuleQuickFix", recursive = false, extension = null) } diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualInBottom/bottom/bottom.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualInBottom/bottom/bottom.kt new file mode 100644 index 00000000000..1eb0d391214 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualInBottom/bottom/bottom.kt @@ -0,0 +1,3 @@ +package sample + +actual class A \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualInBottom/dependencies.txt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualInBottom/dependencies.txt new file mode 100644 index 00000000000..44ce55cc7c9 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualInBottom/dependencies.txt @@ -0,0 +1,8 @@ +MODULE top { platform=[JVM, JS, Native] } +MODULE left { platform=[JVM, JS, Native] } +MODULE right { platform=[JVM, JS, Native] } +MODULE bottom { platform=[JVM] } + +left -> top { kind=DEPENDS_ON } +right -> top { kind=DEPENDS_ON } +bottom -> left, right { kind=DEPENDS_ON } \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualInBottom/left/left.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualInBottom/left/left.kt new file mode 100644 index 00000000000..4079b78ed46 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualInBottom/left/left.kt @@ -0,0 +1 @@ +package sample diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualInBottom/right/right.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualInBottom/right/right.kt new file mode 100644 index 00000000000..4079b78ed46 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualInBottom/right/right.kt @@ -0,0 +1 @@ +package sample diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualInBottom/top/top.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualInBottom/top/top.kt new file mode 100644 index 00000000000..1265f1ac7af --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualInBottom/top/top.kt @@ -0,0 +1,3 @@ +package sample + +expect class A \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualOnOnePath/bottom/bottom.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualOnOnePath/bottom/bottom.kt new file mode 100644 index 00000000000..7cb32d6ba6d --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualOnOnePath/bottom/bottom.kt @@ -0,0 +1,6 @@ +package sample + +fun main() { + ActualizedInLeft() + ActualizedInRight() +} \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualOnOnePath/dependencies.txt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualOnOnePath/dependencies.txt new file mode 100644 index 00000000000..44ce55cc7c9 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualOnOnePath/dependencies.txt @@ -0,0 +1,8 @@ +MODULE top { platform=[JVM, JS, Native] } +MODULE left { platform=[JVM, JS, Native] } +MODULE right { platform=[JVM, JS, Native] } +MODULE bottom { platform=[JVM] } + +left -> top { kind=DEPENDS_ON } +right -> top { kind=DEPENDS_ON } +bottom -> left, right { kind=DEPENDS_ON } \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualOnOnePath/left/left.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualOnOnePath/left/left.kt new file mode 100644 index 00000000000..66e0de55eb6 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualOnOnePath/left/left.kt @@ -0,0 +1,3 @@ +package sample + +actual class ActualizedInLeft \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualOnOnePath/right/right.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualOnOnePath/right/right.kt new file mode 100644 index 00000000000..8e247ab6097 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualOnOnePath/right/right.kt @@ -0,0 +1,3 @@ +package sample + +actual class ActualizedInRight \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualOnOnePath/top/top.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualOnOnePath/top/top.kt new file mode 100644 index 00000000000..38cdbbeb8b4 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualOnOnePath/top/top.kt @@ -0,0 +1,4 @@ +package sample + +expect class ActualizedInLeft +expect class ActualizedInRight diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondDuplicateActuals/bottom/bottom.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondDuplicateActuals/bottom/bottom.kt new file mode 100644 index 00000000000..51e1f53ea3a --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondDuplicateActuals/bottom/bottom.kt @@ -0,0 +1,16 @@ +package sample + +actual class A { + actual fun foo(): Int = 45 + fun fromBottom(): Int = 0 +} + +fun main() { + A().foo() + + // Any behaviour is acceptable, as the code is erroneous. + // At the time of writing this test, we resolve to nearest A, i.e. + // 'fromBottom' is resolved, and 'fromLeft' is not. + A().fromLeft() + A().fromBottom() +} \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondDuplicateActuals/dependencies.txt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondDuplicateActuals/dependencies.txt new file mode 100644 index 00000000000..44ce55cc7c9 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondDuplicateActuals/dependencies.txt @@ -0,0 +1,8 @@ +MODULE top { platform=[JVM, JS, Native] } +MODULE left { platform=[JVM, JS, Native] } +MODULE right { platform=[JVM, JS, Native] } +MODULE bottom { platform=[JVM] } + +left -> top { kind=DEPENDS_ON } +right -> top { kind=DEPENDS_ON } +bottom -> left, right { kind=DEPENDS_ON } \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondDuplicateActuals/left/left.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondDuplicateActuals/left/left.kt new file mode 100644 index 00000000000..44ec2e78907 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondDuplicateActuals/left/left.kt @@ -0,0 +1,6 @@ +package sample + +actual class A /* Left */ { + actual fun foo(): Int = 42 + fun fromLeft(): String = "" +} diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondDuplicateActuals/right/right.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondDuplicateActuals/right/right.kt new file mode 100644 index 00000000000..f7134592c70 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondDuplicateActuals/right/right.kt @@ -0,0 +1 @@ +package sample \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondDuplicateActuals/top/top.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondDuplicateActuals/top/top.kt new file mode 100644 index 00000000000..73b99064d04 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondDuplicateActuals/top/top.kt @@ -0,0 +1,5 @@ +package sample + +expect class A { + fun foo(): Int +} \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondSeesTwoActuals/bottom/bottom.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondSeesTwoActuals/bottom/bottom.kt new file mode 100644 index 00000000000..774ed917d01 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondSeesTwoActuals/bottom/bottom.kt @@ -0,0 +1,7 @@ +package sample + +fun main() { + A().foo() + // fromLeft should be resolved, because 'left' comes first in dependencies order! + A().fromLeft() +} \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondSeesTwoActuals/dependencies.txt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondSeesTwoActuals/dependencies.txt new file mode 100644 index 00000000000..44ce55cc7c9 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondSeesTwoActuals/dependencies.txt @@ -0,0 +1,8 @@ +MODULE top { platform=[JVM, JS, Native] } +MODULE left { platform=[JVM, JS, Native] } +MODULE right { platform=[JVM, JS, Native] } +MODULE bottom { platform=[JVM] } + +left -> top { kind=DEPENDS_ON } +right -> top { kind=DEPENDS_ON } +bottom -> left, right { kind=DEPENDS_ON } \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondSeesTwoActuals/left/left.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondSeesTwoActuals/left/left.kt new file mode 100644 index 00000000000..44ec2e78907 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondSeesTwoActuals/left/left.kt @@ -0,0 +1,6 @@ +package sample + +actual class A /* Left */ { + actual fun foo(): Int = 42 + fun fromLeft(): String = "" +} diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondSeesTwoActuals/right/right.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondSeesTwoActuals/right/right.kt new file mode 100644 index 00000000000..2926acfa52c --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondSeesTwoActuals/right/right.kt @@ -0,0 +1,5 @@ +package sample + +actual class A /* Right */ { + actual fun foo(): Int = 100500 +} \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondSeesTwoActuals/top/top.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondSeesTwoActuals/top/top.kt new file mode 100644 index 00000000000..a359748ada8 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondSeesTwoActuals/top/top.kt @@ -0,0 +1,5 @@ +package sample + +expect class A { + fun foo(): Int +} \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/differentKindsOfDependencies/a-common/a.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/differentKindsOfDependencies/a-common/a.kt new file mode 100644 index 00000000000..d1d8c72d0c5 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/differentKindsOfDependencies/a-common/a.kt @@ -0,0 +1 @@ +expect class A \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/differentKindsOfDependencies/a-js/js.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/differentKindsOfDependencies/a-js/js.kt new file mode 100644 index 00000000000..c07ff2a4d2a --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/differentKindsOfDependencies/a-js/js.kt @@ -0,0 +1,8 @@ +actual class A + +// Error: ACTUAL_WITHOUT_EXPECT, becuase we shouldn't see expects through usual dependencies +actual class B + +// OK: though we can't actualize B, we can see it and use it. +fun useB(b: B) { +} \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/differentKindsOfDependencies/a-jvm/jvm.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/differentKindsOfDependencies/a-jvm/jvm.kt new file mode 100644 index 00000000000..c07ff2a4d2a --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/differentKindsOfDependencies/a-jvm/jvm.kt @@ -0,0 +1,8 @@ +actual class A + +// Error: ACTUAL_WITHOUT_EXPECT, becuase we shouldn't see expects through usual dependencies +actual class B + +// OK: though we can't actualize B, we can see it and use it. +fun useB(b: B) { +} \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/differentKindsOfDependencies/b-common/b.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/differentKindsOfDependencies/b-common/b.kt new file mode 100644 index 00000000000..8e55c974bfa --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/differentKindsOfDependencies/b-common/b.kt @@ -0,0 +1 @@ +expect class B \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/differentKindsOfDependencies/dependencies.txt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/differentKindsOfDependencies/dependencies.txt new file mode 100644 index 00000000000..d242c8f54ce --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/differentKindsOfDependencies/dependencies.txt @@ -0,0 +1,9 @@ +MODULE a-common { platform=[JVM, JS, Native] } +MODULE a-js { platform=[JS] } +MODULE a-jvm { platform=[JVM] } +MODULE b-common { platform=[JVM, JS, Native] } + +a-js -> a-common { kind=DEPENDS_ON } +a-jvm -> a-common { kind=DEPENDS_ON } + +a-common -> b-common { kind=DEPENDENCY } diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsExplicit/bottom/bottom.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsExplicit/bottom/bottom.kt new file mode 100644 index 00000000000..678301c2c64 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsExplicit/bottom/bottom.kt @@ -0,0 +1,3 @@ +package foo + +actual class A diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsExplicit/dependencies.txt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsExplicit/dependencies.txt new file mode 100644 index 00000000000..d16621f5173 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsExplicit/dependencies.txt @@ -0,0 +1,6 @@ +MODULE top { platform=[JVM, JS, Native] } +MODULE middle { platform=[JVM, JS] } +MODULE bottom { platform=[JVM] } + +middle -> top { kind=DEPENDS_ON } +bottom -> middle { kind=DEPENDS_ON } diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsExplicit/middle/middle.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsExplicit/middle/middle.kt new file mode 100644 index 00000000000..e2147a3138b --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsExplicit/middle/middle.kt @@ -0,0 +1,3 @@ +package foo + +actual class A \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsExplicit/top/top.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsExplicit/top/top.kt new file mode 100644 index 00000000000..f38997819fd --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsExplicit/top/top.kt @@ -0,0 +1,3 @@ +package foo + +expect class A \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsImplicit/bottom/bottom.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsImplicit/bottom/bottom.kt new file mode 100644 index 00000000000..e67a624a9a4 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsImplicit/bottom/bottom.kt @@ -0,0 +1,6 @@ +package foo + +class ActualInMiddleCompatibleInBottom +actual class CompatibleInMiddleActualInBottom + +class CompatibleInMiddleAndBottom diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsImplicit/dependencies.txt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsImplicit/dependencies.txt new file mode 100644 index 00000000000..d16621f5173 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsImplicit/dependencies.txt @@ -0,0 +1,6 @@ +MODULE top { platform=[JVM, JS, Native] } +MODULE middle { platform=[JVM, JS] } +MODULE bottom { platform=[JVM] } + +middle -> top { kind=DEPENDS_ON } +bottom -> middle { kind=DEPENDS_ON } diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsImplicit/middle/middle.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsImplicit/middle/middle.kt new file mode 100644 index 00000000000..1de923ea4ad --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsImplicit/middle/middle.kt @@ -0,0 +1,6 @@ +package foo + +actual class ActualInMiddleCompatibleInBottom +class CompatibleInMiddleActualInBottom + +class CompatibleInMiddleAndBottom \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsImplicit/top/top.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsImplicit/top/top.kt new file mode 100644 index 00000000000..986d4c60a35 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsImplicit/top/top.kt @@ -0,0 +1,6 @@ +package foo + +expect class ActualInMiddleCompatibleInBottom +expect class CompatibleInMiddleActualInBottom + +expect class CompatibleInMiddleAndBottom \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWeaklyIncompatible/bottom/bottom.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWeaklyIncompatible/bottom/bottom.kt new file mode 100644 index 00000000000..d6d3776a3d4 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWeaklyIncompatible/bottom/bottom.kt @@ -0,0 +1,3 @@ +package foo + +private class A \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWeaklyIncompatible/dependencies.txt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWeaklyIncompatible/dependencies.txt new file mode 100644 index 00000000000..d16621f5173 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWeaklyIncompatible/dependencies.txt @@ -0,0 +1,6 @@ +MODULE top { platform=[JVM, JS, Native] } +MODULE middle { platform=[JVM, JS] } +MODULE bottom { platform=[JVM] } + +middle -> top { kind=DEPENDS_ON } +bottom -> middle { kind=DEPENDS_ON } diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWeaklyIncompatible/middle/middle.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWeaklyIncompatible/middle/middle.kt new file mode 100644 index 00000000000..e2147a3138b --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWeaklyIncompatible/middle/middle.kt @@ -0,0 +1,3 @@ +package foo + +actual class A \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWeaklyIncompatible/top/top.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWeaklyIncompatible/top/top.kt new file mode 100644 index 00000000000..4daacb52744 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWeaklyIncompatible/top/top.kt @@ -0,0 +1,3 @@ +package foo + +expect class A \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWithStrongIncompatibility/bottom/bottom.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWithStrongIncompatibility/bottom/bottom.kt new file mode 100644 index 00000000000..4975a08653f --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWithStrongIncompatibility/bottom/bottom.kt @@ -0,0 +1,3 @@ +package foo + +actual fun foo(x: Int): Int = x \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWithStrongIncompatibility/dependencies.txt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWithStrongIncompatibility/dependencies.txt new file mode 100644 index 00000000000..d16621f5173 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWithStrongIncompatibility/dependencies.txt @@ -0,0 +1,6 @@ +MODULE top { platform=[JVM, JS, Native] } +MODULE middle { platform=[JVM, JS] } +MODULE bottom { platform=[JVM] } + +middle -> top { kind=DEPENDS_ON } +bottom -> middle { kind=DEPENDS_ON } diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWithStrongIncompatibility/middle/middle.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWithStrongIncompatibility/middle/middle.kt new file mode 100644 index 00000000000..c6cb1d20e89 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWithStrongIncompatibility/middle/middle.kt @@ -0,0 +1,3 @@ +package foo + +actual fun foo(): Int = 42 \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWithStrongIncompatibility/top/top.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWithStrongIncompatibility/top/top.kt new file mode 100644 index 00000000000..801eaf23873 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWithStrongIncompatibility/top/top.kt @@ -0,0 +1,3 @@ +package foo + +expect fun foo(): Int \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsExplicit/bottom/bottom.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsExplicit/bottom/bottom.kt new file mode 100644 index 00000000000..52b8666f932 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsExplicit/bottom/bottom.kt @@ -0,0 +1 @@ +actual class A \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsExplicit/dependencies.txt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsExplicit/dependencies.txt new file mode 100644 index 00000000000..9e92b6e2126 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsExplicit/dependencies.txt @@ -0,0 +1,6 @@ +MODULE right { platform=[JVM, Native] } +MODULE left { platform=[JVM, JS] } +MODULE bottom { platform=[JVM] } + +bottom -> right { kind=DEPENDS_ON } +bottom -> left { kind=DEPENDS_ON } diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsExplicit/left/left.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsExplicit/left/left.kt new file mode 100644 index 00000000000..d1d8c72d0c5 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsExplicit/left/left.kt @@ -0,0 +1 @@ +expect class A \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsExplicit/right/right.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsExplicit/right/right.kt new file mode 100644 index 00000000000..d1d8c72d0c5 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsExplicit/right/right.kt @@ -0,0 +1 @@ +expect class A \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsImplicit/bottom/bottom.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsImplicit/bottom/bottom.kt new file mode 100644 index 00000000000..72e8e852980 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsImplicit/bottom/bottom.kt @@ -0,0 +1,3 @@ +// Note that here we have no ambiguity, becuase we don't consider +// declarations without 'expect' as potential weakly-compatible 'expect'-counterpart +actual class A \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsImplicit/dependencies.txt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsImplicit/dependencies.txt new file mode 100644 index 00000000000..9e92b6e2126 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsImplicit/dependencies.txt @@ -0,0 +1,6 @@ +MODULE right { platform=[JVM, Native] } +MODULE left { platform=[JVM, JS] } +MODULE bottom { platform=[JVM] } + +bottom -> right { kind=DEPENDS_ON } +bottom -> left { kind=DEPENDS_ON } diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsImplicit/left/left.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsImplicit/left/left.kt new file mode 100644 index 00000000000..d8bb40ad3c8 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsImplicit/left/left.kt @@ -0,0 +1 @@ +expect class A \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsImplicit/right/right.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsImplicit/right/right.kt new file mode 100644 index 00000000000..fb7337ede5b --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsImplicit/right/right.kt @@ -0,0 +1 @@ +class A \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsWithStrongIncompatibility/bottom/bottom.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsWithStrongIncompatibility/bottom/bottom.kt new file mode 100644 index 00000000000..e5dcb22c9a4 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsWithStrongIncompatibility/bottom/bottom.kt @@ -0,0 +1 @@ +actual fun foo(): Int = 42 \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsWithStrongIncompatibility/dependencies.txt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsWithStrongIncompatibility/dependencies.txt new file mode 100644 index 00000000000..9e92b6e2126 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsWithStrongIncompatibility/dependencies.txt @@ -0,0 +1,6 @@ +MODULE right { platform=[JVM, Native] } +MODULE left { platform=[JVM, JS] } +MODULE bottom { platform=[JVM] } + +bottom -> right { kind=DEPENDS_ON } +bottom -> left { kind=DEPENDS_ON } diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsWithStrongIncompatibility/left/left.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsWithStrongIncompatibility/left/left.kt new file mode 100644 index 00000000000..f5ed19d2be4 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsWithStrongIncompatibility/left/left.kt @@ -0,0 +1 @@ +expect fun foo(): Int \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsWithStrongIncompatibility/right/right.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsWithStrongIncompatibility/right/right.kt new file mode 100644 index 00000000000..2d1e1d02ce9 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsWithStrongIncompatibility/right/right.kt @@ -0,0 +1 @@ +expect fun foo(x: Int): Int \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/hierarcicalActualization/common/common.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/hierarcicalActualization/common/common.kt new file mode 100644 index 00000000000..a47be5a627f --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/hierarcicalActualization/common/common.kt @@ -0,0 +1,6 @@ +package foo + +expect class ExpectInCommonActualInMiddle +expect class ExpectInCommonActualInPlatforms + +expect class ExpectInCommonWithoutActual diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/hierarcicalActualization/dependencies.txt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/hierarcicalActualization/dependencies.txt new file mode 100644 index 00000000000..87fab2fe208 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/hierarcicalActualization/dependencies.txt @@ -0,0 +1,8 @@ +MODULE common { platform=[JVM, JS, Native] } +MODULE jvmAndJs { platform=[JVM, JS] } +MODULE jvm { platform=[JVM] } +MODULE js { platform=[JS] } + +jvm -> jvmAndJs { kind=DEPENDS_ON } +js -> jvmAndJs { kind=DEPENDS_ON } +jvmAndJs -> common { kind=DEPENDS_ON } diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/hierarcicalActualization/js/js.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/hierarcicalActualization/js/js.kt new file mode 100644 index 00000000000..c5c68fcd472 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/hierarcicalActualization/js/js.kt @@ -0,0 +1,10 @@ +package foo + +actual class ExpectInCommonActualInPlatforms + +actual class ExpectInMiddleActualInPlatforms + +expect class ExpectInJsWithoutActual + +expect class ExpectInJsActualInJs +actual class ExpectInJsActualInJs \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/hierarcicalActualization/jvm/jvm.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/hierarcicalActualization/jvm/jvm.kt new file mode 100644 index 00000000000..e3f16d4c7cc --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/hierarcicalActualization/jvm/jvm.kt @@ -0,0 +1,9 @@ +package foo + +actual class ExpectInCommonActualInPlatforms +actual class ExpectInMiddleActualInPlatforms + +expect class ExpectInJvmWithoutActual + +expect class ExpectInJvmActualInJvm +actual class ExpectInJvmActualInJvm diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/hierarcicalActualization/jvmAndJs/jvmAndJs.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/hierarcicalActualization/jvmAndJs/jvmAndJs.kt new file mode 100644 index 00000000000..e79bf3093f5 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/hierarcicalActualization/jvmAndJs/jvmAndJs.kt @@ -0,0 +1,7 @@ +package foo + +actual class ExpectInCommonActualInMiddle + +expect class ExpectInMiddleActualInPlatforms + +expect class ExpectInMiddleWithoutActual diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/incompleteActualization/common/common.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/incompleteActualization/common/common.kt new file mode 100644 index 00000000000..752b156ba33 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/incompleteActualization/common/common.kt @@ -0,0 +1,4 @@ +package foo + +expect class ExpectInCommonActualInJsOnly +expect class ExpectInCommonActualInJvmOnly diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/incompleteActualization/dependencies.txt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/incompleteActualization/dependencies.txt new file mode 100644 index 00000000000..87fab2fe208 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/incompleteActualization/dependencies.txt @@ -0,0 +1,8 @@ +MODULE common { platform=[JVM, JS, Native] } +MODULE jvmAndJs { platform=[JVM, JS] } +MODULE jvm { platform=[JVM] } +MODULE js { platform=[JS] } + +jvm -> jvmAndJs { kind=DEPENDS_ON } +js -> jvmAndJs { kind=DEPENDS_ON } +jvmAndJs -> common { kind=DEPENDS_ON } diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/incompleteActualization/js/js.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/incompleteActualization/js/js.kt new file mode 100644 index 00000000000..dbc5bdf0dfb --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/incompleteActualization/js/js.kt @@ -0,0 +1,4 @@ +package foo + +actual class ExpectInCommonActualInJsOnly +actual class ExpectInMiddleActualInJsOnly \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/incompleteActualization/jvm/jvm.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/incompleteActualization/jvm/jvm.kt new file mode 100644 index 00000000000..aad88a99fbf --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/incompleteActualization/jvm/jvm.kt @@ -0,0 +1,4 @@ +package foo + +actual class ExpectInCommonActualInJvmOnly +actual class ExpectInMiddleActualInJvmOnly \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/incompleteActualization/jvmAndJs/jvmAndJs.kt b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/incompleteActualization/jvmAndJs/jvmAndJs.kt new file mode 100644 index 00000000000..771f51f438b --- /dev/null +++ b/idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/incompleteActualization/jvmAndJs/jvmAndJs.kt @@ -0,0 +1,4 @@ +package foo + +expect class ExpectInMiddleActualInJsOnly +expect class ExpectInMiddleActualInJvmOnly \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleIdeResolveTest.kt b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleIdeResolveTest.kt new file mode 100644 index 00000000000..4d218c9e406 --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleIdeResolveTest.kt @@ -0,0 +1,91 @@ +/* + * Copyright 2010-2019 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.caches.resolve + +import com.intellij.psi.PsiFile +import com.intellij.util.io.exists +import org.jetbrains.kotlin.checkers.utils.CheckerTestUtil +import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl +import org.jetbrains.kotlin.idea.multiplatform.setupMppProjectFromTextFile +import org.jetbrains.kotlin.idea.project.platform +import org.jetbrains.kotlin.idea.resolve.frontendService +import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest +import org.jetbrains.kotlin.idea.test.PluginTestCaseBase +import org.jetbrains.kotlin.idea.test.allKotlinFiles +import org.jetbrains.kotlin.idea.util.module +import org.jetbrains.kotlin.idea.util.sourceRoots +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.test.KotlinTestUtils +import java.io.File +import java.nio.file.Paths + +abstract class AbstractMultiModuleIdeResolveTest : AbstractMultiModuleTest() { + fun doTest(testDataPath: String) { + val testRoot = File(testDataPath) + + val dependenciesTxt = File(testDataPath, "dependencies.txt") + require(dependenciesTxt.exists()) { + "${dependenciesTxt.absolutePath} does not exist. dependencies.txt is required" + } + + // This will implicitly copy all source files to temporary directory, clearing them from diagnostic markup in process + setupMppProjectFromTextFile(testRoot) + + for (tempFile in project.allKotlinFiles()) { + checkFile(tempFile, tempFile.findCorrespondingFileInTestDir(testRoot)) + } + } + + private fun KtFile.findCorrespondingFileInTestDir(testDir: File): File { + val tempRootPath = Paths.get(this.module!!.sourceRoots.single().path) + val tempProjectDirPath = tempRootPath.parent + val tempSourcePath = Paths.get(this.virtualFilePath) + + val relativeToProjectRootPath = tempProjectDirPath.relativize(tempSourcePath) + + val testSourcesProjectDirPath = testDir.toPath() + val testSourcePath = testSourcesProjectDirPath.resolve(relativeToProjectRootPath) + + require(testSourcePath.exists()) { + "Can't find file in testdata for copied file $this: checked at path ${testSourcePath.toAbsolutePath()}" + } + + return testSourcePath.toFile() + } + + protected open fun checkFile(file: KtFile, expectedFile: File) { + val resolutionFacade = file.getResolutionFacade() + val (bindingContext, moduleDescriptor) = resolutionFacade.analyzeWithAllCompilerChecks(listOf(file)) + + val actualDiagnostics = CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors( + bindingContext, + file, + markDynamicCalls = false, + dynamicCallDescriptors = mutableListOf(), + platform = null, // we don't need to attach platform-description string to diagnostic here + withNewInference = false, + languageVersionSettings = resolutionFacade.frontendService(), + dataFlowValueFactory = resolutionFacade.frontendService(), + moduleDescriptor = moduleDescriptor as ModuleDescriptorImpl + ) + + val actualTextWithDiagnostics = CheckerTestUtil.addDiagnosticMarkersToText( + file, + actualDiagnostics, + diagnosticToExpectedDiagnostic = emptyMap(), + getFileText = { it.text }, + uncheckedDiagnostics = emptyList(), + withNewInferenceDirective = false, + renderDiagnosticMessages = true + ).toString() + + KotlinTestUtils.assertEqualsToFile(expectedFile, actualTextWithDiagnostics) + } +} + +abstract class AbstractHierarchicalExpectActualTest : AbstractMultiModuleIdeResolveTest() { + override fun getTestDataPath(): String = "${PluginTestCaseBase.getTestDataPathBase()}/hierarchicalExpectActual" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/HierarchicalExpectActualTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/HierarchicalExpectActualTestGenerated.java new file mode 100644 index 00000000000..d2be8e23693 --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/HierarchicalExpectActualTestGenerated.java @@ -0,0 +1,96 @@ +/* + * Copyright 2010-2019 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.caches.resolve; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.JUnit3RunnerWithInners; +import org.jetbrains.kotlin.test.KotlinTestUtils; +import org.jetbrains.kotlin.test.TargetBackend; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.runner.RunWith; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching") +@TestDataPath("$PROJECT_ROOT") +@RunWith(JUnit3RunnerWithInners.class) +public class HierarchicalExpectActualTestGenerated extends AbstractHierarchicalExpectActualTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath); + } + + public void testAllFilesPresentInHierarchicalExpectActualMatching() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching"), Pattern.compile("^([^\\.]+)$"), TargetBackend.ANY, false); + } + + @TestMetadata("diamondActualOnOnePath") + public void testDiamondActualOnOnePath() throws Exception { + runTest("idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondActualOnOnePath/"); + } + + @TestMetadata("diamondDuplicateActuals") + public void testDiamondDuplicateActuals() throws Exception { + runTest("idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondDuplicateActuals/"); + } + + @TestMetadata("diamondSeesTwoActuals") + public void testDiamondSeesTwoActuals() throws Exception { + runTest("idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/diamondSeesTwoActuals/"); + } + + @TestMetadata("differentKindsOfDependencies") + public void testDifferentKindsOfDependencies() throws Exception { + runTest("idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/differentKindsOfDependencies/"); + } + + @TestMetadata("duplicateActualsExplicit") + public void testDuplicateActualsExplicit() throws Exception { + runTest("idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsExplicit/"); + } + + @TestMetadata("duplicateActualsImplicit") + public void testDuplicateActualsImplicit() throws Exception { + runTest("idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsImplicit/"); + } + + @TestMetadata("duplicateActualsOneWeaklyIncompatible") + public void testDuplicateActualsOneWeaklyIncompatible() throws Exception { + runTest("idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWeaklyIncompatible/"); + } + + @TestMetadata("duplicateActualsOneWithStrongIncompatibility") + public void testDuplicateActualsOneWithStrongIncompatibility() throws Exception { + runTest("idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateActualsOneWithStrongIncompatibility/"); + } + + @TestMetadata("duplicateExpectsExplicit") + public void testDuplicateExpectsExplicit() throws Exception { + runTest("idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsExplicit/"); + } + + @TestMetadata("duplicateExpectsImplicit") + public void testDuplicateExpectsImplicit() throws Exception { + runTest("idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsImplicit/"); + } + + @TestMetadata("duplicateExpectsWithStrongIncompatibility") + public void testDuplicateExpectsWithStrongIncompatibility() throws Exception { + runTest("idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/duplicateExpectsWithStrongIncompatibility/"); + } + + @TestMetadata("hierarcicalActualization") + public void testHierarcicalActualization() throws Exception { + runTest("idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/hierarcicalActualization/"); + } + + @TestMetadata("incompleteActualization") + public void testIncompleteActualization() throws Exception { + runTest("idea/testData/multiModuleHighlighting/hierarchicalExpectActualMatching/incompleteActualization/"); + } +}