summaryrefslogtreecommitdiffstats
path: root/document
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-12-11 12:27:17 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-12-11 12:27:17 +0000
commit69d048af7b548bf0a18527a9e27acbddf7c5e931 (patch)
treef2b0fef9a76c27364cb87698d9202a8a60000a8c /document
parentc330e6538addbe7f81e5728275e0d55207567ad1 (diff)
- Fail early if size does not match.
- Avoid reflection when you know the input.
Diffstat (limited to 'document')
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/MapFieldValue.java5
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/WeightedSet.java17
2 files changed, 16 insertions, 6 deletions
diff --git a/document/src/main/java/com/yahoo/document/datatypes/MapFieldValue.java b/document/src/main/java/com/yahoo/document/datatypes/MapFieldValue.java
index 4777622be1f..089b3a53d67 100644
--- a/document/src/main/java/com/yahoo/document/datatypes/MapFieldValue.java
+++ b/document/src/main/java/com/yahoo/document/datatypes/MapFieldValue.java
@@ -81,7 +81,10 @@ public class MapFieldValue<K extends FieldValue, V extends FieldValue> extends C
*/
public boolean equals(Object o) {
if (!(o instanceof MapFieldValue)) return false;
- return super.equals(o) && entrySet().equals(((MapFieldValue) o).entrySet());
+ MapFieldValue m = (MapFieldValue) o;
+ if (size() != m.size()) return false;
+ if ( ! super.equals(m)) return false;
+ return entrySet().equals(m.entrySet());
}
@Override
diff --git a/document/src/main/java/com/yahoo/document/datatypes/WeightedSet.java b/document/src/main/java/com/yahoo/document/datatypes/WeightedSet.java
index d505380523f..2d78deb9479 100644
--- a/document/src/main/java/com/yahoo/document/datatypes/WeightedSet.java
+++ b/document/src/main/java/com/yahoo/document/datatypes/WeightedSet.java
@@ -252,7 +252,10 @@ public final class WeightedSet<K extends FieldValue> extends CollectionFieldValu
*/
public boolean equals(Object o) {
if (!(o instanceof WeightedSet)) return false;
- return (super.equals(o) && map.equals(((WeightedSet<K>)o).map));
+ WeightedSet w = (WeightedSet) o;
+ if (size() != w.size()) return false;
+ if ( ! super.equals(o)) return false;
+ return map.equals(((WeightedSet)o).map);
}
/**
@@ -314,12 +317,12 @@ public final class WeightedSet<K extends FieldValue> extends CollectionFieldValu
*
*/
class WeightedSetWrapper extends MapFieldValue<K, IntegerFieldValue> {
- Map<Object, Integer> map = new HashMap<Object, Integer>();
- private DataType keyTypeVespa = getDataType().getKeyType();
- private DataType valTypeVespa = DataType.INT;
+ private final Map<Object, Integer> map;
+ private final DataType keyTypeVespa;
public WeightedSetWrapper(Map map, MapDataType dt) {
super(dt);
+ keyTypeVespa = getDataType().getKeyType();
this.map=map;
}
@@ -335,7 +338,11 @@ public final class WeightedSet<K extends FieldValue> extends CollectionFieldValu
private IntegerFieldValue wrapValue(Object o) {
if (o==null) return null;
- return (IntegerFieldValue)valTypeVespa.createFieldValue(o);
+ if (o instanceof IntegerFieldValue) return (IntegerFieldValue) o;
+ if (o instanceof Integer) return new IntegerFieldValue((Integer) o);
+ IntegerFieldValue value = new IntegerFieldValue();
+ value.assign(o);
+ return value;
}
@Override