Skip to content

Commit 3953da2

Browse files
committed
Add long[] handling post #157
1 parent 09e93a0 commit 3953da2

10 files changed

Lines changed: 198 additions & 37 deletions

File tree

guava/src/main/java/com/fasterxml/jackson/datatype/guava/GuavaDeserializers.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import com.fasterxml.jackson.datatype.guava.deser.table.TreeBasedTableDeserializer;
66
import java.io.Serializable;
77

8-
import com.fasterxml.jackson.databind.type.CollectionLikeType;
9-
import com.fasterxml.jackson.datatype.guava.ser.ImmutableDoubleArraySerializer;
108
import com.google.common.base.Optional;
119
import com.google.common.cache.Cache;
1210
import com.google.common.collect.*;
@@ -28,6 +26,7 @@
2826
import com.fasterxml.jackson.datatype.guava.deser.multimap.set.LinkedHashMultimapDeserializer;
2927
import com.google.common.primitives.ImmutableDoubleArray;
3028
import com.google.common.primitives.ImmutableIntArray;
29+
import com.google.common.primitives.ImmutableLongArray;
3130

3231
/**
3332
* Custom deserializers module offers.
@@ -265,7 +264,7 @@ public JsonDeserializer<?> findMapLikeDeserializer(MapLikeType type,
265264
}
266265

267266
if (RangeMap.class.isAssignableFrom(raw)) {
268-
return new RangeMapDeserializer(type, keyDeserializer,
267+
return new RangeMapDeserializer<>(type, keyDeserializer,
269268
elementTypeDeserializer, elementDeserializer, ImmutableRangeMap.class.isAssignableFrom(raw));
270269
}
271270

@@ -351,6 +350,9 @@ public JsonDeserializer<?> findBeanDeserializer(final JavaType type, Deserializa
351350
if (type.hasRawClass(ImmutableIntArray.class)) {
352351
return new ImmutableIntArrayDeserializer();
353352
}
353+
if (type.hasRawClass(ImmutableLongArray.class)) {
354+
return new ImmutableLongArrayDeserializer();
355+
}
354356
if (type.hasRawClass(ImmutableDoubleArray.class)) {
355357
return new ImmutableDoubleArrayDeserializer();
356358
}

guava/src/main/java/com/fasterxml/jackson/datatype/guava/GuavaModule.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.fasterxml.jackson.core.Version;
44

55
import com.fasterxml.jackson.databind.*;
6-
import com.fasterxml.jackson.datatype.guava.deser.RangeKeyDeserializer;
76
import com.fasterxml.jackson.datatype.guava.ser.GuavaBeanSerializerModifier;
87
import com.google.common.collect.BoundType;
98

guava/src/main/java/com/fasterxml/jackson/datatype/guava/GuavaSerializers.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,12 @@
2929
import com.google.common.net.InternetDomainName;
3030
import com.google.common.primitives.ImmutableDoubleArray;
3131
import com.google.common.primitives.ImmutableIntArray;
32+
import com.google.common.primitives.ImmutableLongArray;
3233
import com.fasterxml.jackson.datatype.guava.ser.CacheSerializer;
3334
import com.fasterxml.jackson.datatype.guava.ser.GuavaOptionalSerializer;
3435
import com.fasterxml.jackson.datatype.guava.ser.ImmutableDoubleArraySerializer;
3536
import com.fasterxml.jackson.datatype.guava.ser.ImmutableIntArraySerializer;
37+
import com.fasterxml.jackson.datatype.guava.ser.ImmutableLongArraySerializer;
3638
import com.fasterxml.jackson.datatype.guava.ser.MultimapSerializer;
3739
import com.fasterxml.jackson.datatype.guava.ser.RangeSerializer;
3840
import com.fasterxml.jackson.datatype.guava.ser.RangeSetSerializer;
@@ -98,6 +100,9 @@ public JsonSerializer<?> findSerializer(SerializationConfig config, JavaType typ
98100
if (type.isTypeOrSubTypeOf(ImmutableIntArray.class)) {
99101
return new ImmutableIntArraySerializer();
100102
}
103+
if (type.isTypeOrSubTypeOf(ImmutableLongArray.class)) {
104+
return new ImmutableLongArraySerializer();
105+
}
101106
if (type.isTypeOrSubTypeOf(ImmutableDoubleArray.class)) {
102107
return new ImmutableDoubleArraySerializer();
103108
}

guava/src/main/java/com/fasterxml/jackson/datatype/guava/deser/ImmutableDoubleArrayDeserializer.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212

1313
import java.io.IOException;
1414

15-
public final class ImmutableDoubleArrayDeserializer extends StdDeserializer<ImmutableDoubleArray> {
15+
public final class ImmutableDoubleArrayDeserializer extends StdDeserializer<ImmutableDoubleArray>
16+
{
17+
private static final long serialVersionUID = 1L;
1618

1719
private final JsonDeserializer<double[]> doubleArrayDeserializer;
1820

@@ -39,12 +41,12 @@ public AccessPattern getEmptyAccessPattern() {
3941
}
4042

4143
@Override
42-
public ImmutableDoubleArray getEmptyValue(DeserializationContext ctxt) throws JsonMappingException {
44+
public ImmutableDoubleArray getEmptyValue(DeserializationContext ctxt) {
4345
return ImmutableDoubleArray.of();
4446
}
4547

4648
@Override
47-
public ImmutableDoubleArray deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
48-
return ImmutableDoubleArray.copyOf(doubleArrayDeserializer.deserialize(jsonParser, deserializationContext));
49+
public ImmutableDoubleArray deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
50+
return ImmutableDoubleArray.copyOf(doubleArrayDeserializer.deserialize(p, ctxt));
4951
}
5052
}

guava/src/main/java/com/fasterxml/jackson/datatype/guava/deser/ImmutableIntArrayDeserializer.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212

1313
import java.io.IOException;
1414

15-
public final class ImmutableIntArrayDeserializer extends StdDeserializer<ImmutableIntArray> {
15+
public final class ImmutableIntArrayDeserializer extends StdDeserializer<ImmutableIntArray>
16+
{
17+
private static final long serialVersionUID = 1L;
1618

1719
private final JsonDeserializer<int[]> intArrayDeserializer;
1820

@@ -39,12 +41,12 @@ public AccessPattern getEmptyAccessPattern() {
3941
}
4042

4143
@Override
42-
public ImmutableIntArray getEmptyValue(DeserializationContext ctxt) throws JsonMappingException {
44+
public ImmutableIntArray getEmptyValue(DeserializationContext ctxt) {
4345
return ImmutableIntArray.of();
4446
}
4547

4648
@Override
47-
public ImmutableIntArray deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
48-
return ImmutableIntArray.copyOf(intArrayDeserializer.deserialize(jsonParser, deserializationContext));
49+
public ImmutableIntArray deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
50+
return ImmutableIntArray.copyOf(intArrayDeserializer.deserialize(p, ctxt));
4951
}
5052
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.fasterxml.jackson.datatype.guava.deser;
2+
3+
import java.io.IOException;
4+
5+
import com.fasterxml.jackson.core.JsonParser;
6+
import com.fasterxml.jackson.databind.*;
7+
import com.fasterxml.jackson.databind.deser.std.PrimitiveArrayDeserializers;
8+
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
9+
import com.fasterxml.jackson.databind.util.AccessPattern;
10+
11+
import com.google.common.primitives.ImmutableLongArray;
12+
13+
public final class ImmutableLongArrayDeserializer extends StdDeserializer<ImmutableLongArray>
14+
{
15+
private static final long serialVersionUID = 1L;
16+
17+
private final JsonDeserializer<long[]> _longArrayDeserializer;
18+
19+
public ImmutableLongArrayDeserializer() {
20+
super(ImmutableLongArray.class);
21+
@SuppressWarnings("unchecked")
22+
JsonDeserializer<long[]> deser = (JsonDeserializer<long[]>) PrimitiveArrayDeserializers.forType(long.class);
23+
_longArrayDeserializer = deser;
24+
}
25+
26+
@Override
27+
public Boolean supportsUpdate(DeserializationConfig config) {
28+
return Boolean.FALSE;
29+
}
30+
31+
@Override
32+
public boolean isCachable() {
33+
return true;
34+
}
35+
36+
@Override
37+
public AccessPattern getEmptyAccessPattern() {
38+
return AccessPattern.CONSTANT;
39+
}
40+
41+
@Override
42+
public ImmutableLongArray getEmptyValue(DeserializationContext ctxt) {
43+
return ImmutableLongArray.of();
44+
}
45+
46+
@Override
47+
public ImmutableLongArray deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
48+
return ImmutableLongArray.copyOf(_longArrayDeserializer.deserialize(p, ctxt));
49+
}
50+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.fasterxml.jackson.datatype.guava.ser;
2+
3+
import java.io.IOException;
4+
5+
import com.fasterxml.jackson.core.JsonGenerator;
6+
import com.fasterxml.jackson.databind.SerializationFeature;
7+
import com.fasterxml.jackson.databind.SerializerProvider;
8+
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
9+
import com.google.common.primitives.ImmutableLongArray;
10+
11+
public final class ImmutableLongArraySerializer extends StdSerializer<ImmutableLongArray>
12+
{
13+
private static final long serialVersionUID = 1L;
14+
15+
public ImmutableLongArraySerializer() {
16+
super(ImmutableLongArray.class);
17+
}
18+
19+
@Override
20+
public boolean isEmpty(SerializerProvider provider, ImmutableLongArray value) {
21+
return value == null || value.isEmpty();
22+
}
23+
24+
@Override
25+
public void serialize(ImmutableLongArray value, JsonGenerator g, SerializerProvider ctxt)
26+
throws IOException
27+
{
28+
int len = value.length();
29+
if (len == 1 && ctxt.isEnabled(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED)) {
30+
g.writeNumber(value.get(0));
31+
} else {
32+
g.writeStartArray(value, len);
33+
for (int i = 0; i < len; i++) {
34+
g.writeNumber(value.get(i));
35+
}
36+
g.writeEndArray();
37+
}
38+
}
39+
}

guava/src/test/java/com/fasterxml/jackson/datatype/guava/ImmutableDoubleArrayTest.java

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,40 @@
11
package com.fasterxml.jackson.datatype.guava;
22

3+
import org.junit.jupiter.api.Test;
4+
35
import com.fasterxml.jackson.databind.DeserializationFeature;
46
import com.fasterxml.jackson.databind.ObjectMapper;
57
import com.fasterxml.jackson.databind.SerializationFeature;
68
import com.google.common.primitives.ImmutableDoubleArray;
7-
import org.junit.jupiter.api.Test;
8-
9-
import java.io.IOException;
109

1110
import static org.junit.jupiter.api.Assertions.assertEquals;
1211
import static org.junit.jupiter.api.Assertions.assertNull;
1312

14-
public class ImmutableDoubleArrayTest extends ModuleTestBase {
15-
16-
private final ObjectMapper MAPPER = mapperWithModule();
13+
public class ImmutableDoubleArrayTest extends ModuleTestBase
14+
{
15+
private final ObjectMapper MAPPER = builderWithModule()
16+
.disable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES)
17+
.build();
1718

1819
@Test
19-
public void testSerialization() throws IOException {
20+
public void testSerialization() throws Exception {
2021
assertEquals("[]", MAPPER.writeValueAsString(ImmutableDoubleArray.of()));
2122
assertEquals("[42.0]", MAPPER.writeValueAsString(ImmutableDoubleArray.of(42.0)));
2223
assertEquals("[-1.0,0.0,1.0,2.0,3.1]", MAPPER.writeValueAsString(ImmutableDoubleArray.of(-1, 0, 1, 2, 3.1)));
2324
}
2425

2526
@Test
26-
public void testSerializationWriteSingleElemArraysUnwrapped() throws IOException {
27-
ObjectMapper mapper = builderWithModule().enable(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED)
27+
public void testSerializationWriteSingleElemArraysUnwrapped() throws Exception {
28+
ObjectMapper mapper = builderWithModule()
29+
.enable(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED)
2830
.build();
2931
assertEquals("[]", MAPPER.writeValueAsString(ImmutableDoubleArray.of()));
3032
assertEquals("42.0", mapper.writeValueAsString(ImmutableDoubleArray.of(42.0)));
3133
assertEquals("[-1.0,0.0,1.0,2.0,3.1]", MAPPER.writeValueAsString(ImmutableDoubleArray.of(-1, 0, 1, 2, 3.1)));
3234
}
3335

3436
@Test
35-
public void testDeserialization() throws IOException {
37+
public void testDeserialization() throws Exception {
3638
assertNull(MAPPER.readValue("null", ImmutableDoubleArray.class));
3739
assertEquals(ImmutableDoubleArray.of(), MAPPER.readValue("[]", ImmutableDoubleArray.class));
3840
assertEquals(ImmutableDoubleArray.of(1, 2, 3), MAPPER.readValue("[1, 2, 3]", ImmutableDoubleArray.class));
@@ -41,10 +43,11 @@ public void testDeserialization() throws IOException {
4143
}
4244

4345
@Test
44-
public void testDeserializationWriteSingleElemArraysUnwrapped() throws IOException {
46+
public void testDeserializationWriteSingleElemArraysUnwrapped() throws Exception {
4547
ObjectMapper mapper = builderWithModule().enable(
46-
DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY,
47-
DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS)
48+
DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY,
49+
DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS)
50+
.disable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES)
4851
.build();
4952
assertNull(mapper.readValue("null", ImmutableDoubleArray.class));
5053
assertEquals(ImmutableDoubleArray.of(), mapper.readValue("[]", ImmutableDoubleArray.class));

guava/src/test/java/com/fasterxml/jackson/datatype/guava/ImmutableIntArrayTest.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,31 @@
11
package com.fasterxml.jackson.datatype.guava;
22

3+
import org.junit.jupiter.api.Test;
4+
35
import com.fasterxml.jackson.databind.DeserializationFeature;
46
import com.fasterxml.jackson.databind.ObjectMapper;
57
import com.fasterxml.jackson.databind.SerializationFeature;
6-
import com.google.common.primitives.ImmutableIntArray;
7-
import org.junit.jupiter.api.Test;
88

9-
import java.io.IOException;
9+
import com.google.common.primitives.ImmutableIntArray;
1010

1111
import static org.junit.jupiter.api.Assertions.assertEquals;
1212
import static org.junit.jupiter.api.Assertions.assertNull;
1313

14-
public class ImmutableIntArrayTest extends ModuleTestBase {
15-
16-
private final ObjectMapper MAPPER = mapperWithModule();
14+
public class ImmutableIntArrayTest extends ModuleTestBase
15+
{
16+
private final ObjectMapper MAPPER = builderWithModule()
17+
.disable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES)
18+
.build();
1719

1820
@Test
19-
public void testSerialization() throws IOException {
21+
public void testSerialization() throws Exception {
2022
assertEquals("[]", MAPPER.writeValueAsString(ImmutableIntArray.of()));
2123
assertEquals("[42]", MAPPER.writeValueAsString(ImmutableIntArray.of(42)));
2224
assertEquals("[-1,0,1,2,3]", MAPPER.writeValueAsString(ImmutableIntArray.of(-1, 0, 1, 2, 3)));
2325
}
2426

2527
@Test
26-
public void testSerializationWriteSingleElemArraysUnwrapped() throws IOException {
28+
public void testSerializationWriteSingleElemArraysUnwrapped() throws Exception {
2729
ObjectMapper mapper = builderWithModule().enable(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED)
2830
.build();
2931
assertEquals("42", mapper.writeValueAsString(ImmutableIntArray.of(42)));
@@ -32,18 +34,19 @@ public void testSerializationWriteSingleElemArraysUnwrapped() throws IOException
3234
}
3335

3436
@Test
35-
public void testDeserialization() throws IOException {
37+
public void testDeserialization() throws Exception {
3638
assertNull(MAPPER.readValue("null", ImmutableIntArray.class));
3739
assertEquals(ImmutableIntArray.of(), MAPPER.readValue("[]", ImmutableIntArray.class));
3840
assertEquals(ImmutableIntArray.of(1, 2, 3), MAPPER.readValue("[1, 2, 3]", ImmutableIntArray.class));
3941
assertEquals(ImmutableIntArray.of(0, 1234, -5), MAPPER.readValue("[null, \"1234\", -5]", ImmutableIntArray.class));
4042
}
4143

4244
@Test
43-
public void testDeserializationAcceptSingleValueAsArray() throws IOException {
45+
public void testDeserializationAcceptSingleValueAsArray() throws Exception {
4446
ObjectMapper mapper = builderWithModule().enable(
45-
DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY,
46-
DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS)
47+
DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY,
48+
DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS)
49+
.disable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES)
4750
.build();
4851
assertNull(mapper.readValue("null", ImmutableIntArray.class));
4952
assertEquals(ImmutableIntArray.of(42), mapper.readValue("42", ImmutableIntArray.class));
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.fasterxml.jackson.datatype.guava;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import com.fasterxml.jackson.databind.DeserializationFeature;
6+
import com.fasterxml.jackson.databind.ObjectMapper;
7+
import com.fasterxml.jackson.databind.SerializationFeature;
8+
import com.google.common.primitives.ImmutableLongArray;
9+
10+
import static org.junit.jupiter.api.Assertions.assertEquals;
11+
import static org.junit.jupiter.api.Assertions.assertNull;
12+
13+
public class ImmutableLongArrayTest extends ModuleTestBase
14+
{
15+
private final ObjectMapper MAPPER = builderWithModule()
16+
.disable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES)
17+
.build();
18+
19+
@Test
20+
public void testSerialization() throws Exception {
21+
assertEquals("[]", MAPPER.writeValueAsString(ImmutableLongArray.of()));
22+
assertEquals("[42]", MAPPER.writeValueAsString(ImmutableLongArray.of(42)));
23+
assertEquals("[-1,0,1,2,3]", MAPPER.writeValueAsString(ImmutableLongArray.of(-1, 0, 1, 2, 3)));
24+
}
25+
26+
@Test
27+
public void testSerializationWriteSingleElemArraysUnwrapped() throws Exception {
28+
ObjectMapper mapper = builderWithModule().enable(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED)
29+
.build();
30+
assertEquals("42", mapper.writeValueAsString(ImmutableLongArray.of(42)));
31+
assertEquals("[]", mapper.writeValueAsString(ImmutableLongArray.of()));
32+
assertEquals("[-1,0,1,2,3]", mapper.writeValueAsString(ImmutableLongArray.of(-1, 0, 1, 2, 3)));
33+
}
34+
35+
@Test
36+
public void testDeserialization() throws Exception {
37+
assertNull(MAPPER.readValue("null", ImmutableLongArray.class));
38+
assertEquals(ImmutableLongArray.of(), MAPPER.readValue("[]", ImmutableLongArray.class));
39+
assertEquals(ImmutableLongArray.of(1, 2, 3), MAPPER.readValue("[1, 2, 3]", ImmutableLongArray.class));
40+
assertEquals(ImmutableLongArray.of(0, 1234, -5), MAPPER.readValue("[null, \"1234\", -5]", ImmutableLongArray.class));
41+
}
42+
43+
@Test
44+
public void testDeserializationAcceptSingleValueAsArray() throws Exception {
45+
ObjectMapper mapper = builderWithModule().enable(
46+
DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY,
47+
DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS)
48+
.build();
49+
assertNull(mapper.readValue("null", ImmutableLongArray.class));
50+
assertEquals(ImmutableLongArray.of(42), mapper.readValue("42", ImmutableLongArray.class));
51+
assertEquals(ImmutableLongArray.of(41, 42), mapper.readValue("[41, [42]]", ImmutableLongArray.class));
52+
assertEquals(ImmutableLongArray.of(), mapper.readValue("[]", ImmutableLongArray.class));
53+
assertEquals(ImmutableLongArray.of(1, 2, 3), mapper.readValue("[1, 2, 3]", ImmutableLongArray.class));
54+
assertEquals(ImmutableLongArray.of(0, 1234, -5), mapper.readValue("[null, \"1234\", -5]", ImmutableLongArray.class));
55+
}
56+
}

0 commit comments

Comments
 (0)