From b578f8484cbbde8c15964d4bbf80d777abd0a317 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Mon, 21 Nov 2016 15:36:02 +0100 Subject: [PATCH] IG: not a redundant method override when annotations have different parameters (IDEA-164186) --- .../RedundantMethodOverrideInspection.java | 40 +++---------------- .../RedundantMethodOverride.java | 17 ++++++++ 2 files changed, 23 insertions(+), 34 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/inheritance/RedundantMethodOverrideInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/inheritance/RedundantMethodOverrideInspection.java index f78c94e8c9db..ffa2f680feee 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/inheritance/RedundantMethodOverrideInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/inheritance/RedundantMethodOverrideInspection.java @@ -15,6 +15,7 @@ */ package com.siyeh.ig.inheritance; +import com.intellij.codeInsight.AnnotationUtil; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.openapi.project.Project; import com.intellij.psi.*; @@ -35,10 +36,6 @@ import com.siyeh.ig.psiutils.ParenthesesUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; - public class RedundantMethodOverrideInspection extends BaseInspection { @Override @@ -244,38 +241,13 @@ public class RedundantMethodOverrideInspection extends BaseInspection { else if (list2 == null) { return false; } - final Set annotations1 = new HashSet<>(); - for (PsiAnnotation annotation : list1.getAnnotations()) { - annotations1.add(annotation.getQualifiedName()); - } - final Set annotations2 = new HashSet<>(); - for (PsiAnnotation annotation : list2.getAnnotations()) { - annotations2.add(annotation.getQualifiedName()); - } - final Set uniques = disjunction(annotations1, annotations2); - uniques.remove(CommonClassNames.JAVA_LANG_OVERRIDE); - if (!uniques.isEmpty()) { + if (list1.hasModifierProperty(PsiModifier.STRICTFP) != list2.hasModifierProperty(PsiModifier.STRICTFP) || + list1.hasModifierProperty(PsiModifier.SYNCHRONIZED) != list2.hasModifierProperty(PsiModifier.SYNCHRONIZED) || + list1.hasModifierProperty(PsiModifier.PUBLIC) != list2.hasModifierProperty(PsiModifier.PUBLIC) || + list1.hasModifierProperty(PsiModifier.PROTECTED) != list2.hasModifierProperty(PsiModifier.PROTECTED)) { return false; } - return list1.hasModifierProperty(PsiModifier.STRICTFP) == list2.hasModifierProperty(PsiModifier.STRICTFP) && - list1.hasModifierProperty(PsiModifier.SYNCHRONIZED) == list2.hasModifierProperty(PsiModifier.SYNCHRONIZED) && - list1.hasModifierProperty(PsiModifier.PUBLIC) == list2.hasModifierProperty(PsiModifier.PUBLIC) && - list1.hasModifierProperty(PsiModifier.PROTECTED) == list2.hasModifierProperty(PsiModifier.PROTECTED); - } - - private static Set disjunction(Collection set1, Collection set2) { - final Set result = new HashSet<>(); - for (T t : set1) { - if (!set2.contains(t)) { - result.add(t); - } - } - for (T t : set2) { - if (!set1.contains(t)) { - result.add(t); - } - } - return result; + return AnnotationUtil.equal(list1.getAnnotations(), list2.getAnnotations()); } } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/redundant_method_override/RedundantMethodOverride.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/redundant_method_override/RedundantMethodOverride.java index 84fb1046988a..4ccc8caf7223 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/redundant_method_override/RedundantMethodOverride.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/redundant_method_override/RedundantMethodOverride.java @@ -128,3 +128,20 @@ class ComplexParameterEquivalent extends Params { return ((p1) + p2.hashCode()); } } +///////////////// +@interface Anno { + int value(); +} +class Annotations1 { + + @Anno(1) + void m() {} +} +class Annotations2 extends Annotations1{ + + @Anno(2) + @Override + void m() { + super.m(); + } +}