summaryrefslogtreecommitdiffstats
path: root/vespajlib/src/main/java/com/yahoo
diff options
context:
space:
mode:
authorHaavard <havardpe@yahoo-inc.com>2017-03-01 11:30:47 +0000
committerHaavard <havardpe@yahoo-inc.com>2017-03-01 11:30:47 +0000
commit68d862fcd0ba3b9834b7fe66f3ec928fc8ba62b6 (patch)
treeb8e61a98d8ffcc579a0bb2024c069ebb169937ca /vespajlib/src/main/java/com/yahoo
parentf1179b5e605a528e561b9ef98b41422b0a603dee (diff)
handle null-pointers (Data/String/Utf8) as Nix values
[VESPA-6609]
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo')
-rw-r--r--vespajlib/src/main/java/com/yahoo/slime/DataValue.java9
-rw-r--r--vespajlib/src/main/java/com/yahoo/slime/Slime.java6
-rw-r--r--vespajlib/src/main/java/com/yahoo/slime/StringValue.java9
-rw-r--r--vespajlib/src/main/java/com/yahoo/slime/Utf8Value.java9
-rw-r--r--vespajlib/src/main/java/com/yahoo/slime/Value.java18
5 files changed, 36 insertions, 15 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/slime/DataValue.java b/vespajlib/src/main/java/com/yahoo/slime/DataValue.java
index abaeac52245..ab2dfb61e3b 100644
--- a/vespajlib/src/main/java/com/yahoo/slime/DataValue.java
+++ b/vespajlib/src/main/java/com/yahoo/slime/DataValue.java
@@ -3,7 +3,14 @@ package com.yahoo.slime;
final class DataValue extends Value {
private final byte[] value;
- public DataValue(byte[] value) { this.value = value; }
+ private DataValue(byte[] value) { this.value = value; }
+ public static Value create(byte[] value) {
+ if (value == null) {
+ return NixValue.instance();
+ } else {
+ return new DataValue(value);
+ }
+ }
public final Type type() { return Type.DATA; }
public final byte[] asData() { return this.value; }
public final void accept(Visitor v) { v.visitData(value); }
diff --git a/vespajlib/src/main/java/com/yahoo/slime/Slime.java b/vespajlib/src/main/java/com/yahoo/slime/Slime.java
index 387a81a7655..b4c2cdc8aeb 100644
--- a/vespajlib/src/main/java/com/yahoo/slime/Slime.java
+++ b/vespajlib/src/main/java/com/yahoo/slime/Slime.java
@@ -91,7 +91,7 @@ public final class Slime
* @param str the actual string for the new value
**/
public Cursor setString(String str) {
- root = new StringValue(str);
+ root = StringValue.create(str);
return root;
}
@@ -100,7 +100,7 @@ public final class Slime
* @param utf8 the actual string (encoded as UTF-8 data) for the new value
**/
public Cursor setString(byte[] utf8) {
- root = new Utf8Value(utf8);
+ root = Utf8Value.create(utf8);
return root;
}
@@ -109,7 +109,7 @@ public final class Slime
* @param data the actual data to be put into the new value.
**/
public Cursor setData(byte[] data) {
- root = new DataValue(data);
+ root = DataValue.create(data);
return root;
}
diff --git a/vespajlib/src/main/java/com/yahoo/slime/StringValue.java b/vespajlib/src/main/java/com/yahoo/slime/StringValue.java
index a5b72578d5d..a8a605e174a 100644
--- a/vespajlib/src/main/java/com/yahoo/slime/StringValue.java
+++ b/vespajlib/src/main/java/com/yahoo/slime/StringValue.java
@@ -8,7 +8,14 @@ package com.yahoo.slime;
final class StringValue extends Value {
private final String value;
private byte[] utf8;
- public StringValue(String value) { this.value = value; }
+ private StringValue(String value) { this.value = value; }
+ public static Value create(String value) {
+ if (value == null) {
+ return NixValue.instance();
+ } else {
+ return new StringValue(value);
+ }
+ }
public final Type type() { return Type.STRING; }
public final String asString() { return this.value; }
public final byte[] asUtf8() {
diff --git a/vespajlib/src/main/java/com/yahoo/slime/Utf8Value.java b/vespajlib/src/main/java/com/yahoo/slime/Utf8Value.java
index 6aa95310b86..d8fd629f46c 100644
--- a/vespajlib/src/main/java/com/yahoo/slime/Utf8Value.java
+++ b/vespajlib/src/main/java/com/yahoo/slime/Utf8Value.java
@@ -9,7 +9,14 @@ package com.yahoo.slime;
final class Utf8Value extends Value {
private final byte[] value;
private String string;
- public Utf8Value(byte[] value) { this.value = value; }
+ private Utf8Value(byte[] value) { this.value = value; }
+ public static Value create(byte[] value) {
+ if (value == null) {
+ return NixValue.instance();
+ } else {
+ return new Utf8Value(value);
+ }
+ }
public final Type type() { return Type.STRING; }
public final String asString() {
if (string == null) {
diff --git a/vespajlib/src/main/java/com/yahoo/slime/Value.java b/vespajlib/src/main/java/com/yahoo/slime/Value.java
index d86bf8607bd..7bbdecff0fc 100644
--- a/vespajlib/src/main/java/com/yahoo/slime/Value.java
+++ b/vespajlib/src/main/java/com/yahoo/slime/Value.java
@@ -43,9 +43,9 @@ abstract class Value implements Cursor {
public final Cursor addBool(boolean bit) { return addLeaf(BoolValue.instance(bit)); }
public final Cursor addLong(long l) { return addLeaf(new LongValue(l)); }
public final Cursor addDouble(double d) { return addLeaf(new DoubleValue(d)); }
- public final Cursor addString(String str) { return addLeaf(new StringValue(str)); }
- public final Cursor addString(byte[] utf8) { return addLeaf(new Utf8Value(utf8)); }
- public final Cursor addData(byte[] data) { return addLeaf(new DataValue(data)); }
+ public final Cursor addString(String str) { return addLeaf(StringValue.create(str)); }
+ public final Cursor addString(byte[] utf8) { return addLeaf(Utf8Value.create(utf8)); }
+ public final Cursor addData(byte[] data) { return addLeaf(DataValue.create(data)); }
protected Cursor setLeaf(int sym, Value value) { return NixValue.invalid(); }
public Cursor setArray(int sym) { return NixValue.invalid(); }
@@ -55,9 +55,9 @@ abstract class Value implements Cursor {
public final Cursor setBool(int sym, boolean bit) { return setLeaf(sym, BoolValue.instance(bit)); }
public final Cursor setLong(int sym, long l) { return setLeaf(sym, new LongValue(l)); }
public final Cursor setDouble(int sym, double d) { return setLeaf(sym, new DoubleValue(d)); }
- public final Cursor setString(int sym, String str) { return setLeaf(sym, new StringValue(str)); }
- public final Cursor setString(int sym, byte[] utf8) { return setLeaf(sym, new Utf8Value(utf8)); }
- public final Cursor setData(int sym, byte[] data) { return setLeaf(sym, new DataValue(data)); }
+ public final Cursor setString(int sym, String str) { return setLeaf(sym, StringValue.create(str)); }
+ public final Cursor setString(int sym, byte[] utf8) { return setLeaf(sym, Utf8Value.create(utf8)); }
+ public final Cursor setData(int sym, byte[] data) { return setLeaf(sym, DataValue.create(data)); }
protected Cursor setLeaf(String name, Value value) { return NixValue.invalid(); }
public Cursor setArray(String name) { return NixValue.invalid(); }
@@ -67,9 +67,9 @@ abstract class Value implements Cursor {
public final Cursor setBool(String name, boolean bit) { return setLeaf(name, BoolValue.instance(bit)); }
public final Cursor setLong(String name, long l) { return setLeaf(name, new LongValue(l)); }
public final Cursor setDouble(String name, double d) { return setLeaf(name, new DoubleValue(d)); }
- public final Cursor setString(String name, String str) { return setLeaf(name, new StringValue(str)); }
- public final Cursor setString(String name, byte[] utf8) { return setLeaf(name, new Utf8Value(utf8)); }
- public final Cursor setData(String name, byte[] data) { return setLeaf(name, new DataValue(data)); }
+ public final Cursor setString(String name, String str) { return setLeaf(name, StringValue.create(str)); }
+ public final Cursor setString(String name, byte[] utf8) { return setLeaf(name, Utf8Value.create(utf8)); }
+ public final Cursor setData(String name, byte[] data) { return setLeaf(name, DataValue.create(data)); }
public final String toString() {
try {