Skip to content

Commit 7b82f57

Browse files
committed
Array converter logic simplified
Signed-off-by: David Kral <[email protected]>
1 parent 35990d6 commit 7b82f57

File tree

9 files changed

+168
-139
lines changed

9 files changed

+168
-139
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package io.helidon.json.binding.converters;
2+
3+
import java.math.BigInteger;
4+
import java.math.BigInteger;
5+
6+
import io.helidon.common.GenericType;
7+
import io.helidon.common.Weight;
8+
import io.helidon.common.Weighted;
9+
import io.helidon.json.binding.JsonConverter;
10+
import io.helidon.json.processor.Generator;
11+
import io.helidon.json.processor.JsonParser;
12+
import io.helidon.service.registry.Service;
13+
14+
@Service.Singleton
15+
@Weight(Weighted.DEFAULT_WEIGHT - 10)
16+
class BigIntegerConverter implements JsonConverter<BigInteger> {
17+
18+
private static final GenericType<BigInteger> TYPE = GenericType.create(BigInteger.class);
19+
20+
@Override
21+
public BigInteger deserialize(JsonParser parser) {
22+
if (parser.currentByte() == '\"') {
23+
return new BigInteger(parser.readString());
24+
} else {
25+
return BigInteger.valueOf(parser.readAsLong());
26+
}
27+
}
28+
29+
@Override
30+
public void serialize(Generator generator, BigInteger instance, boolean writeNulls) {
31+
generator.write(instance.toString());
32+
}
33+
34+
@Override
35+
public GenericType<BigInteger> type() {
36+
return TYPE;
37+
}
38+
}

json/binding/src/main/java/io/helidon/json/binding/converters/BooleanArrayConverter.java

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -41,31 +41,30 @@ public boolean[] deserialize(JsonParser parser) {
4141
boolean[] array = new boolean[5];
4242
lastByte = parser.nextToken();
4343
int index = 0;
44-
if (lastByte != ']') {
44+
if (lastByte == ']') {
45+
return emptyArray;
46+
}
47+
array[index++] = Deserializers.deserialize(parser, deserializer);
48+
lastByte = parser.nextToken();
49+
while (lastByte == ',') {
50+
if (index == array.length) {
51+
boolean[] tmp = new boolean[array.length * 2];
52+
System.arraycopy(array, 0, tmp, 0, array.length);
53+
array = tmp;
54+
}
55+
parser.nextToken();
4556
array[index++] = Deserializers.deserialize(parser, deserializer);
4657
lastByte = parser.nextToken();
47-
while (lastByte == ',') {
48-
if (index == array.length) {
49-
boolean[] tmp = new boolean[array.length * 2];
50-
System.arraycopy(array, 0, tmp, 0, array.length);
51-
array = tmp;
52-
}
53-
parser.nextToken();
54-
array[index++] = Deserializers.deserialize(parser, deserializer);
55-
lastByte = parser.nextToken();
56-
}
57-
if (lastByte != ']') {
58-
throw new JsonException("Array end expected, received: " + Character.toString(lastByte));
59-
}
58+
}
59+
if (lastByte != ']') {
60+
throw new JsonException("Array end expected, received: " + Character.toString(lastByte));
6061
}
6162
if (index == array.length) {
6263
return array;
63-
} else if (index > 0) {
64-
boolean[] toReturn = new boolean[index];
65-
System.arraycopy(array, 0, toReturn, 0, toReturn.length);
66-
return toReturn;
6764
}
68-
return emptyArray;
65+
boolean[] toReturn = new boolean[index];
66+
System.arraycopy(array, 0, toReturn, 0, toReturn.length);
67+
return toReturn;
6968
}
7069

7170
@Override

json/binding/src/main/java/io/helidon/json/binding/converters/CharArrayConverter.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,10 @@ public char[] deserialize(JsonParser parser) {
6161
}
6262
if (index == array.length) {
6363
return array;
64-
} else if (index > 0) {
65-
char[] toReturn = new char[index];
66-
System.arraycopy(array, 0, toReturn, 0, toReturn.length);
67-
return toReturn;
6864
}
69-
return emptyArray;
65+
char[] toReturn = new char[index];
66+
System.arraycopy(array, 0, toReturn, 0, toReturn.length);
67+
return toReturn;
7068
}
7169

7270
@Override

