diff --git a/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/operators/OperatorReferenceSearcher.kt b/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/operators/OperatorReferenceSearcher.kt index fff3210b2745..3f4346e6d175 100644 --- a/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/operators/OperatorReferenceSearcher.kt +++ b/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/operators/OperatorReferenceSearcher.kt @@ -67,9 +67,10 @@ abstract class OperatorReferenceSearcher( return consumer.process(reference) } - val currentTarget = reference.resolve() as? KtDeclaration ?: return true + val currentTargets = (reference as? PsiPolyVariantReference)?.multiResolve(false)?.mapNotNull { it.element as? KtDeclaration } ?: return true if (targetDeclaration !is KtDeclaration) return true - return if ((targetDeclaration.expectedDeclarationIfAny() ?: targetDeclaration) == (currentTarget.expectedDeclarationIfAny() ?: currentTarget) + val expectedTarget = targetDeclaration.expectedDeclarationIfAny() ?: targetDeclaration + return if (expectedTarget in currentTargets.map { it.expectedDeclarationIfAny() ?: it } ) { consumer.process(reference) } else { diff --git a/plugins/kotlin/fir/tests/test/org/jetbrains/kotlin/idea/fir/findUsages/FindUsagesMultiModuleFirTestGenerated.java b/plugins/kotlin/fir/tests/test/org/jetbrains/kotlin/idea/fir/findUsages/FindUsagesMultiModuleFirTestGenerated.java index 3deae8f70c47..c77d788cafe1 100644 --- a/plugins/kotlin/fir/tests/test/org/jetbrains/kotlin/idea/fir/findUsages/FindUsagesMultiModuleFirTestGenerated.java +++ b/plugins/kotlin/fir/tests/test/org/jetbrains/kotlin/idea/fir/findUsages/FindUsagesMultiModuleFirTestGenerated.java @@ -73,6 +73,16 @@ public class FindUsagesMultiModuleFirTestGenerated extends AbstractFindUsagesMul runTest("../../idea/tests/testData/multiModuleFindUsages/findCompanionObjectUsages/"); } + @TestMetadata("findComponentsByConventionInCommon") + public void testFindComponentsByConventionInCommon() throws Exception { + runTest("../../idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInCommon/"); + } + + @TestMetadata("findComponentsByConventionInPlatform") + public void testFindComponentsByConventionInPlatform() throws Exception { + runTest("../../idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInPlatform/"); + } + @TestMetadata("findDataComponentInJs") public void testFindDataComponentInJs() throws Exception { runTest("../../idea/tests/testData/multiModuleFindUsages/findDataComponentInJs/"); diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/findUsages/FindUsagesMultiModuleTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/findUsages/FindUsagesMultiModuleTestGenerated.java index 407c723ec59a..d132525f50c0 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/findUsages/FindUsagesMultiModuleTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/findUsages/FindUsagesMultiModuleTestGenerated.java @@ -73,6 +73,16 @@ public class FindUsagesMultiModuleTestGenerated extends AbstractFindUsagesMultiM runTest("testData/multiModuleFindUsages/findCompanionObjectUsages/"); } + @TestMetadata("findComponentsByConventionInCommon") + public void testFindComponentsByConventionInCommon() throws Exception { + runTest("testData/multiModuleFindUsages/findComponentsByConventionInCommon/"); + } + + @TestMetadata("findComponentsByConventionInPlatform") + public void testFindComponentsByConventionInPlatform() throws Exception { + runTest("testData/multiModuleFindUsages/findComponentsByConventionInPlatform/"); + } + @TestMetadata("findDataComponentInJs") public void testFindDataComponentInJs() throws Exception { runTest("testData/multiModuleFindUsages/findDataComponentInJs/"); diff --git a/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInCommon/common/common.kt b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInCommon/common/common.kt new file mode 100644 index 000000000000..f5cca9650108 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInCommon/common/common.kt @@ -0,0 +1,9 @@ +// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtFunction +// OPTIONS: usages, expected +class DummyClass001 +expect operator fun DummyClass001.component1() +expect operator fun DummyClass001.component2() +fun testDummyClass001() { + val (a, b) = DummyClass001() + DummyClass001().component1() +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInCommon/common/common.results.txt b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInCommon/common/common.results.txt new file mode 100644 index 000000000000..3f7ce0b56d0a --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInCommon/common/common.results.txt @@ -0,0 +1,6 @@ +[common.kt] Function call 8 DummyClass001().component1() +[common.kt] Value read 7 val (a, b) = DummyClass001() +[js.kt] Function call 5 DummyClass001().component1() +[js.kt] Value read 4 val (a, b) = DummyClass001() +[jvm.kt] Function call 5 DummyClass001().component1() +[jvm.kt] Value read 4 val (a, b) = DummyClass001() \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInCommon/directives.txt b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInCommon/directives.txt new file mode 100644 index 000000000000..a8106f330558 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInCommon/directives.txt @@ -0,0 +1 @@ +// IGNORE_K1 diff --git a/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInCommon/js/js.kt b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInCommon/js/js.kt new file mode 100644 index 000000000000..a75d057498ac --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInCommon/js/js.kt @@ -0,0 +1,6 @@ +actual operator fun DummyClass001.component1() {} +actual operator fun DummyClass001.component2() {} +fun testDummyClass001Js() { + val (a, b) = DummyClass001() + DummyClass001().component1() +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInCommon/jvm/jvm.kt b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInCommon/jvm/jvm.kt new file mode 100644 index 000000000000..5a224d97bc5b --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInCommon/jvm/jvm.kt @@ -0,0 +1,6 @@ +actual operator fun DummyClass001.component1() {} +actual operator fun DummyClass001.component2() {} +fun testDummyClass001Jvm() { + val (a, b) = DummyClass001() + DummyClass001().component1() +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInPlatform/common/common.kt b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInPlatform/common/common.kt new file mode 100644 index 000000000000..dcf4d01347d8 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInPlatform/common/common.kt @@ -0,0 +1,7 @@ +class DummyClass001 +expect operator fun DummyClass001.component1() +expect operator fun DummyClass001.component2() +fun testDummyClass001() { + val (a, b) = DummyClass001() + DummyClass001().component1() +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInPlatform/directives.txt b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInPlatform/directives.txt new file mode 100644 index 000000000000..a8106f330558 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInPlatform/directives.txt @@ -0,0 +1 @@ +// IGNORE_K1 diff --git a/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInPlatform/js/js.kt b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInPlatform/js/js.kt new file mode 100644 index 000000000000..716da0420268 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInPlatform/js/js.kt @@ -0,0 +1,8 @@ +// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtFunction +// OPTIONS: usages, expected +actual operator fun DummyClass001.component1() {} +actual operator fun DummyClass001.component2() {} +fun testDummyClass001Js() { + val (a, b) = DummyClass001() + DummyClass001().component1() +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInPlatform/js/js.results.txt b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInPlatform/js/js.results.txt new file mode 100644 index 000000000000..304917f9983a --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInPlatform/js/js.results.txt @@ -0,0 +1,6 @@ +[common.kt] Function call 6 DummyClass001().component1() +[common.kt] Value read 5 val (a, b) = DummyClass001() +[js.kt] Function call 7 DummyClass001().component1() +[js.kt] Value read 6 val (a, b) = DummyClass001() +[jvm.kt] Function call 5 DummyClass001().component1() +[jvm.kt] Value read 4 val (a, b) = DummyClass001() \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInPlatform/jvm/jvm.kt b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInPlatform/jvm/jvm.kt new file mode 100644 index 000000000000..5a224d97bc5b --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findComponentsByConventionInPlatform/jvm/jvm.kt @@ -0,0 +1,6 @@ +actual operator fun DummyClass001.component1() {} +actual operator fun DummyClass001.component2() {} +fun testDummyClass001Jvm() { + val (a, b) = DummyClass001() + DummyClass001().component1() +}