diff --git a/baseline-error-prone/src/main/java/com/palantir/baseline/errorprone/CardinalityEqualsZero.java b/baseline-error-prone/src/main/java/com/palantir/baseline/errorprone/CardinalityEqualsZero.java index 778bd25f7..0507c5f5a 100644 --- a/baseline-error-prone/src/main/java/com/palantir/baseline/errorprone/CardinalityEqualsZero.java +++ b/baseline-error-prone/src/main/java/com/palantir/baseline/errorprone/CardinalityEqualsZero.java @@ -31,7 +31,9 @@ import com.sun.source.tree.ExpressionTree; import com.sun.source.tree.IdentifierTree; import com.sun.source.tree.MemberSelectTree; +import com.sun.source.tree.Tree.Kind; import java.util.Collection; +import java.util.Objects; import java.util.Optional; import org.immutables.value.Value.Immutable; @@ -58,8 +60,11 @@ public Description matchBinary(BinaryTree tree, VisitorState state) { EqualsZeroExpression equalsZeroExpression = maybeEqualsZeroExpression.get(); ExpressionTree operand = equalsZeroExpression.operand(); - ExpressionTree collectionInstance = ASTHelpers.getReceiver(operand); + if (!Objects.equals(operand.getKind(), Kind.METHOD_INVOCATION)) { + return Description.NO_MATCH; + } + ExpressionTree collectionInstance = ASTHelpers.getReceiver(operand); if (collectionInstance == null || isExpressionThis(collectionInstance)) { return Description.NO_MATCH; } diff --git a/baseline-error-prone/src/test/java/com/palantir/baseline/errorprone/CardinalityEqualsZeroTest.java b/baseline-error-prone/src/test/java/com/palantir/baseline/errorprone/CardinalityEqualsZeroTest.java index 3742f0440..ee89eef68 100644 --- a/baseline-error-prone/src/test/java/com/palantir/baseline/errorprone/CardinalityEqualsZeroTest.java +++ b/baseline-error-prone/src/test/java/com/palantir/baseline/errorprone/CardinalityEqualsZeroTest.java @@ -266,6 +266,28 @@ public void test_size_on_non_collection() { .doTest(); } + @Test + public void test_equals_on_non_collection() { + fix().addInputLines( + "TestNonCollection.java", + "class TestNonCollection {", + " public int size() {", + " return 0;", + " }", + " public boolean foo(String key) {", + " String current = \"x\";", + " int comparisonResult = current.compareTo(key);", + " if (comparisonResult == 0) {", + " return true;", + " } else {", + " return false;", + " }", + " }", + "}") + .expectUnchanged() + .doTest(); + } + @Test public void test_qualified_this() { fix().addInputLines( diff --git a/changelog/@unreleased/pr-2544.v2.yml b/changelog/@unreleased/pr-2544.v2.yml new file mode 100644 index 000000000..1e4a05ea4 --- /dev/null +++ b/changelog/@unreleased/pr-2544.v2.yml @@ -0,0 +1,5 @@ +type: fix +fix: + description: 'Fix #2543 CardinalityEqualsZero equality comparison check' + links: + - https://github.com/palantir/gradle-baseline/pull/2544