From b727e0d7c8b1f5c4c493462b4f165c1b92ec7900 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Fri, 23 Dec 2016 09:36:55 +0100 Subject: [PATCH] IG: don't report static equals() methods as covariant (IDEA-165075) --- .../src/com/siyeh/ig/bugs/CovariantEqualsInspection.java | 6 ++++-- .../src/inspectionDescriptions/CovariantEquals.html | 6 +++--- .../igtest/bugs/covariant_equals/CovariantEquals.java | 9 +++++++++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/CovariantEqualsInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/CovariantEqualsInspection.java index 9c4217f3c5bb..f5e8f5d2838a 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/CovariantEqualsInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/CovariantEqualsInspection.java @@ -50,7 +50,9 @@ public class CovariantEqualsInspection extends BaseInspection { @Override public void visitMethod(@NotNull PsiMethod method) { - // note: no call to super + if (method.hasModifierProperty(PsiModifier.STATIC)) { + return; + } final String name = method.getName(); if (!HardcodedMethodConstants.EQUALS.equals(name)) { return; @@ -74,7 +76,7 @@ public class CovariantEqualsInspection extends BaseInspection { return; } } - if (SuperMethodsSearch.search(method, null, true, false).findFirst() != null) { + if (MethodUtils.hasSuper(method)) { return; } registerMethodError(method); diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/CovariantEquals.html b/plugins/InspectionGadgets/src/inspectionDescriptions/CovariantEquals.html index 817d82923420..d3f59353eb34 100644 --- a/plugins/InspectionGadgets/src/inspectionDescriptions/CovariantEquals.html +++ b/plugins/InspectionGadgets/src/inspectionDescriptions/CovariantEquals.html @@ -1,8 +1,8 @@ -Reports a class having a equals() -method taking an argument other than java.lang.Object, if the class does not have a equals() method -which does take java.lang.Object as its argument. Normally, this is a mistake. +Reports equals() methods taking an argument type other than java.lang.Object. +Only reports if the containing class does not have another equals() method +which does take java.lang.Object as its argument type. Normally, this is a mistake.

diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/covariant_equals/CovariantEquals.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/covariant_equals/CovariantEquals.java index 8c53ae024b66..ceba7e37958a 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/covariant_equals/CovariantEquals.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/covariant_equals/CovariantEquals.java @@ -33,4 +33,13 @@ class E { boolean equals(E e) { return false; } +} +abstract class Condition { + static Condition equals(String value) { + return new Condition() { + // some implementation here + }; + } + + // more abstract methods } \ No newline at end of file