Skip to content

Commit 2322ce6

Browse files
committed
Implement #334: make ArrayNode, ObjectNode non-final again
1 parent 5f58a1b commit 2322ce6

File tree

4 files changed

+61
-85
lines changed

4 files changed

+61
-85
lines changed

release-notes/VERSION

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ New minor version.
5454
not `IllegalArgumentException`
5555
(reported by beverku@github)
5656
#326: Support `@JsonFilter` for "any getter" properties
57+
#334: Make `ArrayNode`, `ObjectNode` non-final again
5758
[JACKSON-890]: Support managed/back-references for polymorphic (abstract) types
5859
- Add 'BeanPropertyWriter.isUnwrapping()' for future needs (by Afterburner)
5960
- Add coercions from String "null" (as if null token was parsed) for primitives/Wrappers.

src/main/java/com/fasterxml/jackson/databind/node/ArrayNode.java

+7-5
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@
1313
import java.util.List;
1414

1515
/**
16-
* Node class that represents Arrays mapped from Json content.
16+
* Node class that represents Arrays mapped from JSON content.
17+
*<p>
18+
* Note: class was <code>final</code> temporarily for Jackson 2.2.
1719
*/
18-
public final class ArrayNode
20+
public class ArrayNode
1921
extends ContainerNode<ArrayNode>
2022
{
2123
private final List<JsonNode> _children = new ArrayList<JsonNode>();
@@ -753,17 +755,17 @@ public String toString()
753755

754756
/*
755757
/**********************************************************
756-
/* Internal methods
758+
/* Internal methods (overridable)
757759
/**********************************************************
758760
*/
759761

760-
private ArrayNode _add(JsonNode node)
762+
protected ArrayNode _add(JsonNode node)
761763
{
762764
_children.add(node);
763765
return this;
764766
}
765767

766-
private ArrayNode _insert(int index, JsonNode node)
768+
protected ArrayNode _insert(int index, JsonNode node)
767769
{
768770
if (index < 0) {
769771
_children.add(0, node);

src/main/java/com/fasterxml/jackson/databind/node/ContainerNode.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,9 @@ protected ContainerNode(JsonNodeFactory nc)
8585
@Override
8686
public final NumericNode numberNode(int v) { return _nodeFactory.numberNode(v); }
8787
@Override
88-
public final NumericNode numberNode(long v) { return _nodeFactory.numberNode(v); }
88+
public final NumericNode numberNode(long v) {
89+
return _nodeFactory.numberNode(v);
90+
}
8991

9092
// was missing from 2.2 and before
9193
@Override

src/main/java/com/fasterxml/jackson/databind/node/ObjectNode.java

+50-79
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717

1818
/**
1919
* Node that maps to JSON Object structures in JSON content.
20+
*<p>
21+
* Note: class was <code>final</code> temporarily for Jackson 2.2.
2022
*/
21-
public final class ObjectNode
23+
public class ObjectNode
2224
extends ContainerNode<ObjectNode>
2325
{
2426
// Note: LinkedHashMap for backwards compatibility
@@ -537,7 +539,7 @@ public ObjectNode retain(String... fieldNames) {
537539
public ArrayNode putArray(String fieldName)
538540
{
539541
ArrayNode n = arrayNode();
540-
_children.put(fieldName, n);
542+
_put(fieldName, n);
541543
return n;
542544
}
543545

@@ -554,17 +556,16 @@ public ArrayNode putArray(String fieldName)
554556
*/
555557
public ObjectNode putObject(String fieldName)
556558
{
557-
ObjectNode n = objectNode();
558-
_children.put(fieldName, n);
559+
ObjectNode n = objectNode();
560+
_put(fieldName, n);
559561
return n;
560562
}
561563

562564
/**
563565
* @return This node (to allow chaining)
564566
*/
565567
public ObjectNode putPOJO(String fieldName, Object pojo) {
566-
_children.put(fieldName, pojoNode(pojo));
567-
return this;
568+
return _put(fieldName, pojoNode(pojo));
568569
}
569570

570571
/**
@@ -582,8 +583,7 @@ public ObjectNode putNull(String fieldName)
582583
* @return This node (to allow chaining)
583584
*/
584585
public ObjectNode put(String fieldName, short v) {
585-
_children.put(fieldName, numberNode(v));
586-
return this;
586+
return _put(fieldName, numberNode(v));
587587
}
588588

589589
/**
@@ -592,13 +592,9 @@ public ObjectNode put(String fieldName, short v) {
592592
*
593593
* @return This node (to allow chaining)
594594
*/
595-
public ObjectNode put(String fieldName, Short value) {
596-
if (value == null) {
597-
_children.put(fieldName, nullNode());
598-
} else {
599-
_children.put(fieldName, numberNode(value.shortValue()));
600-
}
601-
return this;
595+
public ObjectNode put(String fieldName, Short v) {
596+
return _put(fieldName, (v == null) ? nullNode()
597+
: numberNode(v.shortValue()));
602598
}
603599

604600
/**
@@ -607,8 +603,7 @@ public ObjectNode put(String fieldName, Short value) {
607603
* @return This node (to allow chaining)
608604
*/
609605
public ObjectNode put(String fieldName, int v) {
610-
_children.put(fieldName, numberNode(v));
611-
return this;
606+
return _put(fieldName, numberNode(v));
612607
}
613608

614609
/**
@@ -617,13 +612,9 @@ public ObjectNode put(String fieldName, int v) {
617612
*
618613
* @return This node (to allow chaining)
619614
*/
620-
public ObjectNode put(String fieldName, Integer value) {
621-
if (value == null) {
622-
_children.put(fieldName, nullNode());
623-
} else {
624-
_children.put(fieldName, numberNode(value.intValue()));
625-
}
626-
return this;
615+
public ObjectNode put(String fieldName, Integer v) {
616+
return _put(fieldName, (v == null) ? nullNode()
617+
: numberNode(v.intValue()));
627618
}
628619

629620
/**
@@ -632,8 +623,7 @@ public ObjectNode put(String fieldName, Integer value) {
632623
* @return This node (to allow chaining)
633624
*/
634625
public ObjectNode put(String fieldName, long v) {
635-
_children.put(fieldName, numberNode(v));
636-
return this;
626+
return _put(fieldName, numberNode(v));
637627
}
638628

639629
/**
@@ -642,13 +632,9 @@ public ObjectNode put(String fieldName, long v) {
642632
*
643633
* @return This node (to allow chaining)
644634
*/
645-
public ObjectNode put(String fieldName, Long value) {
646-
if (value == null) {
647-
_children.put(fieldName, nullNode());
648-
} else {
649-
_children.put(fieldName, numberNode(value.longValue()));
650-
}
651-
return this;
635+
public ObjectNode put(String fieldName, Long v) {
636+
return _put(fieldName, (v == null) ? nullNode()
637+
: numberNode(v.longValue()));
652638
}
653639

654640
/**
@@ -657,8 +643,7 @@ public ObjectNode put(String fieldName, Long value) {
657643
* @return This node (to allow chaining)
658644
*/
659645
public ObjectNode put(String fieldName, float v) {
660-
_children.put(fieldName, numberNode(v));
661-
return this;
646+
return _put(fieldName, numberNode(v));
662647
}
663648

664649
/**
@@ -667,13 +652,9 @@ public ObjectNode put(String fieldName, float v) {
667652
*
668653
* @return This node (to allow chaining)
669654
*/
670-
public ObjectNode put(String fieldName, Float value) {
671-
if (value == null) {
672-
_children.put(fieldName, nullNode());
673-
} else {
674-
_children.put(fieldName, numberNode(value.floatValue()));
675-
}
676-
return this;
655+
public ObjectNode put(String fieldName, Float v) {
656+
return _put(fieldName, (v == null) ? nullNode()
657+
: numberNode(v.floatValue()));
677658
}
678659

679660
/**
@@ -682,8 +663,7 @@ public ObjectNode put(String fieldName, Float value) {
682663
* @return This node (to allow chaining)
683664
*/
684665
public ObjectNode put(String fieldName, double v) {
685-
_children.put(fieldName, numberNode(v));
686-
return this;
666+
return _put(fieldName, numberNode(v));
687667
}
688668

689669
/**
@@ -692,13 +672,9 @@ public ObjectNode put(String fieldName, double v) {
692672
*
693673
* @return This node (to allow chaining)
694674
*/
695-
public ObjectNode put(String fieldName, Double value) {
696-
if (value == null) {
697-
_children.put(fieldName, nullNode());
698-
} else {
699-
_children.put(fieldName, numberNode(value.doubleValue()));
700-
}
701-
return this;
675+
public ObjectNode put(String fieldName, Double v) {
676+
return _put(fieldName, (v == null) ? nullNode()
677+
: numberNode(v.doubleValue()));
702678
}
703679

704680
/**
@@ -707,12 +683,8 @@ public ObjectNode put(String fieldName, Double value) {
707683
* @return This node (to allow chaining)
708684
*/
709685
public ObjectNode put(String fieldName, BigDecimal v) {
710-
if (v == null) {
711-
putNull(fieldName);
712-
} else {
713-
_children.put(fieldName, numberNode(v));
714-
}
715-
return this;
686+
return _put(fieldName, (v == null) ? nullNode()
687+
: numberNode(v));
716688
}
717689

718690
/**
@@ -721,12 +693,8 @@ public ObjectNode put(String fieldName, BigDecimal v) {
721693
* @return This node (to allow chaining)
722694
*/
723695
public ObjectNode put(String fieldName, String v) {
724-
if (v == null) {
725-
putNull(fieldName);
726-
} else {
727-
_children.put(fieldName, textNode(v));
728-
}
729-
return this;
696+
return _put(fieldName, (v == null) ? nullNode()
697+
: textNode(v));
730698
}
731699

732700
/**
@@ -735,8 +703,7 @@ public ObjectNode put(String fieldName, String v) {
735703
* @return This node (to allow chaining)
736704
*/
737705
public ObjectNode put(String fieldName, boolean v) {
738-
_children.put(fieldName, booleanNode(v));
739-
return this;
706+
return _put(fieldName, booleanNode(v));
740707
}
741708

742709
/**
@@ -745,13 +712,9 @@ public ObjectNode put(String fieldName, boolean v) {
745712
*
746713
* @return This node (to allow chaining)
747714
*/
748-
public ObjectNode put(String fieldName, Boolean value) {
749-
if (value == null) {
750-
_children.put(fieldName, nullNode());
751-
} else {
752-
_children.put(fieldName, booleanNode(value.booleanValue()));
753-
}
754-
return this;
715+
public ObjectNode put(String fieldName, Boolean v) {
716+
return _put(fieldName, (v == null) ? nullNode()
717+
: booleanNode(v.booleanValue()));
755718
}
756719

757720
/**
@@ -760,14 +723,10 @@ public ObjectNode put(String fieldName, Boolean value) {
760723
* @return This node (to allow chaining)
761724
*/
762725
public ObjectNode put(String fieldName, byte[] v) {
763-
if (v == null) {
764-
_children.put(fieldName, nullNode());
765-
} else {
766-
_children.put(fieldName, binaryNode(v));
767-
}
768-
return this;
726+
return _put(fieldName, (v == null) ? nullNode()
727+
: binaryNode(v));
769728
}
770-
729+
771730
/*
772731
/**********************************************************
773732
/* Standard methods
@@ -811,4 +770,16 @@ public String toString()
811770
sb.append("}");
812771
return sb.toString();
813772
}
773+
774+
/*
775+
/**********************************************************
776+
/* Internal methods (overridable)
777+
/**********************************************************
778+
*/
779+
780+
protected ObjectNode _put(String fieldName, JsonNode value)
781+
{
782+
_children.put(fieldName, value);
783+
return this;
784+
}
814785
}

0 commit comments

Comments
 (0)