From fca78b553f28ed89fd311a5d706c9077abde8e5a Mon Sep 17 00:00:00 2001 From: "Anton.Makeev" Date: Tue, 17 Nov 2009 13:17:54 +0300 Subject: [PATCH] Override/Implement: correct inheritance order --- .../generation/OverrideImplementUtil.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java b/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java index 9e27436e977a..ca40b01cfdde 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java @@ -127,9 +127,18 @@ public class OverrideImplementUtil { Map result = new TreeMap(new Comparator() { // signatures should appear in the order of declaration public int compare(MethodSignature o1, MethodSignature o2) { - int offset1 = o1 instanceof MethodSignatureBackedByPsiMethod ? ((MethodSignatureBackedByPsiMethod)o1).getMethod().getTextOffset() : -1; - int offset2 = o2 instanceof MethodSignatureBackedByPsiMethod ? ((MethodSignatureBackedByPsiMethod)o2).getMethod().getTextOffset() : -2; - return offset1 - offset2; + if (o1 instanceof MethodSignatureBackedByPsiMethod && o2 instanceof MethodSignatureBackedByPsiMethod) { + PsiMethod m1 = ((MethodSignatureBackedByPsiMethod)o1).getMethod(); + PsiMethod m2 = ((MethodSignatureBackedByPsiMethod)o2).getMethod(); + PsiElement p1 = m1.getParent(); + PsiElement p2 = m2.getParent(); + if (p1 instanceof PsiClass && p2 instanceof PsiClass) { + if (((PsiClass)p1).isInheritor((PsiClass)p2, true)) return -1; + if (((PsiClass)p2).isInheritor((PsiClass)p1, true)) return 1; + } + return m1.getTextOffset() - m2.getTextOffset(); + } + return 0; } }); if (toImplement || aClass.isInterface()) {