Skip to content

Commit 645aa27

Browse files
committed
Fixed #120 (last pieces)
1 parent 4a1ea8a commit 645aa27

29 files changed

+203
-1111
lines changed

afterburner/src/main/java/com/fasterxml/jackson/module/afterburner/deser/OptimizedSettableBeanProperty.java

+1-442
Large diffs are not rendered by default.

afterburner/src/main/java/com/fasterxml/jackson/module/afterburner/deser/SettableBooleanFieldProperty.java

+8-9
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ public void deserializeAndSet(JsonParser p, DeserializationContext ctxt, Object
4242
} else if (t == JsonToken.VALUE_FALSE) {
4343
b = false;
4444
} else {
45-
b = _deserializeBoolean(p, ctxt);
45+
delegate.deserializeAndSet(p, ctxt, bean);
46+
return;
4647
}
4748
try {
4849
_propertyMutator.booleanField(bean, _optimizedIndex, b);
@@ -66,15 +67,13 @@ public void set(Object bean, Object value) throws IOException {
6667
public Object deserializeSetAndReturn(JsonParser p,
6768
DeserializationContext ctxt, Object instance) throws IOException
6869
{
69-
boolean b;
70-
JsonToken t = p.getCurrentToken();
70+
JsonToken t = p.currentToken();
7171
if (t == JsonToken.VALUE_TRUE) {
72-
b = true;
73-
} else if (t == JsonToken.VALUE_FALSE) {
74-
b = false;
75-
} else {
76-
b = _deserializeBoolean(p, ctxt);
72+
return setAndReturn(instance, Boolean.TRUE);
73+
}
74+
if (t == JsonToken.VALUE_FALSE) {
75+
return setAndReturn(instance, Boolean.FALSE);
7776
}
78-
return setAndReturn(instance, b);
77+
return delegate.deserializeSetAndReturn(p, ctxt, instance);
7978
}
8079
}

afterburner/src/main/java/com/fasterxml/jackson/module/afterburner/deser/SettableBooleanMethodProperty.java

+8-9
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ public void deserializeAndSet(JsonParser p, DeserializationContext ctxt, Object
4242
} else if (t == JsonToken.VALUE_FALSE) {
4343
b = false;
4444
} else {
45-
b = _deserializeBoolean(p, ctxt);
45+
delegate.deserializeAndSet(p, ctxt, bean);
46+
return;
4647
}
4748
try {
4849
_propertyMutator.booleanSetter(bean, _optimizedIndex, b);
@@ -66,15 +67,13 @@ public void set(Object bean, Object value) throws IOException {
6667
public Object deserializeSetAndReturn(JsonParser p,
6768
DeserializationContext ctxt, Object instance) throws IOException
6869
{
69-
boolean b;
70-
JsonToken t = p.getCurrentToken();
70+
JsonToken t = p.currentToken();
7171
if (t == JsonToken.VALUE_TRUE) {
72-
b = true;
73-
} else if (t == JsonToken.VALUE_FALSE) {
74-
b = false;
75-
} else {
76-
b = _deserializeBoolean(p, ctxt);
72+
return setAndReturn(instance, Boolean.TRUE);
73+
}
74+
if (t == JsonToken.VALUE_FALSE) {
75+
return setAndReturn(instance, Boolean.FALSE);
7776
}
78-
return setAndReturn(instance, b);
77+
return delegate.deserializeSetAndReturn(p, ctxt, instance);
7978
}
8079
}

afterburner/src/main/java/com/fasterxml/jackson/module/afterburner/deser/SettableIntFieldProperty.java

+15-9
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,28 @@ public SettableBeanProperty withMutator(BeanPropertyMutator mut) {
3737
public void deserializeAndSet(JsonParser p, DeserializationContext ctxt,
3838
Object bean) throws IOException
3939
{
40-
int v = p.isExpectedNumberIntToken() ? p.getIntValue() : _deserializeInt(p, ctxt);
40+
if (!p.isExpectedNumberIntToken()) {
41+
delegate.deserializeAndSet(p, ctxt, bean);
42+
return;
43+
}
44+
final int v = p.getIntValue();
4145
try {
4246
_propertyMutator.intField(bean, _optimizedIndex, v);
4347
} catch (Throwable e) {
4448
_reportProblem(bean, v, e);
4549
}
4650
}
4751

52+
@Override
53+
public Object deserializeSetAndReturn(JsonParser p,
54+
DeserializationContext ctxt, Object instance) throws IOException
55+
{
56+
if (p.isExpectedNumberIntToken()) {
57+
return setAndReturn(instance, p.getIntValue());
58+
}
59+
return delegate.deserializeSetAndReturn(p, ctxt, instance);
60+
}
61+
4862
@Override
4963
public void set(Object bean, Object value) throws IOException {
5064
// not optimal (due to boxing), but better than using reflection:
@@ -55,12 +69,4 @@ public void set(Object bean, Object value) throws IOException {
5569
_reportProblem(bean, v, e);
5670
}
5771
}
58-
59-
@Override
60-
public Object deserializeSetAndReturn(JsonParser p,
61-
DeserializationContext ctxt, Object instance) throws IOException
62-
{
63-
int v = p.isExpectedNumberIntToken() ? p.getIntValue() : _deserializeInt(p, ctxt);
64-
return setAndReturn(instance, v);
65-
}
6672
}

afterburner/src/main/java/com/fasterxml/jackson/module/afterburner/deser/SettableIntMethodProperty.java

+16-11
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,29 @@ public SettableBeanProperty withMutator(BeanPropertyMutator mut) {
3737
public void deserializeAndSet(JsonParser p, DeserializationContext ctxt,
3838
Object bean) throws IOException
3939
{
40-
int v = p.isExpectedNumberIntToken() ? p.getIntValue() : _deserializeInt(p, ctxt);
40+
if (!p.isExpectedNumberIntToken()) {
41+
delegate.deserializeAndSet(p, ctxt, bean);
42+
return;
43+
}
44+
final int v = p.getIntValue();
4145
try {
4246
_propertyMutator.intSetter(bean, _optimizedIndex, v);
43-
return;
4447
} catch (Throwable e) {
4548
_reportProblem(bean, v, e);
4649
}
4750
}
4851

52+
@Override
53+
public Object deserializeSetAndReturn(JsonParser p,
54+
DeserializationContext ctxt, Object instance)
55+
throws IOException
56+
{
57+
if (p.isExpectedNumberIntToken()) {
58+
return setAndReturn(instance, p.getIntValue());
59+
}
60+
return delegate.deserializeSetAndReturn(p, ctxt, instance);
61+
}
62+
4963
@Override
5064
public void set(Object bean, Object value) throws IOException {
5165
// not optimal (due to boxing), but better than using reflection:
@@ -56,13 +70,4 @@ public void set(Object bean, Object value) throws IOException {
5670
_reportProblem(bean, v, e);
5771
}
5872
}
59-
60-
@Override
61-
public Object deserializeSetAndReturn(JsonParser p,
62-
DeserializationContext ctxt, Object instance)
63-
throws IOException
64-
{
65-
int v = p.isExpectedNumberIntToken() ? p.getIntValue() : _deserializeInt(p, ctxt);
66-
return setAndReturn(instance, v);
67-
}
6873
}

afterburner/src/main/java/com/fasterxml/jackson/module/afterburner/deser/SettableLongFieldProperty.java

+15-9
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,28 @@ public SettableBeanProperty withMutator(BeanPropertyMutator mut) {
3737
public void deserializeAndSet(JsonParser p, DeserializationContext ctxt,
3838
Object bean) throws IOException
3939
{
40-
long v = p.isExpectedNumberIntToken() ? p.getLongValue() : _deserializeLong(p, ctxt);
40+
if (!p.isExpectedNumberIntToken()) {
41+
delegate.deserializeAndSet(p, ctxt, bean);
42+
return;
43+
}
44+
final long v = p.getLongValue();
4145
try {
4246
_propertyMutator.longField(bean, _optimizedIndex, v);
4347
} catch (Throwable e) {
4448
_reportProblem(bean, v, e);
4549
}
4650
}
4751

52+
@Override
53+
public Object deserializeSetAndReturn(JsonParser p,
54+
DeserializationContext ctxt, Object instance) throws IOException
55+
{
56+
if (p.isExpectedNumberIntToken()) {
57+
return setAndReturn(instance, p.getLongValue());
58+
}
59+
return delegate.deserializeSetAndReturn(p, ctxt, instance);
60+
}
61+
4862
@Override
4963
public void set(Object bean, Object value) throws IOException {
5064
// not optimal (due to boxing), but better than using reflection:
@@ -55,12 +69,4 @@ public void set(Object bean, Object value) throws IOException {
5569
_reportProblem(bean, v, e);
5670
}
5771
}
58-
59-
@Override
60-
public Object deserializeSetAndReturn(JsonParser p,
61-
DeserializationContext ctxt, Object instance) throws IOException
62-
{
63-
long l = p.isExpectedNumberIntToken() ? p.getLongValue() : _deserializeLong(p, ctxt);
64-
return setAndReturn(instance, l);
65-
}
6672
}

afterburner/src/main/java/com/fasterxml/jackson/module/afterburner/deser/SettableLongMethodProperty.java

+15-9
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,28 @@ public SettableBeanProperty withMutator(BeanPropertyMutator mut) {
3737
public void deserializeAndSet(JsonParser p, DeserializationContext ctxt,
3838
Object bean) throws IOException
3939
{
40-
long v = p.isExpectedNumberIntToken() ? p.getLongValue() : _deserializeLong(p, ctxt);
40+
if (!p.isExpectedNumberIntToken()) {
41+
delegate.deserializeAndSet(p, ctxt, bean);
42+
return;
43+
}
44+
final long v = p.getLongValue();
4145
try {
4246
_propertyMutator.longSetter(bean, _optimizedIndex, v);
4347
} catch (Throwable e) {
4448
_reportProblem(bean, v, e);
4549
}
4650
}
4751

52+
@Override
53+
public Object deserializeSetAndReturn(JsonParser p,
54+
DeserializationContext ctxt, Object instance) throws IOException
55+
{
56+
if (p.isExpectedNumberIntToken()) {
57+
return setAndReturn(instance, p.getLongValue());
58+
}
59+
return delegate.deserializeSetAndReturn(p, ctxt, instance);
60+
}
61+
4862
@Override
4963
public void set(Object bean, Object value) throws IOException {
5064
// not optimal (due to boxing), but better than using reflection:
@@ -55,12 +69,4 @@ public void set(Object bean, Object value) throws IOException {
5569
_reportProblem(bean, v, e);
5670
}
5771
}
58-
59-
@Override
60-
public Object deserializeSetAndReturn(JsonParser p,
61-
DeserializationContext ctxt, Object instance) throws IOException
62-
{
63-
long l = p.isExpectedNumberIntToken() ? p.getLongValue() : _deserializeLong(p, ctxt);
64-
return setAndReturn(instance, l);
65-
}
6672
}

afterburner/src/main/java/com/fasterxml/jackson/module/afterburner/deser/SettableStringFieldProperty.java

+6-28
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,11 @@ public SettableBeanProperty withMutator(BeanPropertyMutator mut) {
3737
public void deserializeAndSet(JsonParser p, DeserializationContext ctxt,
3838
Object bean) throws IOException
3939
{
40-
String text;
41-
42-
if (p.hasToken(JsonToken.VALUE_STRING)) {
43-
text = p.getText();
44-
} else if (p.hasToken(JsonToken.VALUE_NULL)) {
45-
if (_skipNulls) {
46-
return;
47-
}
48-
text = (String) _nullProvider.getNullValue(ctxt);
49-
} else {
50-
text = p.getValueAsString();
51-
if (text == null) {
52-
text = _deserializeString(p, ctxt);
53-
}
40+
if (!p.hasToken(JsonToken.VALUE_STRING)) {
41+
delegate.deserializeAndSet(p, ctxt, bean);
42+
return;
5443
}
44+
final String text = p.getText();
5545
try {
5646
_propertyMutator.stringField(bean, _optimizedIndex, text);
5747
} catch (Throwable e) {
@@ -63,22 +53,10 @@ public void deserializeAndSet(JsonParser p, DeserializationContext ctxt,
6353
public Object deserializeSetAndReturn(JsonParser p, DeserializationContext ctxt, Object instance)
6454
throws IOException
6555
{
66-
String text;
67-
6856
if (p.hasToken(JsonToken.VALUE_STRING)) {
69-
text = p.getText();
70-
} else if (p.hasToken(JsonToken.VALUE_NULL)) {
71-
if (_skipNulls) {
72-
return instance;
73-
}
74-
text = (String) _nullProvider.getNullValue(ctxt);
75-
} else {
76-
text = p.getValueAsString();
77-
if (text == null) {
78-
text = _deserializeString(p, ctxt);
79-
}
57+
return setAndReturn(instance, p.getText());
8058
}
81-
return setAndReturn(instance, text);
59+
return delegate.deserializeSetAndReturn(p, ctxt, instance);
8260
}
8361

8462
@Override

afterburner/src/main/java/com/fasterxml/jackson/module/afterburner/deser/SettableStringMethodProperty.java

+6-28
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,11 @@ public SettableBeanProperty withMutator(BeanPropertyMutator mut) {
3737
@Override
3838
public void deserializeAndSet(JsonParser p, DeserializationContext ctxt, Object bean) throws IOException
3939
{
40-
String text;
41-
42-
if (p.hasToken(JsonToken.VALUE_STRING)) {
43-
text = p.getText();
44-
} else if (p.hasToken(JsonToken.VALUE_NULL)) {
45-
if (_skipNulls) {
46-
return;
47-
}
48-
text = (String) _nullProvider.getNullValue(ctxt);
49-
} else {
50-
text = p.getValueAsString();
51-
if (text == null) {
52-
text = _deserializeString(p, ctxt);
53-
}
40+
if (!p.hasToken(JsonToken.VALUE_STRING)) {
41+
delegate.deserializeAndSet(p, ctxt, bean);
42+
return;
5443
}
44+
final String text = p.getText();
5545
try {
5646
_propertyMutator.stringSetter(bean, _optimizedIndex, text);
5747
} catch (Throwable e) {
@@ -62,22 +52,10 @@ public void deserializeAndSet(JsonParser p, DeserializationContext ctxt, Object
6252
@Override
6353
public Object deserializeSetAndReturn(JsonParser p, DeserializationContext ctxt, Object instance) throws IOException
6454
{
65-
String text;
66-
6755
if (p.hasToken(JsonToken.VALUE_STRING)) {
68-
text = p.getText();
69-
} else if (p.hasToken(JsonToken.VALUE_NULL)) {
70-
if (_skipNulls) {
71-
return instance;
72-
}
73-
text = (String) _nullProvider.getNullValue(ctxt);
74-
} else {
75-
text = p.getValueAsString();
76-
if (text == null) {
77-
text = _deserializeString(p, ctxt);
78-
}
56+
return setAndReturn(instance, p.getText());
7957
}
80-
return setAndReturn(instance, text);
58+
return delegate.deserializeSetAndReturn(p, ctxt, instance);
8159
}
8260

8361
@Override

afterburner/src/test/java/com/fasterxml/jackson/module/afterburner/deser/TestFinalFields.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,14 @@ public Organization(@JsonProperty("id") long id,
4040
/**********************************************************
4141
*/
4242

43+
private final ObjectMapper MAPPER = newAfterburnerMapper();
44+
4345
public void testFinalFields() throws Exception
4446
{
45-
ObjectMapper mapper = objectMapper();
46-
String json = mapper.writeValueAsString(new Organization[] {
47+
String json = MAPPER.writeValueAsString(new Organization[] {
4748
new Organization(123L, "Corp", new Address(98040, 98021))
4849
});
49-
Organization[] result = mapper.readValue(json, Organization[].class);
50+
Organization[] result = MAPPER.readValue(json, Organization[].class);
5051
assertNotNull(result);
5152
assertEquals(1, result.length);
5253
assertNotNull(result[0]);
@@ -60,11 +61,10 @@ public void testFinalFields42() throws Exception
6061
{
6162
JsonAddress address = new JsonAddress(-1L, "line1", "line2", "city", "state", "zip", "locale", "timezone");
6263
JsonOrganization organization = new JsonOrganization(-1L, "name", address);
63-
ObjectMapper mapper = objectMapper();
64-
String json = mapper.writeValueAsString(organization);
64+
String json = MAPPER.writeValueAsString(organization);
6565
assertNotNull(json);
6666

67-
JsonOrganization result = mapper.readValue(json, JsonOrganization.class);
67+
JsonOrganization result = MAPPER.readValue(json, JsonOrganization.class);
6868
assertNotNull(result);
6969
}
7070

afterburner/src/test/java/com/fasterxml/jackson/module/afterburner/deser/convert/TestFailOnPrimitiveFromNullDeserialization.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -51,19 +51,22 @@ public void testFailPrimitiveFromNull() throws Exception
5151
FAIL_ON_NULL_MAPPER.readValue(BEAN_WITH_NULL_VALUE, IntBean.class);
5252
fail();
5353
} catch (MismatchedInputException e) {
54-
verifyException(e, "Cannot coerce `null` to `int` value");
54+
// verifyException(e, "Cannot coerce `null` to `int` value");
55+
verifyException(e, "Cannot map `null` into type int");
5556
}
5657
try {
5758
FAIL_ON_NULL_MAPPER.readValue(BEAN_WITH_NULL_VALUE, LongBean.class);
5859
fail();
5960
} catch (MismatchedInputException e) {
60-
verifyException(e, "Cannot coerce `null` to `long` value");
61+
// verifyException(e, "Cannot coerce `null` to `long` value");
62+
verifyException(e, "Cannot map `null` into type long");
6163
}
6264
try {
6365
FAIL_ON_NULL_MAPPER.readValue(BEAN_WITH_NULL_VALUE, BooleanBean.class);
6466
fail();
6567
} catch (MismatchedInputException e) {
66-
verifyException(e, "Cannot coerce `null` to `boolean` value");
68+
// verifyException(e, "Cannot coerce `null` to `boolean` value");
69+
verifyException(e, "Cannot map `null` into type boolean");
6770
}
6871
try {
6972
FAIL_ON_NULL_MAPPER.readValue(BEAN_WITH_NULL_VALUE, DoubleBean.class);

0 commit comments

Comments
 (0)