json/binding/src/main/java/io/helidon/json/binding/converters/DoubleArrayConverter.java

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -41,31 +41,30 @@ public double[] deserialize(JsonParser parser) {
4141
double[] array = new double[5];
4242
lastByte = parser.nextToken();
4343
int index = 0;
44-
if (lastByte != ']') {
44+
if (lastByte == ']') {
45+
return emptyArray;
46+
}
47+
array[index++] = Deserializers.deserialize(parser, deserializer);
48+
lastByte = parser.nextToken();
49+
while (lastByte == ',') {
50+
if (index == array.length) {
51+
double[] tmp = new double[array.length * 2];
52+
System.arraycopy(array, 0, tmp, 0, array.length);
53+
array = tmp;
54+
}
55+
parser.nextToken();
4556
array[index++] = Deserializers.deserialize(parser, deserializer);
4657
lastByte = parser.nextToken();
47-
while (lastByte == ',') {
48-
if (index == array.length) {
49-
double[] tmp = new double[array.length * 2];
50-
System.arraycopy(array, 0, tmp, 0, array.length);
51-
array = tmp;
52-
}
53-
parser.nextToken();
54-
array[index++] = Deserializers.deserialize(parser, deserializer);
55-
lastByte = parser.nextToken();
56-
}
57-
if (lastByte != ']') {
58-
throw new JsonException("Array end expected, received: " + Character.toString(lastByte));
59-
}
58+
}
59+
if (lastByte != ']') {
60+
throw new JsonException("Array end expected, received: " + Character.toString(lastByte));
6061
}
6162
if (index == array.length) {
6263
return array;
63-
} else if (index > 0) {
64-
double[] toReturn = new double[index];
65-
System.arraycopy(array, 0, toReturn, 0, toReturn.length);
66-
return toReturn;
6764
}
68-
return emptyArray;
65+
double[] toReturn = new double[index];
66+
System.arraycopy(array, 0, toReturn, 0, toReturn.length);
67+
return toReturn;
6968
}
7069

7170
@Override

json/binding/src/main/java/io/helidon/json/binding/converters/FloatArrayConverter.java

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -41,31 +41,30 @@ public float[] deserialize(JsonParser parser) {
4141
float[] array = new float[5];
4242
lastByte = parser.nextToken();
4343
int index = 0;
44-
if (lastByte != ']') {
44+
if (lastByte == ']') {
45+
return emptyArray;
46+
}
47+
array[index++] = Deserializers.deserialize(parser, deserializer);
48+
lastByte = parser.nextToken();
49+
while (lastByte == ',') {
50+
if (index == array.length) {
51+
float[] tmp = new float[array.length * 2];
52+
System.arraycopy(array, 0, tmp, 0, array.length);
53+
array = tmp;
54+
}
55+
parser.nextToken();
4556
array[index++] = Deserializers.deserialize(parser, deserializer);
4657
lastByte = parser.nextToken();
47-
while (lastByte == ',') {
48-
if (index == array.length) {
49-
float[] tmp = new float[array.length * 2];
50-
System.arraycopy(array, 0, tmp, 0, array.length);
51-
array = tmp;
52-
}
53-
parser.nextToken();
54-
array[index++] = Deserializers.deserialize(parser, deserializer);
55-
lastByte = parser.nextToken();
56-
}
57-
if (lastByte != ']') {
58-
throw new JsonException("Array end expected, received: " + Character.toString(lastByte));
59-
}
58+
}
59+
if (lastByte != ']') {
60+
throw new JsonException("Array end expected, received: " + Character.toString(lastByte));
6061
}
6162
if (index == array.length) {
6263
return array;
63-
} else if (index > 0) {
64-
float[] toReturn = new float[index];
65-
System.arraycopy(array, 0, toReturn, 0, toReturn.length);
66-
return toReturn;
6764
}
68-
return emptyArray;
65+
float[] toReturn = new float[index];
66+
System.arraycopy(array, 0, toReturn, 0, toReturn.length);
67+
return toReturn;
6968
}
7069

7170
@Override

json/binding/src/main/java/io/helidon/json/binding/converters/IntArrayConverter.java

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -41,31 +41,30 @@ public int[] deserialize(JsonParser parser) {
4141
int[] array = new int[5];
4242
lastByte = parser.nextToken();
4343
int index = 0;
44-
if (lastByte != ']') {
44+
if (lastByte == ']') {
45+
return emptyArray;
46+
}
47+
array[index++] = Deserializers.deserialize(parser, deserializer);
48+
lastByte = parser.nextToken();
49+
while (lastByte == ',') {
50+
if (index == array.length) {
51+
int[] tmp = new int[array.length * 2];
52+
System.arraycopy(array, 0, tmp, 0, array.length);
53+
array = tmp;
54+
}
55+
parser.nextToken();
4556
array[index++] = Deserializers.deserialize(parser, deserializer);
4657
lastByte = parser.nextToken();
47-
while (lastByte == ',') {
48-
if (index == array.length) {
49-
int[] tmp = new int[array.length * 2];
50-
System.arraycopy(array, 0, tmp, 0, array.length);
51-
array = tmp;
52-
}
53-
parser.nextToken();
54-
array[index++] = Deserializers.deserialize(parser, deserializer);
55-
lastByte = parser.nextToken();
56-
}
57-
if (lastByte != ']') {
58-
throw new JsonException("Array end expected, received: " + Character.toString(lastByte));
59-
}
58+
}
59+
if (lastByte != ']') {
60+
throw new JsonException("Array end expected, received: " + Character.toString(lastByte));
6061
}
6162
if (index == array.length) {
6263
return array;
63-
} else if (index > 0) {
64-
int[] toReturn = new int[index];
65-
System.arraycopy(array, 0, toReturn, 0, toReturn.length);
66-
return toReturn;
6764
}
68-
return emptyArray;
65+
int[] toReturn = new int[index];
66+
System.arraycopy(array, 0, toReturn, 0, toReturn.length);
67+
return toReturn;
6968
}
7069

7170
@Override

json/binding/src/main/java/io/helidon/json/binding/converters/LongArrayConverter.java

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -41,31 +41,30 @@ public long[] deserialize(JsonParser parser) {
4141
long[] array = new long[5];
4242
lastByte = parser.nextToken();
4343
int index = 0;
44-
if (lastByte != ']') {
44+
if (lastByte == ']') {
45+
return emptyArray;
46+
}
47+
array[index++] = Deserializers.deserialize(parser, deserializer);
48+
lastByte = parser.nextToken();
49+
while (lastByte == ',') {
50+
if (index == array.length) {
51+
long[] tmp = new long[array.length * 2];
52+
System.arraycopy(array, 0, tmp, 0, array.length);
53+
array = tmp;
54+
}
55+
parser.nextToken();
4556
array[index++] = Deserializers.deserialize(parser, deserializer);
4657
lastByte = parser.nextToken();
47-
while (lastByte == ',') {
48-
if (index == array.length) {
49-
long[] tmp = new long[array.length * 2];
50-
System.arraycopy(array, 0, tmp, 0, array.length);
51-
array = tmp;
52-
}
53-
parser.nextToken();
54-
array[index++] = Deserializers.deserialize(parser, deserializer);
55-
lastByte = parser.nextToken();
56-
}
57-
if (lastByte != ']') {
58-
throw new JsonException("Array end expected, received: " + Character.toString(lastByte));
59-
}
58+
}
59+
if (lastByte != ']') {
60+
throw new JsonException("Array end expected, received: " + Character.toString(lastByte));
6061
}
6162
if (index == array.length) {
6263
return array;
63-
} else if (index > 0) {
64-
long[] toReturn = new long[index];
65-
System.arraycopy(array, 0, toReturn, 0, toReturn.length);
66-
return toReturn;
6764
}
68-
return emptyArray;
65+
long[] toReturn = new long[index];
66+
System.arraycopy(array, 0, toReturn, 0, toReturn.length);
67+
return toReturn;
6968
}
7069

7170
@Override

json/binding/src/main/java/io/helidon/json/binding/converters/ShortArrayConverter.java

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -41,31 +41,30 @@ public short[] deserialize(JsonParser parser) {
4141
short[] array = new short[5];
4242
lastByte = parser.nextToken();
4343
int index = 0;
44-
if (lastByte != ']') {
44+
if (lastByte == ']') {
45+
return emptyArray;
46+
}
47+
array[index++] = Deserializers.deserialize(parser, deserializer);
48+
lastByte = parser.nextToken();
49+
while (lastByte == ',') {
50+
if (index == array.length) {
51+
short[] tmp = new short[array.length * 2];
52+
System.arraycopy(array, 0, tmp, 0, array.length);
53+
array = tmp;
54+
}
55+
parser.nextToken();
4556
array[index++] = Deserializers.deserialize(parser, deserializer);
4657
lastByte = parser.nextToken();
47-
while (lastByte == ',') {
48-
if (index == array.length) {
49-
short[] tmp = new short[array.length * 2];
50-
System.arraycopy(array, 0, tmp, 0, array.length);
51-
array = tmp;
52-
}
53-
parser.nextToken();
54-
array[index++] = Deserializers.deserialize(parser, deserializer);
55-
lastByte = parser.nextToken();
56-
}
57-
if (lastByte != ']') {
58-
throw new JsonException("Array end expected, received: " + Character.toString(lastByte));
59-
}
58+
}
59+
if (lastByte != ']') {
60+
throw new JsonException("Array end expected, received: " + Character.toString(lastByte));
6061
}
6162
if (index == array.length) {
6263
return array;
63-
} else if (index > 0) {
64-
short[] toReturn = new short[index];
65-
System.arraycopy(array, 0, toReturn, 0, toReturn.length);
66-
return toReturn;
6764
}
68-
return emptyArray;
65+
short[] toReturn = new short[index];
66+
System.arraycopy(array, 0, toReturn, 0, toReturn.length);
67+
return toReturn;
6968
}
7069

7170
@Override

0 commit comments

Comments
 (0)