aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/aggregation/AverageAggregationResult.java2
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/aggregation/CountAggregationResult.java2
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/aggregation/ExpressionCountAggregationResult.java3
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/aggregation/FS4Hit.java2
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/aggregation/HitsAggregationResult.java4
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/aggregation/MaxAggregationResult.java2
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/aggregation/MinAggregationResult.java2
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/aggregation/StandardDeviationAggregationResult.java4
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/aggregation/SumAggregationResult.java2
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/aggregation/VdsHit.java2
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/aggregation/XorAggregationResult.java2
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/expression/AggregationRefNode.java7
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/expression/AttributeNode.java6
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/expression/ConstantNode.java2
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/expression/FloatResultNode.java10
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/expression/Int16ResultNode.java4
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/expression/Int32ResultNode.java7
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/expression/Int8ResultNode.java4
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/expression/IntegerResultNode.java10
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/expression/RawResultNode.java2
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/expression/StringResultNode.java6
-rw-r--r--vespajlib/src/main/java/com/yahoo/vespa/objects/Identifiable.java75
22 files changed, 80 insertions, 80 deletions
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/AverageAggregationResult.java b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/AverageAggregationResult.java
index 5dc7cc1b634..62201db88f4 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/AverageAggregationResult.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/AverageAggregationResult.java
@@ -16,7 +16,7 @@ import com.yahoo.vespa.objects.Serializer;
*/
public class AverageAggregationResult extends AggregationResult {
- public static final int classId = registerClass(0x4000 + 85, AverageAggregationResult.class);
+ public static final int classId = registerClass(0x4000 + 85, AverageAggregationResult.class, AverageAggregationResult::new);
private NumericResultNode sum;
private long count;
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/CountAggregationResult.java b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/CountAggregationResult.java
index 8a4fb7cdae8..3fa8db5f9db 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/CountAggregationResult.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/CountAggregationResult.java
@@ -15,7 +15,7 @@ import com.yahoo.vespa.objects.Serializer;
*/
public class CountAggregationResult extends AggregationResult {
- public static final int classId = registerClass(0x4000 + 81, CountAggregationResult.class);
+ public static final int classId = registerClass(0x4000 + 81, CountAggregationResult.class, CountAggregationResult::new);
private long count = 0;
/** Constructs an empty result node. <b>NOTE:</b> This instance is broken until non-optional member data is set. */
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/ExpressionCountAggregationResult.java b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/ExpressionCountAggregationResult.java
index a02acbef281..9242e01076c 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/ExpressionCountAggregationResult.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/ExpressionCountAggregationResult.java
@@ -15,7 +15,7 @@ import com.yahoo.vespa.objects.Serializer;
*/
public class ExpressionCountAggregationResult extends AggregationResult {
- public static final int classId = registerClass(0x4000 + 88, ExpressionCountAggregationResult.class);
+ public static final int classId = registerClass(0x4000 + 88, ExpressionCountAggregationResult.class, ExpressionCountAggregationResult::new);
private static final int UNDEFINED = -1;
// The unique count estimator
@@ -29,7 +29,6 @@ public class ExpressionCountAggregationResult extends AggregationResult {
/** Constructor used for deserialization. Will be instantiated with a default sketch. */
- @SuppressWarnings("UnusedDeclaration")
public ExpressionCountAggregationResult() {
this(new SparseSketch(), new HyperLogLogEstimator());
}
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/FS4Hit.java b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/FS4Hit.java
index 9b79d8d0f7b..4a29c98ad89 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/FS4Hit.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/FS4Hit.java
@@ -13,7 +13,7 @@ import com.yahoo.vespa.objects.Serializer;
*/
public class FS4Hit extends Hit {
- public static final int classId = registerClass(0x4000 + 95, FS4Hit.class); // shared with c++
+ public static final int classId = registerClass(0x4000 + 95, FS4Hit.class, FS4Hit::new); // shared with c++
private int path = 0;
private GlobalId globalId = new GlobalId(new byte[GlobalId.LENGTH]);
private int distributionKey = -1;
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/HitsAggregationResult.java b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/HitsAggregationResult.java
index d6df04b2122..c737add21c0 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/HitsAggregationResult.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/HitsAggregationResult.java
@@ -7,8 +7,6 @@ import com.yahoo.text.Utf8;
import com.yahoo.vespa.objects.*;
import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
import java.util.List;
/**
@@ -20,7 +18,7 @@ import java.util.List;
*/
public class HitsAggregationResult extends AggregationResult {
- public static final int classId = registerClass(0x4000 + 87, HitsAggregationResult.class);
+ public static final int classId = registerClass(0x4000 + 87, HitsAggregationResult.class, HitsAggregationResult::new);
private String summaryClass = "default";
private int maxHits = -1;
private List<Hit> hits = new ArrayList<>();
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/MaxAggregationResult.java b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/MaxAggregationResult.java
index 0b347185f09..6d9b50b52b1 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/MaxAggregationResult.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/MaxAggregationResult.java
@@ -15,7 +15,7 @@ import com.yahoo.vespa.objects.Serializer;
*/
public class MaxAggregationResult extends AggregationResult {
- public static final int classId = registerClass(0x4000 + 83, MaxAggregationResult.class);
+ public static final int classId = registerClass(0x4000 + 83, MaxAggregationResult.class, MaxAggregationResult::new);
private SingleResultNode max;
/**
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/MinAggregationResult.java b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/MinAggregationResult.java
index 0ae5587da69..1ffedb9aedc 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/MinAggregationResult.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/MinAggregationResult.java
@@ -15,7 +15,7 @@ import com.yahoo.vespa.objects.Serializer;
*/
public class MinAggregationResult extends AggregationResult {
- public static final int classId = registerClass(0x4000 + 84, MinAggregationResult.class);
+ public static final int classId = registerClass(0x4000 + 84, MinAggregationResult.class, MinAggregationResult::new);
private SingleResultNode min;
/**
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/StandardDeviationAggregationResult.java b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/StandardDeviationAggregationResult.java
index c6ece6a2525..91716f00750 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/StandardDeviationAggregationResult.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/StandardDeviationAggregationResult.java
@@ -11,7 +11,7 @@ import com.yahoo.vespa.objects.Serializer;
* @author bjorncs
*/
public class StandardDeviationAggregationResult extends AggregationResult {
- public static final int classId = registerClass(0x4000 + 89, StandardDeviationAggregationResult.class);
+ public static final int classId = registerClass(0x4000 + 89, StandardDeviationAggregationResult.class, StandardDeviationAggregationResult::new);
private long count;
private double sum;
@@ -56,7 +56,7 @@ public class StandardDeviationAggregationResult extends AggregationResult {
@Override
protected boolean equalsAggregation(AggregationResult obj) {
StandardDeviationAggregationResult other = (StandardDeviationAggregationResult) obj;
- return count == this.count && sum == other.sum && sumOfSquared == other.sumOfSquared;
+ return count == other.count && sum == other.sum && sumOfSquared == other.sumOfSquared;
}
@Override
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/SumAggregationResult.java b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/SumAggregationResult.java
index 2a78e5fde36..1f0dd0b90af 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/SumAggregationResult.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/SumAggregationResult.java
@@ -15,7 +15,7 @@ import com.yahoo.vespa.objects.Serializer;
*/
public class SumAggregationResult extends AggregationResult {
- public static final int classId = registerClass(0x4000 + 82, SumAggregationResult.class);
+ public static final int classId = registerClass(0x4000 + 82, SumAggregationResult.class, SumAggregationResult::new);
private SingleResultNode sum;
/**
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/VdsHit.java b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/VdsHit.java
index 6f130137008..5f14b6a937f 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/VdsHit.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/VdsHit.java
@@ -8,7 +8,7 @@ import com.yahoo.vespa.objects.Serializer;
public class VdsHit extends Hit {
- public static final int classId = registerClass(0x4000 + 96, VdsHit.class);
+ public static final int classId = registerClass(0x4000 + 96, VdsHit.class, VdsHit::new);
private String docId = "";
private RawData summary = new RawData();
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/XorAggregationResult.java b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/XorAggregationResult.java
index fea59debd86..beb03160a05 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/aggregation/XorAggregationResult.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/aggregation/XorAggregationResult.java
@@ -15,7 +15,7 @@ import com.yahoo.vespa.objects.Serializer;
*/
public class XorAggregationResult extends AggregationResult {
- public static final int classId = registerClass(0x4000 + 86, XorAggregationResult.class);
+ public static final int classId = registerClass(0x4000 + 86, XorAggregationResult.class, XorAggregationResult::new);
private long xor = 0;
/**
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/expression/AggregationRefNode.java b/searchlib/src/main/java/com/yahoo/searchlib/expression/AggregationRefNode.java
index cad08090a9e..96bed811281 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/expression/AggregationRefNode.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/expression/AggregationRefNode.java
@@ -14,14 +14,11 @@ import com.yahoo.vespa.objects.Serializer;
*/
public class AggregationRefNode extends ExpressionNode {
- public static final int classId = registerClass(0x4000 + 142, AggregationRefNode.class);
+ public static final int classId = registerClass(0x4000 + 142, AggregationRefNode.class, AggregationRefNode::new);
private AggregationResult result = null;
private int index = - 1;
- @SuppressWarnings("UnusedDeclaration")
- public AggregationRefNode() {
- // Used by deserializer.
- }
+ public AggregationRefNode() { }
public AggregationRefNode(int index) {
this.index = index;
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/expression/AttributeNode.java b/searchlib/src/main/java/com/yahoo/searchlib/expression/AttributeNode.java
index 2aa6997646f..e5dac72938f 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/expression/AttributeNode.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/expression/AttributeNode.java
@@ -13,15 +13,13 @@ import com.yahoo.vespa.objects.Serializer;
*/
public class AttributeNode extends FunctionNode {
- public static final int classId = registerClass(0x4000 + 55, AttributeNode.class);
+ public static final int classId = registerClass(0x4000 + 55, AttributeNode.class, AttributeNode::new);
private String attribute;
/**
* Constructs an empty result node. <b>NOTE:</b> This instance is broken until non-optional member data is set.
*/
- public AttributeNode() {
-
- }
+ public AttributeNode() { }
/**
* Constructs an instance of this class with given attribute name.
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/expression/ConstantNode.java b/searchlib/src/main/java/com/yahoo/searchlib/expression/ConstantNode.java
index f04b4db52a9..0ef268aad69 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/expression/ConstantNode.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/expression/ConstantNode.java
@@ -13,7 +13,7 @@ import com.yahoo.vespa.objects.Serializer;
*/
public class ConstantNode extends ExpressionNode {
- public static final int classId = registerClass(0x4000 + 49, ConstantNode.class);
+ public static final int classId = registerClass(0x4000 + 49, ConstantNode.class, ConstantNode::new);
private ResultNode value = null;
public ConstantNode() {}
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/expression/FloatResultNode.java b/searchlib/src/main/java/com/yahoo/searchlib/expression/FloatResultNode.java
index 8c1c357ab14..782e8edd661 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/expression/FloatResultNode.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/expression/FloatResultNode.java
@@ -16,9 +16,9 @@ import java.nio.ByteBuffer;
public class FloatResultNode extends NumericResultNode {
// The global class identifier shared with C++.
- public static final int classId = registerClass(0x4000 + 52, FloatResultNode.class);
- private static FloatResultNode negativeInfinity = new FloatResultNode(Double.NEGATIVE_INFINITY);
- private static FloatResultNode positiveInfinity = new FloatResultNode(Double.POSITIVE_INFINITY);
+ public static final int classId = registerClass(0x4000 + 52, FloatResultNode.class, FloatResultNode::new);
+ private static final FloatResultNode negativeInfinity = new FloatResultNode(Double.NEGATIVE_INFINITY);
+ private static final FloatResultNode positiveInfinity = new FloatResultNode(Double.POSITIVE_INFINITY);
// The numeric value of this node.
private double value;
@@ -129,7 +129,7 @@ public class FloatResultNode extends NumericResultNode {
@Override
public Object getNumber() {
- return Double.valueOf(value);
+ return value;
}
@Override
@@ -141,7 +141,7 @@ public class FloatResultNode extends NumericResultNode {
if (Double.isNaN(b)) {
return 1;
} else {
- return (value < b) ? -1 : (value > b) ? 1 : 0;
+ return Double.compare(value, b);
}
}
}
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/expression/Int16ResultNode.java b/searchlib/src/main/java/com/yahoo/searchlib/expression/Int16ResultNode.java
index ed110344ba1..e3fdcf5ff51 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/expression/Int16ResultNode.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/expression/Int16ResultNode.java
@@ -15,7 +15,7 @@ import java.nio.ByteBuffer;
*/
public class Int16ResultNode extends NumericResultNode {
- public static final int classId = registerClass(0x4000 + 105, Int16ResultNode.class);
+ public static final int classId = registerClass(0x4000 + 105, Int16ResultNode.class, Int16ResultNode::new);
private short value = 0;
@SuppressWarnings("UnusedDeclaration")
@@ -122,7 +122,7 @@ public class Int16ResultNode extends NumericResultNode {
@Override
public Object getNumber() {
- return Integer.valueOf(value);
+ return (int) value;
}
@Override
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/expression/Int32ResultNode.java b/searchlib/src/main/java/com/yahoo/searchlib/expression/Int32ResultNode.java
index c9f0f6c3c36..520cfb0c3d7 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/expression/Int32ResultNode.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/expression/Int32ResultNode.java
@@ -15,13 +15,10 @@ import java.nio.ByteBuffer;
*/
public class Int32ResultNode extends NumericResultNode {
- public static final int classId = registerClass(0x4000 + 106, Int32ResultNode.class);
+ public static final int classId = registerClass(0x4000 + 106, Int32ResultNode.class, Int32ResultNode::new);
private int value = 0;
- @SuppressWarnings("UnusedDeclaration")
- public Int32ResultNode() {
- // used by deserializer
- }
+ public Int32ResultNode() { }
/**
* Constructs an instance of this class with given value.
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/expression/Int8ResultNode.java b/searchlib/src/main/java/com/yahoo/searchlib/expression/Int8ResultNode.java
index 981414a473d..05b844bd996 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/expression/Int8ResultNode.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/expression/Int8ResultNode.java
@@ -15,7 +15,7 @@ import java.nio.ByteBuffer;
*/
public class Int8ResultNode extends NumericResultNode {
- public static final int classId = registerClass(0x4000 + 104, Int8ResultNode.class);
+ public static final int classId = registerClass(0x4000 + 104, Int8ResultNode.class, Int8ResultNode::new);
private byte value = 0;
public Int8ResultNode() {
@@ -120,7 +120,7 @@ public class Int8ResultNode extends NumericResultNode {
@Override
public Object getNumber() {
- return Integer.valueOf(value);
+ return (int) value;
}
@Override
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/expression/IntegerResultNode.java b/searchlib/src/main/java/com/yahoo/searchlib/expression/IntegerResultNode.java
index 135c8129d96..f968a31f54c 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/expression/IntegerResultNode.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/expression/IntegerResultNode.java
@@ -15,9 +15,9 @@ import java.nio.ByteBuffer;
*/
public class IntegerResultNode extends NumericResultNode {
- public static final int classId = registerClass(0x4000 + 107, IntegerResultNode.class);
- private static IntegerResultNode negativeInfinity = new IntegerResultNode(Long.MIN_VALUE);
- private static IntegerResultNode positiveInfinity = new IntegerResultNode(Long.MAX_VALUE);
+ public static final int classId = registerClass(0x4000 + 107, IntegerResultNode.class, IntegerResultNode::new);
+ private static final IntegerResultNode negativeInfinity = new IntegerResultNode(Long.MIN_VALUE);
+ private static final IntegerResultNode positiveInfinity = new IntegerResultNode(Long.MAX_VALUE);
private long value;
/**
@@ -138,13 +138,13 @@ public class IntegerResultNode extends NumericResultNode {
@Override
public Object getNumber() {
- return Long.valueOf(value);
+ return value;
}
@Override
protected int onCmp(ResultNode rhs) {
long value = rhs.getInteger();
- return (this.value < value) ? -1 : (this.value > value) ? 1 : 0;
+ return Long.compare(this.value, value);
}
@Override
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/expression/RawResultNode.java b/searchlib/src/main/java/com/yahoo/searchlib/expression/RawResultNode.java
index 78f5d529d90..3e951ae8e46 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/expression/RawResultNode.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/expression/RawResultNode.java
@@ -17,7 +17,7 @@ import java.util.Arrays;
public class RawResultNode extends SingleResultNode {
// The global class identifier shared with C++.
- public static final int classId = registerClass(0x4000 + 54, RawResultNode.class);
+ public static final int classId = registerClass(0x4000 + 54, RawResultNode.class, RawResultNode::new);
private static final RawResultNode negativeInfinity = new RawResultNode();
private static final PositiveInfinityResultNode positiveInfinity = new PositiveInfinityResultNode();
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/expression/StringResultNode.java b/searchlib/src/main/java/com/yahoo/searchlib/expression/StringResultNode.java
index 20f204c5b61..ffd73bf2944 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/expression/StringResultNode.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/expression/StringResultNode.java
@@ -17,7 +17,7 @@ import java.util.Arrays;
public class StringResultNode extends SingleResultNode {
// The global class identifier shared with C++.
- public static final int classId = registerClass(0x4000 + 53, StringResultNode.class);
+ public static final int classId = registerClass(0x4000 + 53, StringResultNode.class, StringResultNode::new);
private static final StringResultNode negativeInfinity = new StringResultNode("");
private static final PositiveInfinityResultNode positiveInfinity = new PositiveInfinityResultNode();
@@ -92,7 +92,7 @@ public class StringResultNode extends SingleResultNode {
@Override
public long getInteger() {
try {
- return Integer.valueOf(getString());
+ return Integer.parseInt(getString());
} catch (java.lang.NumberFormatException e) {
return 0;
}
@@ -101,7 +101,7 @@ public class StringResultNode extends SingleResultNode {
@Override
public double getFloat() {
try {
- return Double.valueOf(getString());
+ return Double.parseDouble(getString());
} catch (java.lang.NumberFormatException e) {
return 0;
}
diff --git a/vespajlib/src/main/java/com/yahoo/vespa/objects/Identifiable.java b/vespajlib/src/main/java/com/yahoo/vespa/objects/Identifiable.java
index 1ddc9dcfb9e..44cf3e06c20 100644
--- a/vespajlib/src/main/java/com/yahoo/vespa/objects/Identifiable.java
+++ b/vespajlib/src/main/java/com/yahoo/vespa/objects/Identifiable.java
@@ -7,6 +7,7 @@ import com.yahoo.text.Utf8;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
+import java.util.function.Supplier;
/**
* The base class to do cross-language serialization and deserialization of complete object structures without
@@ -155,10 +156,9 @@ public class Identifiable extends Selectable implements Cloneable {
@Override
public boolean equals(Object obj) {
- if (!(obj instanceof Identifiable)) {
+ if (!(obj instanceof Identifiable rhs)) {
return false;
}
- Identifiable rhs = (Identifiable)obj;
return (getClassId() == rhs.getClassId());
}
@@ -172,7 +172,6 @@ public class Identifiable extends Selectable implements Cloneable {
/**
* Registers the given class specification for the given identifier in the class registry. This method returns the
* supplied identifier, so that subclasses can declare a static classId member like so:
- *
* <code>public static int classId = registerClass(&lt;id&gt;, &lt;ClassName&gt;.class);</code>
*
* @param id the class identifier to register with
@@ -186,6 +185,14 @@ public class Identifiable extends Selectable implements Cloneable {
registry.add(id, spec);
return id;
}
+ protected static int registerClass(int id, Class<? extends Identifiable> spec, Supplier<? extends Identifiable> creator) {
+ if (registry == null) {
+ registry = new Registry();
+ }
+ registry.add(id, spec, creator);
+ return id;
+ }
+
/**
* Deserializes a single {@link Identifiable} object from the given byte buffer. The object itself may perform
@@ -282,7 +289,7 @@ public class Identifiable extends Selectable implements Cloneable {
private static class Registry {
// The map from class id to class descriptor.
- private HashMap<Integer, Pair<Class<? extends Identifiable>, Constructor<? extends Identifiable>>> typeMap =
+ private final HashMap<Integer, Pair<Class<? extends Identifiable>, Supplier<? extends Identifiable>>> typeMap =
new HashMap<>();
/**
@@ -293,18 +300,22 @@ public class Identifiable extends Selectable implements Cloneable {
* @throws IllegalArgumentException Thrown if two classes attempt to register with the same identifier.
*/
private void add(int id, Class<? extends Identifiable> spec) {
+
+ CreateFromConstructor creator;
+ try {
+ creator = new CreateFromConstructor(spec.getConstructor());
+ } catch (NoSuchMethodException e) {
+ creator = null;
+ }
+ add(id, spec, creator);
+ }
+ private void add(int id, Class<? extends Identifiable> spec, Supplier<? extends Identifiable> construct) {
Class<?> old = get(id);
if (old == null) {
- Constructor<? extends Identifiable> constructor;
- try {
- constructor = spec.getConstructor();
- } catch (NoSuchMethodException e) {
- constructor = null;
- }
- typeMap.put(id, new Pair<Class<? extends Identifiable>, Constructor<? extends Identifiable>>(spec, constructor));
+ typeMap.put(id, new Pair<Class<? extends Identifiable>, Supplier<? extends Identifiable>>(spec, construct));
} else if (!spec.equals(old)) {
- throw new IllegalArgumentException("Can not register class '" + spec.toString() + "' with id " + id +
- ", because it already maps to class '" + old.toString() + "'.");
+ throw new IllegalArgumentException("Can not register class '" + spec + "' with id " + id +
+ ", because it already maps to class '" + old + "'.");
}
}
@@ -315,42 +326,42 @@ public class Identifiable extends Selectable implements Cloneable {
* @return The class specification, may be null.
*/
private Class<? extends Identifiable> get(int id) {
- Pair<Class<? extends Identifiable>, Constructor<? extends Identifiable>> pair = typeMap.get(id);
+ var pair = typeMap.get(id);
return (pair != null) ? pair.getFirst() : null;
}
/**
- * Creates an instance of the class mapped to by the given identifier. This method proxies {@link
- * #createFromClass(Constructor)}.
- *
+ * Creates an instance of the class mapped to by the given identifier.
* @param id The id of the class to create.
* @return The instantiated object.
*/
private Identifiable createFromId(int id) {
- Pair<Class<? extends Identifiable>, Constructor<? extends Identifiable>> pair = typeMap.get(id);
- return createFromClass((pair != null) ? pair.getSecond() : null);
+ var pair = typeMap.get(id);
+ return (pair != null) ? pair.getSecond().get() : null;
}
/**
* Creates an instance of a given class specification. All instantiation-type exceptions are consumed and
* wrapped inside a runtime exception so that calling methods can let this propagate without declaring them
* thrown.
- *
- * @param spec The class to instantiate.
- * @return The instantiated object.
- * @throws IllegalArgumentException Thrown if instantiation failed.
*/
- private Identifiable createFromClass(Constructor<? extends Identifiable> spec) {
- Identifiable obj = null;
- if (spec != null) {
- try {
- obj = spec.newInstance();
- } catch (InvocationTargetException | InstantiationException | IllegalAccessException e) {
- throw new IllegalArgumentException("Failed to create object from class '" +
- spec.getName() + "'.", e);
+ private static class CreateFromConstructor implements Supplier<Identifiable> {
+ private final Constructor<? extends Identifiable> constructor;
+ CreateFromConstructor(Constructor<? extends Identifiable> constructor) {
+ this.constructor = constructor;
+ }
+ public Identifiable get() {
+ Identifiable obj = null;
+ if (constructor != null) {
+ try {
+ obj = constructor.newInstance();
+ } catch (InvocationTargetException | InstantiationException | IllegalAccessException e) {
+ throw new IllegalArgumentException("Failed to create object from class '" +
+ constructor.getName() + "'.", e);
+ }
}
+ return obj;
}
- return obj;
}
}