From 2d97a336b99fa43fd0daa7430f20292148f66200 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Mon, 4 Jul 2016 21:00:31 +0200 Subject: [PATCH] IG: don't warn on covariant equals() when there is a super method --- .../ig/bugs/CovariantEqualsInspection.java | 23 +++++---------- .../covariant_equals/CovariantEquals.java | 28 +++++++++++++++++++ 2 files changed, 35 insertions(+), 16 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 d80b0b341616..9310fee55930 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/CovariantEqualsInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/CovariantEqualsInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2016 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,10 +16,12 @@ package com.siyeh.ig.bugs; import com.intellij.psi.*; +import com.intellij.psi.search.searches.SuperMethodsSearch; import com.siyeh.HardcodedMethodConstants; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; +import com.siyeh.ig.psiutils.MethodUtils; import com.siyeh.ig.psiutils.TypeUtils; import org.jetbrains.annotations.NotNull; @@ -71,25 +73,14 @@ public class CovariantEqualsInspection extends BaseInspection { } final PsiMethod[] methods = aClass.getMethods(); for (PsiMethod method1 : methods) { - if (isNonVariantEquals(method1)) { + if (MethodUtils.isEquals(method1)) { return; } } + if (SuperMethodsSearch.search(method, null, true, false).findFirst() != null) { + return; + } registerMethodError(method); } - - private static boolean isNonVariantEquals(PsiMethod method) { - final String name = method.getName(); - if (!HardcodedMethodConstants.EQUALS.equals(name)) { - return false; - } - final PsiParameterList paramList = method.getParameterList(); - final PsiParameter[] parameters = paramList.getParameters(); - if (parameters.length != 1) { - return false; - } - final PsiType argType = parameters[0].getType(); - return TypeUtils.isJavaLangObject(argType); - } } } \ No newline at end of file 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 bc7b5a1e40c0..53d950c98cbd 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 @@ -1,3 +1,31 @@ interface I { boolean equals(I i); +} +class A { + + public boolean equals(A a) { + return false; + } +} +class B extends A { + + @Override + public boolean equals(A a) { + return super.equals(a); + } +} +class C { + public boolean equals(C c) { + return false; + } + + public boolean equals(Object o) { + return true; + } +} +class D implements I { + @Override + public boolean equals(I i) { + return false; + } } \ No newline at end of file