From 74cdecd82943fe3a77f576081a6be092214944b4 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 27 Nov 2014 15:43:45 +0300 Subject: [PATCH] Find Usages: Restrict search scope of class object private declarations to the containing class --- .../jet/lang/psi/JetNamedDeclarationStub.java | 10 +++++++++- .../kotlinPrivatePropertyInClassObjectUsages.0.kt | 10 ++++++++++ ...otlinPrivatePropertyInClassObjectUsages.results.txt | 1 + .../jet/findUsages/JetFindUsagesTestGenerated.java | 6 ++++++ 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPrivatePropertyInClassObjectUsages.0.kt create mode 100644 idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPrivatePropertyInClassObjectUsages.results.txt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamedDeclarationStub.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamedDeclarationStub.java index 273a662112c..6396db83d2e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamedDeclarationStub.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamedDeclarationStub.java @@ -95,7 +95,15 @@ abstract class JetNamedDeclarationStub extends J if (hasModifier(JetTokens.PRIVATE_KEYWORD)) { JetElement containingClass = PsiTreeUtil.getParentOfType(this, JetClassOrObject.class); - if (containingClass != null) return new LocalSearchScope(containingClass); + if (containingClass instanceof JetObjectDeclaration && ((JetObjectDeclaration) containingClass).isClassObject()) { + JetElement classObjectClass = PsiTreeUtil.getParentOfType(containingClass, JetClassOrObject.class); + if (classObjectClass != null) { + containingClass = classObjectClass; + } + } + if (containingClass != null) { + return new LocalSearchScope(containingClass); + } } return super.getUseScope(); diff --git a/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPrivatePropertyInClassObjectUsages.0.kt b/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPrivatePropertyInClassObjectUsages.0.kt new file mode 100644 index 00000000000..f55f00acfec --- /dev/null +++ b/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPrivatePropertyInClassObjectUsages.0.kt @@ -0,0 +1,10 @@ +// PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetProperty +// OPTIONS: usages +class Outer { + val x = Outer.t + + class object { + private val t = 1 + } +} + diff --git a/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPrivatePropertyInClassObjectUsages.results.txt b/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPrivatePropertyInClassObjectUsages.results.txt new file mode 100644 index 00000000000..f62cc239193 --- /dev/null +++ b/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPrivatePropertyInClassObjectUsages.results.txt @@ -0,0 +1 @@ +Value read (4: 19) val x = Outer.t \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTestGenerated.java b/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTestGenerated.java index 2165304f922..748104f0c6f 100644 --- a/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTestGenerated.java @@ -702,6 +702,12 @@ public class JetFindUsagesTestGenerated extends AbstractJetFindUsagesTest { doTest(fileName); } + @TestMetadata("kotlinPrivatePropertyInClassObjectUsages.0.kt") + public void testKotlinPrivatePropertyInClassObjectUsages() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPrivatePropertyInClassObjectUsages.0.kt"); + doTest(fileName); + } + @TestMetadata("kotlinPrivatePropertyUsages.0.kt") public void testKotlinPrivatePropertyUsages() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPrivatePropertyUsages.0.kt");