Skip to content

Commit 9b4bf2f

Browse files
committed
Another optimization (with some promise)
1 parent 0931277 commit 9b4bf2f

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

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

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -425,14 +425,31 @@ protected final ContainerNode<?> deserializeContainerNonRecursive(JsonParser p,
425425
if (t == null) { // unexpected end-of-input (or bad buffering?)
426426
t = JsonToken.NOT_AVAILABLE; // to trigger an exception
427427
}
428-
ContainerNode<?> newContainer = null;
429428
switch (t.id()) {
430429
case JsonTokenId.ID_START_OBJECT:
431-
value = newContainer = nodeFactory.objectNode();
432-
break;
430+
{
431+
ObjectNode newOb = nodeFactory.objectNode();
432+
JsonNode old = currObject.replace(propName, newOb);
433+
if (old != null) {
434+
_handleDuplicateField(p, ctxt, nodeFactory,
435+
propName, currObject, old, newOb);
436+
}
437+
stack.push(curr);
438+
curr = newOb;
439+
}
440+
continue outer_loop;
433441
case JsonTokenId.ID_START_ARRAY:
434-
value = newContainer = nodeFactory.arrayNode();
435-
break;
442+
{
443+
ArrayNode newOb = nodeFactory.arrayNode();
444+
JsonNode old = currObject.replace(propName, newOb);
445+
if (old != null) {
446+
_handleDuplicateField(p, ctxt, nodeFactory,
447+
propName, currObject, old, newOb);
448+
}
449+
stack.push(curr);
450+
curr = newOb;
451+
}
452+
continue outer_loop;
436453
case JsonTokenId.ID_STRING:
437454
value = nodeFactory.textNode(p.getText());
438455
break;
@@ -459,12 +476,6 @@ protected final ContainerNode<?> deserializeContainerNonRecursive(JsonParser p,
459476
_handleDuplicateField(p, ctxt, nodeFactory,
460477
propName, currObject, old, value);
461478
}
462-
// But for Arrays/Objects, need to iterate over contents
463-
if (newContainer != null) {
464-
stack.push(curr);
465-
curr = newContainer;
466-
continue outer_loop;
467-
}
468479
}
469480
// reached not-property-name, should be END_OBJECT
470481
} else {

0 commit comments

Comments
 (0)