Skip to content

Commit 0931277

Browse files
committed
one more attempt at optimizing integer handling
1 parent 15c21aa commit 0931277

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

src/main/java/com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,7 @@ protected final ContainerNode<?> deserializeContainerNonRecursive(JsonParser p,
410410
throws IOException
411411
{
412412
ContainerNode<?> curr = root;
413+
final int intCoercionFeats = ctxt.getDeserializationFeatures() & F_MASK_INT_COERCIONS;
413414

414415
outer_loop:
415416
while (true) {
@@ -436,7 +437,7 @@ protected final ContainerNode<?> deserializeContainerNonRecursive(JsonParser p,
436437
value = nodeFactory.textNode(p.getText());
437438
break;
438439
case JsonTokenId.ID_NUMBER_INT:
439-
value = _fromInt(p, ctxt, nodeFactory);
440+
value = _fromInt(p, intCoercionFeats, nodeFactory);
440441
break;
441442
case JsonTokenId.ID_NUMBER_FLOAT:
442443
value = _fromFloat(p, ctxt, nodeFactory);
@@ -492,7 +493,7 @@ protected final ContainerNode<?> deserializeContainerNonRecursive(JsonParser p,
492493
currArray.add(nodeFactory.textNode(p.getText()));
493494
continue arrayLoop;
494495
case JsonTokenId.ID_NUMBER_INT:
495-
currArray.add(_fromInt(p, ctxt, nodeFactory));
496+
currArray.add(_fromInt(p, intCoercionFeats, nodeFactory));
496497
continue arrayLoop;
497498
case JsonTokenId.ID_NUMBER_FLOAT:
498499
currArray.add(_fromFloat(p, ctxt, nodeFactory));
@@ -568,6 +569,25 @@ protected final JsonNode deserializeRareScalar(JsonParser p, DeserializationCont
568569
return (JsonNode) ctxt.handleUnexpectedToken(handledType(), p);
569570
}
570571

572+
protected final JsonNode _fromInt(JsonParser p, int coercionFeatures,
573+
JsonNodeFactory nodeFactory) throws IOException
574+
{
575+
if (coercionFeatures != 0) {
576+
if (DeserializationFeature.USE_BIG_INTEGER_FOR_INTS.enabledIn(coercionFeatures)) {
577+
return nodeFactory.numberNode(p.getBigIntegerValue());
578+
}
579+
return nodeFactory.numberNode(p.getLongValue());
580+
}
581+
final JsonParser.NumberType nt = p.getNumberType();
582+
if (nt == JsonParser.NumberType.INT) {
583+
return nodeFactory.numberNode(p.getIntValue());
584+
}
585+
if (nt == JsonParser.NumberType.LONG) {
586+
return nodeFactory.numberNode(p.getLongValue());
587+
}
588+
return nodeFactory.numberNode(p.getBigIntegerValue());
589+
}
590+
571591
protected final JsonNode _fromInt(JsonParser p, DeserializationContext ctxt,
572592
JsonNodeFactory nodeFactory) throws IOException
573593
{

0 commit comments

Comments
 (0)