From 2740fe6831f8363cdf2e205cfbd8852efdda797e Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 18 May 2017 11:29:55 +0300 Subject: [PATCH] include method refs into callees as content of classes was always included (IDEA-173002) --- .../call/CalleeMethodsTreeStructure.java | 6 ++++++ .../ide/hierarchy/call/MethodRef/A.java | 12 ++++++++++++ .../call/MethodRef/MethodRef_verification.xml | 18 ++++++++++++++++++ .../ide/hierarchy/JavaCallHierarchyTest.java | 17 ++++++++++++++++- 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/ide/hierarchy/call/MethodRef/A.java create mode 100644 java/java-tests/testData/ide/hierarchy/call/MethodRef/MethodRef_verification.xml diff --git a/java/java-impl/src/com/intellij/ide/hierarchy/call/CalleeMethodsTreeStructure.java b/java/java-impl/src/com/intellij/ide/hierarchy/call/CalleeMethodsTreeStructure.java index 745519edeeec..add554b90807 100644 --- a/java/java-impl/src/com/intellij/ide/hierarchy/call/CalleeMethodsTreeStructure.java +++ b/java/java-impl/src/com/intellij/ide/hierarchy/call/CalleeMethodsTreeStructure.java @@ -112,6 +112,12 @@ public final class CalleeMethodsTreeStructure extends HierarchyTreeStructure { methods.add(method); } } + else if (child instanceof PsiMethodReferenceExpression) { + PsiElement method = ((PsiMethodReferenceExpression)child).resolve(); + if (method instanceof PsiMethod) { + methods.add((PsiMethod)method); + } + } } } } diff --git a/java/java-tests/testData/ide/hierarchy/call/MethodRef/A.java b/java/java-tests/testData/ide/hierarchy/call/MethodRef/A.java new file mode 100644 index 000000000000..0f574562bacf --- /dev/null +++ b/java/java-tests/testData/ide/hierarchy/call/MethodRef/A.java @@ -0,0 +1,12 @@ + +import static java.util.Arrays.asList; + +class A { + public static String returnAString(String anotherString) { + return anotherString; + } + + public static void testMethod() { + asList("abcd").stream().map(A::returnAString); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/ide/hierarchy/call/MethodRef/MethodRef_verification.xml b/java/java-tests/testData/ide/hierarchy/call/MethodRef/MethodRef_verification.xml new file mode 100644 index 000000000000..8eba690474f9 --- /dev/null +++ b/java/java-tests/testData/ide/hierarchy/call/MethodRef/MethodRef_verification.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/java/java-tests/testSrc/com/intellij/ide/hierarchy/JavaCallHierarchyTest.java b/java/java-tests/testSrc/com/intellij/ide/hierarchy/JavaCallHierarchyTest.java index 482719d0f103..23ad57e06da5 100644 --- a/java/java-tests/testSrc/com/intellij/ide/hierarchy/JavaCallHierarchyTest.java +++ b/java/java-tests/testSrc/com/intellij/ide/hierarchy/JavaCallHierarchyTest.java @@ -2,13 +2,15 @@ package com.intellij.ide.hierarchy; import com.intellij.JavaTestUtil; import com.intellij.ide.hierarchy.actions.BrowseTypeHierarchyAction; +import com.intellij.ide.hierarchy.call.CalleeMethodsTreeStructure; import com.intellij.ide.hierarchy.call.CallerMethodsTreeStructure; import com.intellij.ide.highlighter.XmlFileType; -import com.intellij.openapi.util.Computable; +import com.intellij.openapi.projectRoots.Sdk; import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; import com.intellij.psi.search.ProjectScope; +import com.intellij.testFramework.IdeaTestUtil; import com.intellij.testFramework.TestActionEvent; import com.intellij.testFramework.codeInsight.hierarchy.HierarchyViewTestBase; @@ -58,6 +60,14 @@ public class JavaCallHierarchyTest extends HierarchyViewTestBase { doJavaCallTypeHierarchyTest("A", "A", "A.java", "B.java"); } + public void testMethodRef() throws Exception { + doHierarchyTest(() -> { + final PsiClass psiClass = JavaPsiFacade.getInstance(getProject()).findClass("A", ProjectScope.getProjectScope(getProject())); + final PsiMethod method = psiClass.findMethodsByName("testMethod", false) [0]; + return new CalleeMethodsTreeStructure(getProject(), method, HierarchyBrowserBaseEx.SCOPE_PROJECT); + }, "A.java"); + } + public void testAnonymous2() throws Exception { doJavaCallTypeHierarchyTest("A", "doIt", "A.java"); } @@ -69,4 +79,9 @@ public class JavaCallHierarchyTest extends HierarchyViewTestBase { action.beforeActionPerformedUpdate(e); assertTrue(e.getPresentation().isEnabled() && e.getPresentation().isVisible()); } + + @Override + protected Sdk getTestProjectJdk() { + return IdeaTestUtil.getMockJdk18(); + } }