From 252be38f2d0c15b0cf122a7ea5de4679e451340b Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Fri, 28 Oct 2016 12:42:54 +0300 Subject: [PATCH] javac ast indices: fix find usages of class members: can't find usages in getter's method call --- .../compiler/backwardRefs/CompilerReferenceReader.java | 2 +- .../testMethodUsageOnGetter/Bar.java | 7 +++++++ .../testMethodUsageOnGetter/Foo.java | 5 +++++ .../testMethodUsageOnGetter/FooFactory.java | 5 +++++ .../compiler/CompilerReferencesFindUsagesTest.java | 8 ++++++++ 5 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/compiler/compilerReferenceFindUsages/testMethodUsageOnGetter/Bar.java create mode 100644 java/java-tests/testData/compiler/compilerReferenceFindUsages/testMethodUsageOnGetter/Foo.java create mode 100644 java/java-tests/testData/compiler/compilerReferenceFindUsages/testMethodUsageOnGetter/FooFactory.java diff --git a/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceReader.java b/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceReader.java index 0accda716034..0b90cd79dde1 100644 --- a/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceReader.java +++ b/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceReader.java @@ -66,7 +66,7 @@ class CompilerReferenceReader { final LightRef.NamedLightRef[] hierarchy = getWholeHierarchy(hierarchyElement, checkBaseClassAmbiguity); if (hierarchy == null) return null; for (LightRef.NamedLightRef aClass : hierarchy) { - final LightRef overriderUsage = aClass.override(aClass.getName()); + final LightRef overriderUsage = ref.override(aClass.getName()); addUsages(overriderUsage, set); } return set; diff --git a/java/java-tests/testData/compiler/compilerReferenceFindUsages/testMethodUsageOnGetter/Bar.java b/java/java-tests/testData/compiler/compilerReferenceFindUsages/testMethodUsageOnGetter/Bar.java new file mode 100644 index 000000000000..cdda5ab9e03d --- /dev/null +++ b/java/java-tests/testData/compiler/compilerReferenceFindUsages/testMethodUsageOnGetter/Bar.java @@ -0,0 +1,7 @@ +class Bar { + + void m() { + FooFactory.getFoo().someMethod(); + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/compiler/compilerReferenceFindUsages/testMethodUsageOnGetter/Foo.java b/java/java-tests/testData/compiler/compilerReferenceFindUsages/testMethodUsageOnGetter/Foo.java new file mode 100644 index 000000000000..77db046989bf --- /dev/null +++ b/java/java-tests/testData/compiler/compilerReferenceFindUsages/testMethodUsageOnGetter/Foo.java @@ -0,0 +1,5 @@ +class Foo { + void someMethod() { + + } +} \ No newline at end of file diff --git a/java/java-tests/testData/compiler/compilerReferenceFindUsages/testMethodUsageOnGetter/FooFactory.java b/java/java-tests/testData/compiler/compilerReferenceFindUsages/testMethodUsageOnGetter/FooFactory.java new file mode 100644 index 000000000000..54e801af779f --- /dev/null +++ b/java/java-tests/testData/compiler/compilerReferenceFindUsages/testMethodUsageOnGetter/FooFactory.java @@ -0,0 +1,5 @@ +class FooFactory { + public static Foo getFoo() { + return new Foo(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/compiler/CompilerReferencesFindUsagesTest.java b/java/java-tests/testSrc/com/intellij/compiler/CompilerReferencesFindUsagesTest.java index 8977e1f40ca3..46b1776dd016 100644 --- a/java/java-tests/testSrc/com/intellij/compiler/CompilerReferencesFindUsagesTest.java +++ b/java/java-tests/testSrc/com/intellij/compiler/CompilerReferencesFindUsagesTest.java @@ -55,6 +55,14 @@ public class CompilerReferencesFindUsagesTest extends DaemonAnalyzerTestCase { return JavaTestUtil.getJavaTestDataPath() + "/compiler/compilerReferenceFindUsages/"; } + public void testMethodUsageOnGetter() throws Exception { + configureByFiles(getName(), getName() + "/Foo.java", getName() + "/FooFactory.java", getName() + "/Bar.java"); + PsiMethod methodToSearch = findClass("Foo").findMethodsByName("someMethod", false)[0]; + assertOneElement(MethodReferencesSearch.search(methodToSearch).findAll()); + myCompilerTester.rebuild(); + assertOneElement(MethodReferencesSearch.search(methodToSearch).findAll()); + } + public void testMethodUsageInClassHierarchy() throws Exception { configureByFiles(getName(), getName() + "/Bar.java", getName() + "/Foo.java"); PsiMethod methodToSearch = findClass("Foo").findMethodsByName("someMethod", false)[0];