From 9b2741f67493cdda98e59e1e95f7ff1be34821b7 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 11 Jan 2017 19:20:02 +0100 Subject: [PATCH] IG: don't warn on interfaces (IDEA-163830) --- ...entedButEqualsNotOverriddenInspection.java | 19 +++++----- .../InterfaceImplementingComparable.java | 25 +++++++++++++ .../Simple.java | 7 ++++ ...dButEqualsNotOverriddenInspectionTest.java | 35 +++++++++++++++++++ 4 files changed, 78 insertions(+), 8 deletions(-) create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/comparable_implemented_but_equals_not_overridden/InterfaceImplementingComparable.java create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/comparable_implemented_but_equals_not_overridden/Simple.java create mode 100644 plugins/InspectionGadgets/testsrc/com/siyeh/ig/bugs/ComparableImplementedButEqualsNotOverriddenInspectionTest.java diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/ComparableImplementedButEqualsNotOverriddenInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/ComparableImplementedButEqualsNotOverriddenInspection.java index d00bb3ae46c8..1686f5b5bb6a 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/ComparableImplementedButEqualsNotOverriddenInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/ComparableImplementedButEqualsNotOverriddenInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2006-2010 Bas Leijdekkers + * Copyright 2006-2017 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,7 +16,10 @@ package com.siyeh.ig.bugs; import com.intellij.openapi.project.Project; -import com.intellij.psi.*; +import com.intellij.psi.CommonClassNames; +import com.intellij.psi.JavaPsiFacade; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiMethod; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.MethodSignatureUtil; import com.siyeh.HardcodedMethodConstants; @@ -26,8 +29,7 @@ import com.siyeh.ig.BaseInspectionVisitor; import com.siyeh.ig.psiutils.MethodUtils; import org.jetbrains.annotations.NotNull; -public class ComparableImplementedButEqualsNotOverriddenInspection - extends BaseInspection { +public class ComparableImplementedButEqualsNotOverriddenInspection extends BaseInspection { @Override @NotNull @@ -48,14 +50,15 @@ public class ComparableImplementedButEqualsNotOverriddenInspection return new CompareToAndEqualsNotPairedVisitor(); } - private static class CompareToAndEqualsNotPairedVisitor - extends BaseInspectionVisitor { + private static class CompareToAndEqualsNotPairedVisitor extends BaseInspectionVisitor { @Override public void visitClass(PsiClass aClass) { super.visitClass(aClass); - final PsiMethod[] methods = aClass.findMethodsByName( - HardcodedMethodConstants.COMPARE_TO, false); + if (aClass.isInterface()) { + return; + } + final PsiMethod[] methods = aClass.findMethodsByName(HardcodedMethodConstants.COMPARE_TO, false); if (methods.length == 0) { return; } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/comparable_implemented_but_equals_not_overridden/InterfaceImplementingComparable.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/comparable_implemented_but_equals_not_overridden/InterfaceImplementingComparable.java new file mode 100644 index 000000000000..6cad825946a9 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/comparable_implemented_but_equals_not_overridden/InterfaceImplementingComparable.java @@ -0,0 +1,25 @@ +interface ComparableInterface extends Comparable { + int get(); +} + +interface ComparableImpl extends ComparableInterface { + @Override + default int compareTo(ComparableInterface o) { + return 0; + } +} + +abstract class Impl implements ComparableImpl { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Impl impl = (Impl) o; + return get() == impl.get(); + } + + @Override + public int hashCode() { + return get(); + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/comparable_implemented_but_equals_not_overridden/Simple.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/comparable_implemented_but_equals_not_overridden/Simple.java new file mode 100644 index 000000000000..51410a0f849f --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/comparable_implemented_but_equals_not_overridden/Simple.java @@ -0,0 +1,7 @@ +class Simple implements Comparable { + + public int compareTo(Simple other) { + return 0; + } + +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/bugs/ComparableImplementedButEqualsNotOverriddenInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/bugs/ComparableImplementedButEqualsNotOverriddenInspectionTest.java new file mode 100644 index 000000000000..11f392fbfd32 --- /dev/null +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/bugs/ComparableImplementedButEqualsNotOverriddenInspectionTest.java @@ -0,0 +1,35 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.siyeh.ig.bugs; + +import com.intellij.codeInspection.InspectionProfileEntry; +import com.siyeh.ig.LightInspectionTestCase; +import org.jetbrains.annotations.Nullable; + +/** + * @author Bas Leijdekkers + */ +public class ComparableImplementedButEqualsNotOverriddenInspectionTest extends LightInspectionTestCase { + + public void testInterfaceImplementingComparable() { doTest(); } + public void testSimple() { doTest(); } + + @Nullable + @Override + protected InspectionProfileEntry getInspection() { + return new ComparableImplementedButEqualsNotOverriddenInspection(); + } +} \ No newline at end of file