Skip to content

Commit 7406133

Browse files
As Java 17 forbids it, don't use reflection to compare java types in the recursive comparison, use equals (even if not overridden).
Compare Atomic types embedded value recursively (value is not accessed by reflection) Fix assertj#2466 assertj#2450
1 parent 8fa8010 commit 7406133

File tree

9 files changed

+910
-120
lines changed

9 files changed

+910
-120
lines changed

src/main/java/org/assertj/core/api/recursive/comparison/DualValue.java

Lines changed: 91 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@
3030
import java.util.OptionalLong;
3131
import java.util.SortedMap;
3232
import java.util.SortedSet;
33+
import java.util.concurrent.atomic.AtomicBoolean;
34+
import java.util.concurrent.atomic.AtomicInteger;
35+
import java.util.concurrent.atomic.AtomicIntegerArray;
36+
import java.util.concurrent.atomic.AtomicLong;
37+
import java.util.concurrent.atomic.AtomicLongArray;
38+
import java.util.concurrent.atomic.AtomicReference;
39+
import java.util.concurrent.atomic.AtomicReferenceArray;
3340
import java.util.stream.Stream;
3441

3542
// logically immutable
@@ -90,8 +97,20 @@ public String getFieldName() {
9097
}
9198

9299
public boolean isActualJavaType() {
93-
if (actual == null) return false;
94-
return actual.getClass().getName().startsWith("java.");
100+
return isJavaType(actual);
101+
}
102+
103+
public boolean isExpectedJavaType() {
104+
return isJavaType(expected);
105+
}
106+
107+
public boolean hasSomeJavaTypeValue() {
108+
return isActualJavaType() || isExpectedJavaType();
109+
}
110+
111+
private static boolean isJavaType(Object o) {
112+
if (o == null) return false;
113+
return o.getClass().getName().startsWith("java.");
95114
}
96115

97116
public boolean isExpectedFieldAnArray() {
@@ -145,6 +164,62 @@ public boolean isExpectedFieldAnOptional() {
145164
return expected instanceof Optional;
146165
}
147166

167+
public boolean isExpectedFieldAnAtomicReference() {
168+
return expected instanceof AtomicReference;
169+
}
170+
171+
public boolean isActualFieldAnAtomicReference() {
172+
return actual instanceof AtomicReference;
173+
}
174+
175+
public boolean isExpectedFieldAnAtomicReferenceArray() {
176+
return expected instanceof AtomicReferenceArray;
177+
}
178+
179+
public boolean isActualFieldAnAtomicReferenceArray() {
180+
return actual instanceof AtomicReferenceArray;
181+
}
182+
183+
public boolean isExpectedFieldAnAtomicInteger() {
184+
return expected instanceof AtomicInteger;
185+
}
186+
187+
public boolean isActualFieldAnAtomicInteger() {
188+
return actual instanceof AtomicInteger;
189+
}
190+
191+
public boolean isExpectedFieldAnAtomicIntegerArray() {
192+
return expected instanceof AtomicIntegerArray;
193+
}
194+
195+
public boolean isActualFieldAnAtomicIntegerArray() {
196+
return actual instanceof AtomicIntegerArray;
197+
}
198+
199+
public boolean isExpectedFieldAnAtomicLong() {
200+
return expected instanceof AtomicLong;
201+
}
202+
203+
public boolean isActualFieldAnAtomicLong() {
204+
return actual instanceof AtomicLong;
205+
}
206+
207+
public boolean isExpectedFieldAnAtomicLongArray() {
208+
return expected instanceof AtomicLongArray;
209+
}
210+
211+
public boolean isActualFieldAnAtomicLongArray() {
212+
return actual instanceof AtomicLongArray;
213+
}
214+
215+
public boolean isExpectedFieldAnAtomicBoolean() {
216+
return expected instanceof AtomicBoolean;
217+
}
218+
219+
public boolean isActualFieldAnAtomicBoolean() {
220+
return actual instanceof AtomicBoolean;
221+
}
222+
148223
public boolean isActualFieldAMap() {
149224
return actual instanceof Map;
150225
}
@@ -220,9 +295,15 @@ public boolean isActualAnEnum() {
220295
}
221296

222297
public boolean hasNoContainerValues() {
223-
return !isContainer(actual) && !isContainer(expected);
298+
return !isContainer(actual) && !isExpectedAContainer();
299+
}
300+
301+
// TODO test
302+
public boolean isExpectedAContainer() {
303+
return isContainer(expected);
224304
}
225305

306+
226307
public boolean hasNoNullValues() {
227308
return actual != null && expected != null;
228309
}
@@ -231,6 +312,13 @@ private static boolean isContainer(Object o) {
231312
return o instanceof Iterable ||
232313
o instanceof Map ||
233314
o instanceof Optional ||
315+
o instanceof AtomicReference ||
316+
o instanceof AtomicReferenceArray ||
317+
o instanceof AtomicBoolean ||
318+
o instanceof AtomicInteger ||
319+
o instanceof AtomicIntegerArray ||
320+
o instanceof AtomicLong ||
321+
o instanceof AtomicLongArray ||
234322
isArray(o);
235323
}
236324

0 commit comments

Comments
 (0)