From 1a8eb72622bc41e875ea7f508bed650cce195afa Mon Sep 17 00:00:00 2001 From: LynnBroe <109954313+LynnBroe@users.noreply.github.com> Date: Wed, 3 May 2023 18:48:35 +0800 Subject: [PATCH] Fix 4457 --- .../OverrideBothEqualsAndHashcodeRule.java | 20 +++++++++++++++++++ .../xml/OverrideBothEqualsAndHashcode.xml | 19 ++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/OverrideBothEqualsAndHashcodeRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/OverrideBothEqualsAndHashcodeRule.java index 7e4dec9b58..3a875d25cc 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/OverrideBothEqualsAndHashcodeRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/OverrideBothEqualsAndHashcodeRule.java @@ -5,6 +5,7 @@ package net.sourceforge.pmd.lang.java.rule.errorprone; import net.sourceforge.pmd.lang.ast.Node; +import net.sourceforge.pmd.lang.java.ast.ASTAnonymousClassDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTFormalParameter; import net.sourceforge.pmd.lang.java.ast.ASTImplementsList; @@ -42,6 +43,25 @@ public class OverrideBothEqualsAndHashcodeRule extends AbstractJavaRule { return data; } + @Override + public Object visit(ASTAnonymousClassDeclaration node, Object data) { + if (node.isInterface()) { + return data; + } + super.visit(node, data); + if (!implementsComparable && containsEquals ^ containsHashCode) { + if (nodeFound == null) { + nodeFound = node; + } + addViolation(data, nodeFound); + } + implementsComparable = false; + containsEquals = false; + containsHashCode = false; + nodeFound = null; + return data; + } + @Override public Object visit(ASTImplementsList node, Object data) { implementsComparable = node.children().filter(child -> TypeTestUtil.isA(Comparable.class, (TypeNode) child)).nonEmpty(); diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/OverrideBothEqualsAndHashcode.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/OverrideBothEqualsAndHashcode.xml index 9e9681a674..06007a01ad 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/OverrideBothEqualsAndHashcode.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/OverrideBothEqualsAndHashcode.xml @@ -177,6 +177,25 @@ public class Foo implements C { public class Foo implements Runnable { public boolean equals(Object other) { return false; } public int compareTo(Object other) { return 42; } +} + ]]> + + + + [java]A false negative about OverrideBothEqualsAndHashcode #4457 + 2 +