Skip to content

Commit 79f4dfa

Browse files
committed
Prevent EqualsAvoidsNull from rewriting aString.equals(null) into null.equals(aString)
1 parent 6d04813 commit 79f4dfa

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

src/main/java/org/openrewrite/staticanalysis/EqualsAvoidsNullVisitor.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,16 @@ public J.MethodInvocation visitMethodInvocation(J.MethodInvocation method, P p)
4747
}
4848

4949
if ((STRING_EQUALS.matches(m) || (!Boolean.TRUE.equals(style.getIgnoreEqualsIgnoreCase()) && STRING_EQUALS_IGNORE_CASE.matches(m))) &&
50-
m.getArguments().get(0) instanceof J.Literal &&
51-
!(m.getSelect() instanceof J.Literal)) {
50+
m.getArguments().get(0) instanceof J.Literal &&
51+
m.getArguments().get(0).getType() != JavaType.Primitive.Null &&
52+
!(m.getSelect() instanceof J.Literal)) {
5253
Tree parent = getCursor().getParentTreeCursor().getValue();
5354
if (parent instanceof J.Binary) {
5455
J.Binary binary = (J.Binary) parent;
5556
if (binary.getOperator() == J.Binary.Type.And && binary.getLeft() instanceof J.Binary) {
5657
J.Binary potentialNullCheck = (J.Binary) binary.getLeft();
5758
if ((isNullLiteral(potentialNullCheck.getLeft()) && matchesSelect(potentialNullCheck.getRight(), m.getSelect())) ||
58-
(isNullLiteral(potentialNullCheck.getRight()) && matchesSelect(potentialNullCheck.getLeft(), m.getSelect()))) {
59+
(isNullLiteral(potentialNullCheck.getRight()) && matchesSelect(potentialNullCheck.getLeft(), m.getSelect()))) {
5960
doAfterVisit(new RemoveUnnecessaryNullCheck<>(binary));
6061
}
6162
}

src/test/java/org/openrewrite/staticanalysis/EqualsAvoidsNullTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,4 +84,19 @@ public class A {
8484
)
8585
);
8686
}
87+
88+
@Test
89+
void nullLiteral() {
90+
rewriteRun(
91+
//language=java
92+
java("""
93+
public class A {
94+
void foo(String s) {
95+
if(s.equals(null)) {
96+
}
97+
}
98+
}
99+
""")
100+
);
101+
}
87102
}

0 commit comments

Comments
 (0)