From 501b7d99ce1fd1410b008c64b1c8eacc6f98efed Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Fri, 23 Dec 2016 12:18:54 +0100 Subject: [PATCH] IDEA-165372 (Incorrect suggestion to remove "super" qualifier) --- .../UnnecessarySuperQualifierInspection.java | 3 +- .../UnnecessarySuperQualifier.java | 32 ++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/UnnecessarySuperQualifierInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/UnnecessarySuperQualifierInspection.java index 856f1eaeeeb6..053db4ef731d 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/UnnecessarySuperQualifierInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/UnnecessarySuperQualifierInspection.java @@ -26,6 +26,7 @@ import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; import com.siyeh.ig.InspectionGadgetsFix; +import com.siyeh.ig.psiutils.MethodUtils; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -129,7 +130,7 @@ public class UnnecessarySuperQualifierInspection extends BaseInspection implemen private static boolean hasUnnecessarySuperQualifier(PsiMethodCallExpression methodCallExpression) { final PsiMethod superMethod = methodCallExpression.resolveMethod(); - if (superMethod == null) { + if (superMethod == null || MethodUtils.isOverridden(superMethod)) { return false; } // check that super.m() and m() resolve to the same method diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/style/unnecessary_super_qualifier/UnnecessarySuperQualifier.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/style/unnecessary_super_qualifier/UnnecessarySuperQualifier.java index 845617ffad5b..cf95d20f13ad 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/style/unnecessary_super_qualifier/UnnecessarySuperQualifier.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/style/unnecessary_super_qualifier/UnnecessarySuperQualifier.java @@ -20,7 +20,7 @@ public class UnnecessarySuperQualifier { private static class Up extends Base { void foo() { - super.test("asfd"); + super.test("asfd"); System.out.println(super.field); } } @@ -80,4 +80,34 @@ public class UnnecessarySuperQualifier { return String.valueOf(super.f); } } +} +class BugSuper { + public void close() { + System.out.println("BugSuper.close()"); + } + public static void main(String[] arg) { + try { + BugSuper bug = new Next2(); + bug.close(); + } catch(Throwable t) { + System.out.println("ERROR: " + t); + t.printStackTrace(); + } + } +} + +class Next1 extends BugSuper { + public void closeall() { + System.out.println("Next1.closeall()"); + // IDEA Intellij is suggesting: Remove unnecessary "super" qualifier. + // Try to remove yourself :-) + super.close(); + } +} + +class Next2 extends Next1 { + public void close() { + System.out.println("Next2.close()"); + closeall(); + } } \ No newline at end of file