From f435ea3aef307763335d8b901e1f2e64b3c96ad7 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 28 Feb 2024 17:23:28 +0100 Subject: [PATCH] [kotlin] kmp find usages: find actual counterpart for expect annotation default property ^KTIJ-28958 fixed GitOrigin-RevId: 9bcabbbc3d4718543e4c9785d7505d35a27ef784 --- .../KotlinReferencesSearcher.kt | 21 ++++++++++++++++++- .../findUsages/FindUsagesMultiModuleTest.kt | 4 ++++ .../components/recursiveDataClass1.0.kt | 1 + .../components/recursiveDataClass1.log | 5 +++++ .../recursiveDataClass1.results.txt | 1 + .../common/common.kt | 4 ++++ .../common/common.results.txt | 2 ++ .../findExpectAnnotationValue/directives.txt | 1 + .../findExpectAnnotationValue/jvm/Main.java | 2 ++ .../findExpectAnnotationValue/jvm/jvm.kt | 4 ++++ 10 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/common/common.kt create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/common/common.results.txt create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/directives.txt create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/jvm/Main.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/jvm/jvm.kt diff --git a/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.kt b/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.kt index b7db056661d9..18bcf5ab488e 100644 --- a/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.kt +++ b/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.kt @@ -374,7 +374,26 @@ class KotlinReferencesSearcher : QueryExecutorBase() + .flatMap { it.toLightElements() } + .toList() + } else origin.toLightElements() + val namedElements = lightMethods.filterDataClassComponentsIfDisabled(kotlinOptions) + for (element in namedElements) { + searchMethodAware(element) + } + } + + @RequiresReadLock + private fun searchMethodAware(element: PsiNamedElement) { + if (element is PsiMethod) { + MethodReferencesSearch.search(element, queryParameters.effectiveSearchScope, true).forEach(consumer) + } else { + searchNamedElement(element) + } } @RequiresReadLock diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/findUsages/FindUsagesMultiModuleTest.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/findUsages/FindUsagesMultiModuleTest.kt index 17fdd215caee..a80e244d6f91 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/findUsages/FindUsagesMultiModuleTest.kt +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/findUsages/FindUsagesMultiModuleTest.kt @@ -45,6 +45,10 @@ open class FindUsagesMultiModuleTest : AbstractFindUsagesMultiModuleTest() { doTest() } + fun testFindExpectAnnotationValue() { + doTest() + } + fun testFindExpectPropertyInJvm() { doTest() } diff --git a/plugins/kotlin/idea/tests/testData/findUsages/kotlin/conventions/components/recursiveDataClass1.0.kt b/plugins/kotlin/idea/tests/testData/findUsages/kotlin/conventions/components/recursiveDataClass1.0.kt index 3e15ffc1d9fd..9ea3bda701f1 100644 --- a/plugins/kotlin/idea/tests/testData/findUsages/kotlin/conventions/components/recursiveDataClass1.0.kt +++ b/plugins/kotlin/idea/tests/testData/findUsages/kotlin/conventions/components/recursiveDataClass1.0.kt @@ -7,6 +7,7 @@ fun f(a: A) { val (a1, n1) = a val (a2, n2) = a?.a ?: return + val (a3, n3) = a1 ?: return } diff --git a/plugins/kotlin/idea/tests/testData/findUsages/kotlin/conventions/components/recursiveDataClass1.log b/plugins/kotlin/idea/tests/testData/findUsages/kotlin/conventions/components/recursiveDataClass1.log index 355d9e11c109..df31726e4597 100644 --- a/plugins/kotlin/idea/tests/testData/findUsages/kotlin/conventions/components/recursiveDataClass1.log +++ b/plugins/kotlin/idea/tests/testData/findUsages/kotlin/conventions/components/recursiveDataClass1.log @@ -1,11 +1,16 @@ Checked type of a1 Checked type of a2 +Checked type of a3 Checked type of n1 Checked type of n2 +Checked type of n3 ExpressionOfTypeProcessor is already started for A. Exit for operator parameter a of A(val a: A?, val n: Int). Resolved (a1, n1) Resolved (a2, n2) +Resolved (a3, n3) Searched references to A +Searched references to a1 in non-Java files +Searched references to a2 in non-Java files Searched references to parameter a of A(val a: A?, val n: Int) in non-Java files Searched references to parameter a of f(a: A) in non-Java files Used plain search of parameter a of A(val a: A?, val n: Int) in LocalSearchScope: diff --git a/plugins/kotlin/idea/tests/testData/findUsages/kotlin/conventions/components/recursiveDataClass1.results.txt b/plugins/kotlin/idea/tests/testData/findUsages/kotlin/conventions/components/recursiveDataClass1.results.txt index f4ca9423288f..ed6af1172842 100644 --- a/plugins/kotlin/idea/tests/testData/findUsages/kotlin/conventions/components/recursiveDataClass1.results.txt +++ b/plugins/kotlin/idea/tests/testData/findUsages/kotlin/conventions/components/recursiveDataClass1.results.txt @@ -1,3 +1,4 @@ +Value read 10 val (a3, n3) = a1 ?: return Value read 7 val (a1, n1) = a Value read 8 val (a2, n2) = Value read 9 a?.a ?: return diff --git a/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/common/common.kt b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/common/common.kt new file mode 100644 index 000000000000..9972899fc37b --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/common/common.kt @@ -0,0 +1,4 @@ +// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtParameter +// OPTIONS: usages + +expect annotation class A(val value: String) \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/common/common.results.txt b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/common/common.results.txt new file mode 100644 index 000000000000..5ca1544ba399 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/common/common.results.txt @@ -0,0 +1,2 @@ +[Main.java] Unclassified 1 @A("main") +[jvm.kt] Unclassified 3 @A("a") \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/directives.txt b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/directives.txt new file mode 100644 index 000000000000..7f5a7487e171 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/directives.txt @@ -0,0 +1 @@ +// FIR_COMPARISON diff --git a/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/jvm/Main.java b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/jvm/Main.java new file mode 100644 index 000000000000..b9efc3527dae --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/jvm/Main.java @@ -0,0 +1,2 @@ +@A("main") +class Main { } \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/jvm/jvm.kt b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/jvm/jvm.kt new file mode 100644 index 000000000000..ebf25227208b --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleFindUsages/findExpectAnnotationValue/jvm/jvm.kt @@ -0,0 +1,4 @@ +actual annotation class A(actual val value: String) + +@A("a") +fun m() {}