summaryrefslogtreecommitdiffstats
path: root/document
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-12-11 05:59:07 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-12-11 05:59:07 +0000
commitbcce2928b8b60e9c8943fa7170fd502b39fb0e71 (patch)
treecf6e25986953090ee2e452b6cddfdca7317fc397 /document
parentc58647d4c2cc812e755aea99a00dd45c0a1f09cb (diff)
When using the ListWrapper a fieldvalue is created with reflection and assigned.
It is better to instead unwrap the value and compare.
Diffstat (limited to 'document')
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/Array.java19
1 files changed, 13 insertions, 6 deletions
diff --git a/document/src/main/java/com/yahoo/document/datatypes/Array.java b/document/src/main/java/com/yahoo/document/datatypes/Array.java
index 660e58efa25..ee97bbc6669 100644
--- a/document/src/main/java/com/yahoo/document/datatypes/Array.java
+++ b/document/src/main/java/com/yahoo/document/datatypes/Array.java
@@ -131,19 +131,26 @@ public final class Array<T extends FieldValue> extends CollectionFieldValue<T> i
return hashCode;
}
+ private boolean equalsWithListWrapper(List<? extends FieldValue> a, ListWrapper<? extends FieldValue> b) {
+ for (int i = 0; i < a.size(); i++) {
+ if ( ! b.myvalues.get(i).equals(a.get(i).getWrappedValue()) ) return false;
+ }
+ return true;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Array)) return false;
if (!super.equals(o)) return false;
Array a = (Array) o;
- // Compare independent of container used.
- Iterator it1 = values.iterator();
- Iterator it2 = a.values.iterator();
- while (it1.hasNext() && it2.hasNext()) {
- if (!it1.next().equals(it2.next())) return false;
+ if (values.size() != a.values.size()) return false;
+ if (values instanceof ListWrapper && !(a.values instanceof ListWrapper)) {
+ return equalsWithListWrapper(a.values, (ListWrapper<? extends FieldValue>) values);
+ } else if (a.values instanceof ListWrapper && !(values instanceof ListWrapper)) {
+ return equalsWithListWrapper(values, (ListWrapper<? extends FieldValue>) a.values);
}
- return !(it1.hasNext() || it2.hasNext());
+ return values.equals(a.values);
}
// List implementation