Add a new method in read/write contexts, to allow cleaning up of current value
diff --git a/src/main/java/com/fasterxml/jackson/core/base/ParserBase.java b/src/main/java/com/fasterxml/jackson/core/base/ParserBase.java
index b5112a2..2d9ac42 100644
--- a/src/main/java/com/fasterxml/jackson/core/base/ParserBase.java
+++ b/src/main/java/com/fasterxml/jackson/core/base/ParserBase.java
@@ -387,7 +387,7 @@
@Override public String getCurrentName() throws IOException {
// [JACKSON-395]: start markers require information from parent
if (_currToken == JsonToken.START_OBJECT || _currToken == JsonToken.START_ARRAY) {
- JsonReadContext parent = _parsingContext.getParent();
+ JsonReadContext parent = _parsingContext.clearAndGetParent();
return parent.getCurrentName();
}
return _parsingContext.getCurrentName();
diff --git a/src/main/java/com/fasterxml/jackson/core/json/JsonReadContext.java b/src/main/java/com/fasterxml/jackson/core/json/JsonReadContext.java
index 4bb7720..3520b2b 100644
--- a/src/main/java/com/fasterxml/jackson/core/json/JsonReadContext.java
+++ b/src/main/java/com/fasterxml/jackson/core/json/JsonReadContext.java
@@ -142,6 +142,22 @@
@Override public String getCurrentName() { return _currentName; }
@Override public JsonReadContext getParent() { return _parent; }
+ /**
+ * Method that can be used to both clear the accumulated references
+ * (specifically value set with {@link #setCurrentValue(Object)})
+ * that should not be retained, and returns parent (as would
+ * {@link #getParent()} do). Typically called when closing the active
+ * context when encountering {@link JsonToken#END_ARRAY} or
+ * {@link JsonToken#END_OBJECT}.
+ *
+ * @since 2.7
+ */
+ public JsonReadContext clearAndGetParent() {
+ _currentValue = null;
+ // could also clear the current name, but seems cheap enough to leave?
+ return _parent;
+ }
+
/*
/**********************************************************
/* Extended API
diff --git a/src/main/java/com/fasterxml/jackson/core/json/JsonWriteContext.java b/src/main/java/com/fasterxml/jackson/core/json/JsonWriteContext.java
index 6212d97..a9c863e 100644
--- a/src/main/java/com/fasterxml/jackson/core/json/JsonWriteContext.java
+++ b/src/main/java/com/fasterxml/jackson/core/json/JsonWriteContext.java
@@ -136,6 +136,22 @@
@Override public final JsonWriteContext getParent() { return _parent; }
@Override public final String getCurrentName() { return _currentName; }
+ /**
+ * Method that can be used to both clear the accumulated references
+ * (specifically value set with {@link #setCurrentValue(Object)})
+ * that should not be retained, and returns parent (as would
+ * {@link #getParent()} do). Typically called when closing the active
+ * context when encountering {@link JsonToken#END_ARRAY} or
+ * {@link JsonToken#END_OBJECT}.
+ *
+ * @since 2.7
+ */
+ public JsonWriteContext clearAndGetParent() {
+ _currentValue = null;
+ // could also clear the current name, but seems cheap enough to leave?
+ return _parent;
+ }
+
public DupDetector getDupDetector() {
return _dups;
}
diff --git a/src/main/java/com/fasterxml/jackson/core/json/ReaderBasedJsonParser.java b/src/main/java/com/fasterxml/jackson/core/json/ReaderBasedJsonParser.java
index 4348e3f..bb211ba 100644
--- a/src/main/java/com/fasterxml/jackson/core/json/ReaderBasedJsonParser.java
+++ b/src/main/java/com/fasterxml/jackson/core/json/ReaderBasedJsonParser.java
@@ -615,7 +615,7 @@
if (!_parsingContext.inArray()) {
_reportMismatchedEndMarker(i, '}');
}
- _parsingContext = _parsingContext.getParent();
+ _parsingContext = _parsingContext.clearAndGetParent();
return (_currToken = JsonToken.END_ARRAY);
}
if (i == INT_RCURLY) {
@@ -623,7 +623,7 @@
if (!_parsingContext.inObject()) {
_reportMismatchedEndMarker(i, ']');
}
- _parsingContext = _parsingContext.getParent();
+ _parsingContext = _parsingContext.clearAndGetParent();
return (_currToken = JsonToken.END_OBJECT);
}
@@ -767,7 +767,7 @@
if (!_parsingContext.inArray()) {
_reportMismatchedEndMarker(i, '}');
}
- _parsingContext = _parsingContext.getParent();
+ _parsingContext = _parsingContext.clearAndGetParent();
_currToken = JsonToken.END_ARRAY;
return false;
}
@@ -776,7 +776,7 @@
if (!_parsingContext.inObject()) {
_reportMismatchedEndMarker(i, ']');
}
- _parsingContext = _parsingContext.getParent();
+ _parsingContext = _parsingContext.clearAndGetParent();
_currToken = JsonToken.END_OBJECT;
return false;
}
@@ -846,7 +846,7 @@
if (!_parsingContext.inArray()) {
_reportMismatchedEndMarker(i, '}');
}
- _parsingContext = _parsingContext.getParent();
+ _parsingContext = _parsingContext.clearAndGetParent();
_currToken = JsonToken.END_ARRAY;
return null;
}
@@ -855,7 +855,7 @@
if (!_parsingContext.inObject()) {
_reportMismatchedEndMarker(i, ']');
}
- _parsingContext = _parsingContext.getParent();
+ _parsingContext = _parsingContext.clearAndGetParent();
_currToken = JsonToken.END_OBJECT;
return null;
}
diff --git a/src/main/java/com/fasterxml/jackson/core/json/UTF8JsonGenerator.java b/src/main/java/com/fasterxml/jackson/core/json/UTF8JsonGenerator.java
index 48ccac1..84a6af2 100644
--- a/src/main/java/com/fasterxml/jackson/core/json/UTF8JsonGenerator.java
+++ b/src/main/java/com/fasterxml/jackson/core/json/UTF8JsonGenerator.java
@@ -305,7 +305,7 @@
}
_outputBuffer[_outputTail++] = BYTE_RBRACKET;
}
- _writeContext = _writeContext.getParent();
+ _writeContext = _writeContext.clearAndGetParent();
}
@Override
@@ -337,7 +337,7 @@
}
_outputBuffer[_outputTail++] = BYTE_RCURLY;
}
- _writeContext = _writeContext.getParent();
+ _writeContext = _writeContext.clearAndGetParent();
}
/**
diff --git a/src/main/java/com/fasterxml/jackson/core/json/UTF8StreamJsonParser.java b/src/main/java/com/fasterxml/jackson/core/json/UTF8StreamJsonParser.java
index 4911796..cc2c927 100644
--- a/src/main/java/com/fasterxml/jackson/core/json/UTF8StreamJsonParser.java
+++ b/src/main/java/com/fasterxml/jackson/core/json/UTF8StreamJsonParser.java
@@ -719,7 +719,7 @@
if (!_parsingContext.inArray()) {
_reportMismatchedEndMarker(i, '}');
}
- _parsingContext = _parsingContext.getParent();
+ _parsingContext = _parsingContext.clearAndGetParent();
return (_currToken = JsonToken.END_ARRAY);
}
if (i == INT_RCURLY) {
@@ -727,7 +727,7 @@
if (!_parsingContext.inObject()) {
_reportMismatchedEndMarker(i, ']');
}
- _parsingContext = _parsingContext.getParent();
+ _parsingContext = _parsingContext.clearAndGetParent();
return (_currToken = JsonToken.END_OBJECT);
}
@@ -903,7 +903,7 @@
if (!_parsingContext.inArray()) {
_reportMismatchedEndMarker(i, '}');
}
- _parsingContext = _parsingContext.getParent();
+ _parsingContext = _parsingContext.clearAndGetParent();
_currToken = JsonToken.END_ARRAY;
return false;
}
@@ -912,7 +912,7 @@
if (!_parsingContext.inObject()) {
_reportMismatchedEndMarker(i, ']');
}
- _parsingContext = _parsingContext.getParent();
+ _parsingContext = _parsingContext.clearAndGetParent();
_currToken = JsonToken.END_OBJECT;
return false;
}
@@ -990,7 +990,7 @@
if (!_parsingContext.inArray()) {
_reportMismatchedEndMarker(i, '}');
}
- _parsingContext = _parsingContext.getParent();
+ _parsingContext = _parsingContext.clearAndGetParent();
_currToken = JsonToken.END_ARRAY;
return null;
}
@@ -999,7 +999,7 @@
if (!_parsingContext.inObject()) {
_reportMismatchedEndMarker(i, ']');
}
- _parsingContext = _parsingContext.getParent();
+ _parsingContext = _parsingContext.clearAndGetParent();
_currToken = JsonToken.END_OBJECT;
return null;
}
diff --git a/src/main/java/com/fasterxml/jackson/core/json/WriterBasedJsonGenerator.java b/src/main/java/com/fasterxml/jackson/core/json/WriterBasedJsonGenerator.java
index 05dd163..3451941 100644
--- a/src/main/java/com/fasterxml/jackson/core/json/WriterBasedJsonGenerator.java
+++ b/src/main/java/com/fasterxml/jackson/core/json/WriterBasedJsonGenerator.java
@@ -17,7 +17,7 @@
final protected static int SHORT_WRITE = 32;
final protected static char[] HEX_CHARS = CharTypes.copyHexChars();
-
+
/*
/**********************************************************
/* Output buffering
@@ -25,7 +25,7 @@
*/
final protected Writer _writer;
-
+
/**
* Intermediate buffer in which contents are buffered before
* being written using {@link #_writer}.
@@ -157,7 +157,7 @@
}
_outputBuffer[_outputTail++] = ']';
}
- _writeContext = _writeContext.getParent();
+ _writeContext = _writeContext.clearAndGetParent();
}
@Override
@@ -189,7 +189,7 @@
}
_outputBuffer[_outputTail++] = '}';
}
- _writeContext = _writeContext.getParent();
+ _writeContext = _writeContext.clearAndGetParent();
}
protected void _writeFieldName(String name, boolean commaBefore) throws IOException
diff --git a/src/main/java/com/fasterxml/jackson/core/type/ResolvedType.java b/src/main/java/com/fasterxml/jackson/core/type/ResolvedType.java
index 2c57157..a668c7e 100644
--- a/src/main/java/com/fasterxml/jackson/core/type/ResolvedType.java
+++ b/src/main/java/com/fasterxml/jackson/core/type/ResolvedType.java
@@ -88,7 +88,11 @@
* subtypes they may be different parameters or possibly none at all).
*
* @since 2.5
+ *
+ * @deprecated Since 2.7: does not have meaning as parameters depend on type
+ * resolved.
*/
+ @Deprecated // since 2.7
public Class<?> getParameterSource() {
return null;
}