diff --git a/java/java-impl/src/com/intellij/ide/hierarchy/method/MethodHierarchyTreeStructure.java b/java/java-impl/src/com/intellij/ide/hierarchy/method/MethodHierarchyTreeStructure.java index 06fc9b2bdc65..5524bf9a8b90 100644 --- a/java/java-impl/src/com/intellij/ide/hierarchy/method/MethodHierarchyTreeStructure.java +++ b/java/java-impl/src/com/intellij/ide/hierarchy/method/MethodHierarchyTreeStructure.java @@ -58,7 +58,7 @@ public final class MethodHierarchyTreeStructure extends HierarchyTreeStructure { while (true) { PsiMethod superMethod = ArrayUtil.getFirstElement(method.findSuperMethods()); if (superMethod == null || superClasses.contains(superMethod.getContainingClass())) break; - superClasses.addAll(findInheritanceChain(method.getContainingClass(), superMethod.getContainingClass())); + superClasses.addAll(0, findInheritanceChain(method.getContainingClass(), superMethod.getContainingClass())); method = superMethod; } return superClasses; diff --git a/java/java-tests/testData/ide/hierarchy/method/CyclicInheritance/CyclicInheritance_verification.xml b/java/java-tests/testData/ide/hierarchy/method/CyclicInheritance/CyclicInheritance_verification.xml index 0651507a8e47..2644e2457018 100644 --- a/java/java-tests/testData/ide/hierarchy/method/CyclicInheritance/CyclicInheritance_verification.xml +++ b/java/java-tests/testData/ide/hierarchy/method/CyclicInheritance/CyclicInheritance_verification.xml @@ -1,6 +1,6 @@ - + - + diff --git a/java/java-tests/testData/ide/hierarchy/method/ExtendsImplementsChain/ExtendsImplementsChain_verification.xml b/java/java-tests/testData/ide/hierarchy/method/ExtendsImplementsChain/ExtendsImplementsChain_verification.xml new file mode 100644 index 000000000000..301c3ed68f60 --- /dev/null +++ b/java/java-tests/testData/ide/hierarchy/method/ExtendsImplementsChain/ExtendsImplementsChain_verification.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/java/java-tests/testData/ide/hierarchy/method/ExtendsImplementsChain/X.java b/java/java-tests/testData/ide/hierarchy/method/ExtendsImplementsChain/X.java new file mode 100644 index 000000000000..2c22299afa86 --- /dev/null +++ b/java/java-tests/testData/ide/hierarchy/method/ExtendsImplementsChain/X.java @@ -0,0 +1,14 @@ +interface A { + public void foo(); +} +class B implements A { + @Override + public void foo() {} +} + +class C extends B { + @Override + public void foo() { + System.out.println("C.foo"); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/ide/hierarchy/JavaMethodHierarchyTest.java b/java/java-tests/testSrc/com/intellij/java/ide/hierarchy/JavaMethodHierarchyTest.java index 5dd1de33750a..fdc94f5d7eb5 100644 --- a/java/java-tests/testSrc/com/intellij/java/ide/hierarchy/JavaMethodHierarchyTest.java +++ b/java/java-tests/testSrc/com/intellij/java/ide/hierarchy/JavaMethodHierarchyTest.java @@ -72,6 +72,10 @@ public class JavaMethodHierarchyTest extends HierarchyViewTestBase { doTest("D", "foo", "X.java"); } + public void testExtendsImplementsChain() throws Exception { + doTest("C", "foo", "X.java"); + } + private void doTest(final String classFqn, final String methodName, final String... fileNames) throws Exception { doHierarchyTest(() -> { final PsiClass psiClass = JavaPsiFacade.getInstance(getProject()).findClass(classFqn, ProjectScope.getProjectScope(getProject()));