mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java-dfa] IDEA-364300 Better contracts for Objects.equals and Arrays.equals
GitOrigin-RevId: 78742f689c964ca8784709ad6f63ee5071995a56
This commit is contained in:
committed by
intellij-monorepo-bot
parent
b466c60859
commit
b488983f95
+40
@@ -0,0 +1,40 @@
|
||||
import java.util.Objects;
|
||||
|
||||
record Test2(String x, String y) {
|
||||
static void test2(Test2 test2) {
|
||||
if (Objects.equals(test2.getSomething2(), test2.y())) {
|
||||
if(<warning descr="Condition 'Objects.equals(test2.x, test2.getSomething3())' is always 'true'">Objects.equals(test2.x, test2.getSomething3())</warning>) {
|
||||
|
||||
|
||||
}
|
||||
if (<warning descr="Condition 'Objects.equals(test2.getSomething(), test2.y)' is always 'true'">Objects.equals(test2.getSomething(), test2.y)</warning>) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void test(Test2 test2) {
|
||||
if (test2.getSomething2().equals(test2.y())) {
|
||||
if(<warning descr="Condition 'test2.x.equals(test2.getSomething3())' is always 'true'">test2.x.equals(test2.getSomething3())</warning>) { //it works
|
||||
|
||||
|
||||
}
|
||||
if (<warning descr="Condition 'test2.getSomething().equals(test2.y)' is always 'true'">test2.getSomething().equals(test2.y)</warning>) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public String getSomething() {
|
||||
return x;
|
||||
}
|
||||
public String getSomething3() {
|
||||
return y;
|
||||
}
|
||||
public String getSomething2() {
|
||||
return x;
|
||||
}
|
||||
}
|
||||
@@ -305,7 +305,7 @@ public class ManyObjectEquals {
|
||||
Objects.equals(test107, test.test107) &&
|
||||
Objects.equals(test108, test.test108) &&
|
||||
Objects.equals(test109, test.test109) &&
|
||||
Objects.equals(test101, test.test101) &&
|
||||
<warning descr="Condition 'Objects.equals(test101, test.test101)' is always 'true'">Objects.equals(test101, test.test101)</warning> &&
|
||||
Objects.equals(test111, test.test111) &&
|
||||
Objects.equals(test112, test.test112) &&
|
||||
Objects.equals(test113, test.test113) &&
|
||||
|
||||
@@ -305,7 +305,7 @@ public class ManyObjectEquals2 {
|
||||
Objects.equals(this.test107, test.test107) &&
|
||||
Objects.equals(this.test108, test.test108) &&
|
||||
Objects.equals(this.test109, test.test109) &&
|
||||
Objects.equals(this.test101, test.test101) &&
|
||||
<warning descr="Condition 'Objects.equals(this.test101, test.test101)' is always 'true'">Objects.equals(this.test101, test.test101)</warning> &&
|
||||
Objects.equals(this.test111, test.test111) &&
|
||||
Objects.equals(this.test112, test.test112) &&
|
||||
Objects.equals(this.test113, test.test113) &&
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
import java.util.*;
|
||||
|
||||
class A {
|
||||
void testEqualsString(String s, String s2) {
|
||||
if (s.equals(s2)) {
|
||||
if (<warning descr="Condition 'Objects.equals(s, s2)' is always 'true'">Objects.equals(s, s2)</warning>) {}
|
||||
} else {
|
||||
if (<warning descr="Condition 'Objects.equals(s, s2)' is always 'false'">Objects.equals(s, s2)</warning>) {}
|
||||
}
|
||||
if (Objects.equals(s, s2)) {
|
||||
if (<warning descr="Condition 's.equals(s2)' is always 'true'">s.equals(s2)</warning>) {}
|
||||
if (<warning descr="Condition 's.length() == s2.length()' is always 'true'">s.length() == s2.length()</warning>) {}
|
||||
} else {
|
||||
if (<warning descr="Condition 's.equals(s2)' is always 'false'">s.equals(s2)</warning>) {}
|
||||
if (s.length() == s2.length()) {}
|
||||
}
|
||||
}
|
||||
|
||||
void testEqualsCls(Class<?> s, Class<?> s2) {
|
||||
if (s.equals(s2)) {
|
||||
if (<warning descr="Condition 'Objects.equals(s, s2)' is always 'true'">Objects.equals(s, s2)</warning>) {}
|
||||
} else {
|
||||
if (<warning descr="Condition 'Objects.equals(s, s2)' is always 'false'">Objects.equals(s, s2)</warning>) {}
|
||||
}
|
||||
if (Objects.equals(s, s2)) {
|
||||
if (<warning descr="Condition 's.equals(s2)' is always 'true'">s.equals(s2)</warning>) {}
|
||||
} else {
|
||||
if (<warning descr="Condition 's.equals(s2)' is always 'false'">s.equals(s2)</warning>) {}
|
||||
}
|
||||
}
|
||||
|
||||
void testEqualsList(List<?> s, List<?> s2) {
|
||||
if (s.equals(s2)) {
|
||||
if (Objects.equals(s, s2)) {}
|
||||
} else {
|
||||
if (Objects.equals(s, s2)) {}
|
||||
}
|
||||
if (Objects.equals(s, s2)) {
|
||||
if (s.equals(s2)) {}
|
||||
} else {
|
||||
if (s.equals(s2)) {}
|
||||
}
|
||||
}
|
||||
|
||||
void testEqualsArrays(String[] s, String[] s2) {
|
||||
if (s.equals(s2)) {
|
||||
if (<warning descr="Condition 'Objects.equals(s, s2)' is always 'true'">Objects.equals(s, s2)</warning>) {}
|
||||
} else {
|
||||
if (<warning descr="Condition 'Objects.equals(s, s2)' is always 'false'">Objects.equals(s, s2)</warning>) {}
|
||||
}
|
||||
if (Objects.equals(s, s2)) {
|
||||
if (<warning descr="Condition 's.equals(s2)' is always 'true'">s.equals(s2)</warning>) {}
|
||||
if (<warning descr="Condition 's.length == s2.length' is always 'true'">s.length == s2.length</warning>) {}
|
||||
} else {
|
||||
if (<warning descr="Condition 's.equals(s2)' is always 'false'">s.equals(s2)</warning>) {}
|
||||
if (s.length == s2.length) {}
|
||||
}
|
||||
}
|
||||
|
||||
void testEqualsArrays2(String[] s, String[] s2) {
|
||||
if (s.equals(s2)) {
|
||||
if (<warning descr="Condition 'Arrays.equals(s, s2)' is always 'true'">Arrays.equals(s, s2)</warning>) {}
|
||||
} else {
|
||||
if (Arrays.equals(s, s2)) {}
|
||||
}
|
||||
if (Arrays.equals(s, s2)) {
|
||||
if (s.equals(s2)) {}
|
||||
if (<warning descr="Condition 's.length == s2.length' is always 'true'">s.length == s2.length</warning>) {}
|
||||
} else {
|
||||
if (<warning descr="Condition 's.equals(s2)' is always 'false'">s.equals(s2)</warning>) {}
|
||||
if (s.length == s2.length) {}
|
||||
}
|
||||
}
|
||||
|
||||
void testEqualsArrays3(String[] s, String[] s2) {
|
||||
if (s.equals(s2)) {
|
||||
if (<warning descr="Condition 'Arrays.deepEquals(s, s2)' is always 'true'">Arrays.deepEquals(s, s2)</warning>) {}
|
||||
} else {
|
||||
if (Arrays.deepEquals(s, s2)) {}
|
||||
}
|
||||
if (Arrays.deepEquals(s, s2)) {
|
||||
if (s.equals(s2)) {}
|
||||
if (<warning descr="Condition 's.length == s2.length' is always 'true'">s.length == s2.length</warning>) {}
|
||||
} else {
|
||||
if (<warning descr="Condition 's.equals(s2)' is always 'false'">s.equals(s2)</warning>) {}
|
||||
if (s.length == s2.length) {}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user