From efb36f4a494824176b1cdb83803ab5334192133f Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 11 Jun 2015 14:52:23 +0300 Subject: [PATCH] Find Usages: Use isEquivalenTo for PsiCompiledElement only when matching reference targets #KT-7983 Fixed --- .../kotlin/idea/references/referenceUtil.kt | 3 ++- .../findClassUsages/localAndNonLocalClass.0.kt | 17 +++++++++++++++++ .../localAndNonLocalClass.results.txt | 1 + .../findUsages/JetFindUsagesTestGenerated.java | 6 ++++++ 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 idea/testData/findUsages/kotlin/findClassUsages/localAndNonLocalClass.0.kt create mode 100644 idea/testData/findUsages/kotlin/findClassUsages/localAndNonLocalClass.results.txt diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt index 7e65953d168..aab2fdae0d3 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt @@ -69,8 +69,9 @@ public fun PsiReference.matchesTarget(candidateTarget: PsiElement): Boolean { } val targets = unwrappedTargets + if (unwrappedCandidate in targets) return true // TODO: Investigate why PsiCompiledElement identity changes - if (targets.any { it.isEquivalentTo(unwrappedCandidate) }) return true + if (unwrappedCandidate is PsiCompiledElement && targets.any { it.isEquivalentTo(unwrappedCandidate) }) return true if (this is JetReference) { return targets.any { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/localAndNonLocalClass.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/localAndNonLocalClass.0.kt new file mode 100644 index 00000000000..34cd94d538e --- /dev/null +++ b/idea/testData/findUsages/kotlin/findClassUsages/localAndNonLocalClass.0.kt @@ -0,0 +1,17 @@ +// PSI_ELEMENT: org.jetbrains.kotlin.psi.JetClass +// OPTIONS: usages, constructorUsages +class C { + init { + println("global") + } +} + +fun main(args: Array) { + C() + class C { + init { + println("local") + } + } + C() +} \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findClassUsages/localAndNonLocalClass.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/localAndNonLocalClass.results.txt new file mode 100644 index 00000000000..31640d47478 --- /dev/null +++ b/idea/testData/findUsages/kotlin/findClassUsages/localAndNonLocalClass.results.txt @@ -0,0 +1 @@ +New instance creation (10: 5) C() \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/findUsages/JetFindUsagesTestGenerated.java b/idea/tests/org/jetbrains/kotlin/findUsages/JetFindUsagesTestGenerated.java index 303d2b2227e..cdf5da168d4 100644 --- a/idea/tests/org/jetbrains/kotlin/findUsages/JetFindUsagesTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/findUsages/JetFindUsagesTestGenerated.java @@ -507,6 +507,12 @@ public class JetFindUsagesTestGenerated extends AbstractJetFindUsagesTest { doTest(fileName); } + @TestMetadata("localAndNonLocalClass.0.kt") + public void testLocalAndNonLocalClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findClassUsages/localAndNonLocalClass.0.kt"); + doTest(fileName); + } + @TestMetadata("primaryConstructorWithDefaultParams.0.kt") public void testPrimaryConstructorWithDefaultParams() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findClassUsages/primaryConstructorWithDefaultParams.0.kt");