diff --git a/pmd/etc/changelog.txt b/pmd/etc/changelog.txt index 14c7bf5aac..91e350e643 100644 --- a/pmd/etc/changelog.txt +++ b/pmd/etc/changelog.txt @@ -5,6 +5,7 @@ Fixed bug 913: SignatureDeclareThrowsException is raised twice Fixed bug 1012: False positive: Useless parentheses. Fixed bug 1020: Parsing Error Fixed bug 1026: PMD doesn't handle 'value =' in SuppressWarnings annotation +Fixed bug 1028: False-positive: Compare objects with equals for Enums Fixed bug 1037: Facing a showstopper issue in PMD Report Class (report listeners) Fixed bug 1043: node.getEndLine() always returns 0 (ECMAscript) Fixed bug 1044: Unknown option: -excludemarker diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/java/rule/design/CompareObjectsWithEqualsRule.java b/pmd/src/main/java/net/sourceforge/pmd/lang/java/rule/design/CompareObjectsWithEqualsRule.java index a858ea32de..d0503b38ab 100644 --- a/pmd/src/main/java/net/sourceforge/pmd/lang/java/rule/design/CompareObjectsWithEqualsRule.java +++ b/pmd/src/main/java/net/sourceforge/pmd/lang/java/rule/design/CompareObjectsWithEqualsRule.java @@ -5,6 +5,7 @@ import net.sourceforge.pmd.lang.java.ast.ASTAllocationExpression; import net.sourceforge.pmd.lang.java.ast.ASTEqualityExpression; import net.sourceforge.pmd.lang.java.ast.ASTInitializer; import net.sourceforge.pmd.lang.java.ast.ASTName; +import net.sourceforge.pmd.lang.java.ast.ASTReferenceType; import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; import net.sourceforge.pmd.lang.java.symboltable.VariableNameDeclaration; @@ -65,6 +66,14 @@ public class CompareObjectsWithEqualsRule extends AbstractJavaRule { } if (nd0.isReferenceType() && nd1.isReferenceType()) { + + ASTReferenceType type0 = (ASTReferenceType)((Node) nd0.getAccessNodeParent()).jjtGetChild(0).jjtGetChild(0); + ASTReferenceType type1 = (ASTReferenceType)((Node) nd1.getAccessNodeParent()).jjtGetChild(0).jjtGetChild(0); + // skip, if it is an enum + if (type0.getType() != null && type0.getType().equals(type1.getType()) && type0.getType().isEnum()) { + return data; + } + addViolation(data, node); } } diff --git a/pmd/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/CompareObjectsWithEquals.xml b/pmd/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/CompareObjectsWithEquals.xml index 4c054f4ae0..5b116ae792 100644 --- a/pmd/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/CompareObjectsWithEquals.xml +++ b/pmd/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/CompareObjectsWithEquals.xml @@ -136,5 +136,18 @@ public class Foo { } ]]> - + + #1028 False-positive: Compare objects with equals for Enums + 0 + +