diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/CompareObjectsWithEqualsRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/CompareObjectsWithEqualsRule.java
index c801ab24a3..ea7d420dd8 100644
--- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/CompareObjectsWithEqualsRule.java
+++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/CompareObjectsWithEqualsRule.java
@@ -8,6 +8,8 @@ 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.ASTPrimaryPrefix;
+import net.sourceforge.pmd.lang.java.ast.ASTPrimarySuffix;
import net.sourceforge.pmd.lang.java.ast.ASTReferenceType;
import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule;
import net.sourceforge.pmd.lang.java.symboltable.VariableNameDeclaration;
@@ -50,6 +52,11 @@ public class CompareObjectsWithEqualsRule extends AbstractJavaRule {
return data;
}
+ // skip if either is part of a qualified name
+ if (isPartOfQualifiedName(node.jjtGetChild(0)) || isPartOfQualifiedName(node.jjtGetChild(1))) {
+ return data;
+ }
+
// skip static initializers... missing some cases here
if (!node.getParentsOfType(ASTInitializer.class).isEmpty()) {
return data;
@@ -83,4 +90,16 @@ public class CompareObjectsWithEqualsRule extends AbstractJavaRule {
return data;
}
+
+ /**
+ * Checks whether the given node contains a qualified name, consisting of one
+ * ASTPrimaryPrefix and one or more ASTPrimarySuffix nodes.
+ *
+ * @param node the node
+ * @return true
if it is a qualified name
+ */
+ private boolean isPartOfQualifiedName(Node node) {
+ return node.jjtGetChild(0) instanceof ASTPrimaryPrefix
+ && !node.findChildrenOfType(ASTPrimarySuffix.class).isEmpty();
+ }
}
diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/CompareObjectsWithEquals.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/CompareObjectsWithEquals.xml
index 5b116ae792..1f666c22fb 100644
--- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/CompareObjectsWithEquals.xml
+++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/CompareObjectsWithEquals.xml
@@ -150,4 +150,43 @@ public class Test {
}
]]>
+
+ #1128 CompareObjectsWithEquals False Positive comparing boolean (primitive) values
+ 0
+
+
diff --git a/src/site/markdown/overview/changelog.md b/src/site/markdown/overview/changelog.md
index a899a2c828..d23ac697ad 100644
--- a/src/site/markdown/overview/changelog.md
+++ b/src/site/markdown/overview/changelog.md
@@ -10,6 +10,7 @@
**Bugfixes:**
+* [#1128](https://sourceforge.net/p/pmd/bugs/1128/): CompareObjectsWithEquals False Positive comparing boolean (primitive) values
* [#1254](https://sourceforge.net/p/pmd/bugs/1254/): CPD run that worked in 5.1.2 fails in 5.1.3 with OOM
* [#1276](https://sourceforge.net/p/pmd/bugs/1276/): False positive in UnusedPrivateMethod with inner enum
* [#1280](https://sourceforge.net/p/pmd/bugs/1280/): False Positive in UnusedImports when import used in javadoc