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;
     }