diff --git a/release-notes/VERSION b/release-notes/VERSION index 25a2d00f09..f62ca3a7ba 100644 --- a/release-notes/VERSION +++ b/release-notes/VERSION @@ -6,6 +6,7 @@ Project: jackson-databind 2.9.3 (not yet released) #1604: Nested type arguments doesn't work with polymorphic types +#1799: Allow creation of custom sub-types of `NullNode`, `BooleanNode`, `MissingNode` #1804: `ValueInstantiator.canInstantiate()` ignores `canCreateUsingArrayDelegate()` (reported byb henryptung@github) diff --git a/src/main/java/com/fasterxml/jackson/databind/JsonNode.java b/src/main/java/com/fasterxml/jackson/databind/JsonNode.java index 7a9998cf4a..6a57c6c9a3 100644 --- a/src/main/java/com/fasterxml/jackson/databind/JsonNode.java +++ b/src/main/java/com/fasterxml/jackson/databind/JsonNode.java @@ -99,18 +99,18 @@ public final boolean isContainerNode() { } @Override - public final boolean isMissingNode() { - return getNodeType() == JsonNodeType.MISSING; + public boolean isMissingNode() { + return false; } @Override - public final boolean isArray() { - return getNodeType() == JsonNodeType.ARRAY; + public boolean isArray() { + return false; } @Override - public final boolean isObject() { - return getNodeType() == JsonNodeType.OBJECT; + public boolean isObject() { + return false; } /** diff --git a/src/main/java/com/fasterxml/jackson/databind/node/ArrayNode.java b/src/main/java/com/fasterxml/jackson/databind/node/ArrayNode.java index 257a8abda5..6b49f32a03 100644 --- a/src/main/java/com/fasterxml/jackson/databind/node/ArrayNode.java +++ b/src/main/java/com/fasterxml/jackson/databind/node/ArrayNode.java @@ -87,6 +87,11 @@ public JsonNodeType getNodeType() { return JsonNodeType.ARRAY; } + @Override + public boolean isArray() { + return true; + } + @Override public JsonToken asToken() { return JsonToken.START_ARRAY; } @Override diff --git a/src/main/java/com/fasterxml/jackson/databind/node/BooleanNode.java b/src/main/java/com/fasterxml/jackson/databind/node/BooleanNode.java index fa8cdeee73..ac3b390494 100644 --- a/src/main/java/com/fasterxml/jackson/databind/node/BooleanNode.java +++ b/src/main/java/com/fasterxml/jackson/databind/node/BooleanNode.java @@ -20,8 +20,12 @@ public class BooleanNode public final static BooleanNode FALSE = new BooleanNode(false); private final boolean _value; - - private BooleanNode(boolean v) { _value = v; } + + /** + *

+ * NOTE: visibility raised to `protected` in 2.9.3 to allow custom subtypes. + */ + protected BooleanNode(boolean v) { _value = v; } public static BooleanNode getTrue() { return TRUE; } public static BooleanNode getFalse() { return FALSE; } diff --git a/src/main/java/com/fasterxml/jackson/databind/node/MissingNode.java b/src/main/java/com/fasterxml/jackson/databind/node/MissingNode.java index f8967c2809..65509fe585 100644 --- a/src/main/java/com/fasterxml/jackson/databind/node/MissingNode.java +++ b/src/main/java/com/fasterxml/jackson/databind/node/MissingNode.java @@ -24,7 +24,16 @@ public final class MissingNode { private final static MissingNode instance = new MissingNode(); - private MissingNode() { } + /** + *

+ * NOTE: visibility raised to `protected` in 2.9.3 to allow custom subtypes. + */ + protected MissingNode() { } + + @Override + public boolean isMissingNode() { + return true; + } // Immutable: no need to copy @SuppressWarnings("unchecked") diff --git a/src/main/java/com/fasterxml/jackson/databind/node/NullNode.java b/src/main/java/com/fasterxml/jackson/databind/node/NullNode.java index 70a01eab5c..1a222433bc 100644 --- a/src/main/java/com/fasterxml/jackson/databind/node/NullNode.java +++ b/src/main/java/com/fasterxml/jackson/databind/node/NullNode.java @@ -17,7 +17,11 @@ public final class NullNode public final static NullNode instance = new NullNode(); - private NullNode() { } + /** + *

+ * NOTE: visibility raised to `protected` in 2.9.3 to allow custom subtypes. + */ + protected NullNode() { } public static NullNode getInstance() { return instance; } diff --git a/src/main/java/com/fasterxml/jackson/databind/node/ObjectNode.java b/src/main/java/com/fasterxml/jackson/databind/node/ObjectNode.java index be6c268907..c80d3addee 100644 --- a/src/main/java/com/fasterxml/jackson/databind/node/ObjectNode.java +++ b/src/main/java/com/fasterxml/jackson/databind/node/ObjectNode.java @@ -78,6 +78,11 @@ public JsonNodeType getNodeType() { return JsonNodeType.OBJECT; } + @Override + public final boolean isObject() { + return true; + } + @Override public JsonToken asToken() { return JsonToken.START_OBJECT; } @Override