From 67c48f73147b35f20cd3a051f70c7460750bb270 Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Sat, 14 Nov 2020 14:22:47 -0800 Subject: [PATCH] Fix #653 --- release-notes/VERSION-2.x | 1 + .../jackson/core/json/JsonReadContext.java | 20 ++++++++++----- .../jackson/core/json/JsonWriteContext.java | 25 ++++++++++++++++--- .../core/filter/BasicParserFilteringTest.java | 3 --- 4 files changed, 37 insertions(+), 12 deletions(-) diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index b09b423f44..d94f236ddb 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -30,6 +30,7 @@ JSON library. #631: Add `JsonParser.getNumberValueExact()` to allow precision-retaining buffering #639: Limit initial allocated block size by `ByteArrayBuilder` to max block size #640: Add `JacksonException` as parent class of `JsonProcessingException` +#653: Make `JsonWriteContext.reset()` and `JsonReadContext.reset()` methods public - Deprecate `JsonParser.getCurrentTokenId()` (use `#currentTokenId()` instead) - Full "LICENSE" included in jar for easier access by compliancy tools 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 f1c00b43a9..c785c840be 100644 --- a/src/main/java/com/fasterxml/jackson/core/json/JsonReadContext.java +++ b/src/main/java/com/fasterxml/jackson/core/json/JsonReadContext.java @@ -15,17 +15,16 @@ public final class JsonReadContext extends JsonStreamContext * Parent context for this context; null for root context. */ protected final JsonReadContext _parent; - + // // // Optional duplicate detection protected DupDetector _dups; /* /********************************************************** - /* Simple instance reuse slots; speeds up things - /* a bit (10-15%) for docs with lots of small - /* arrays/objects (for which allocation was - /* visible in profile stack frames) + /* Simple instance reuse slots; speeds up things a bit (10-15%) + /* for docs with lots of small arrays/objects (for which + /* allocation was visible in profile stack frames) /********************************************************** */ @@ -63,7 +62,16 @@ public JsonReadContext(JsonReadContext parent, DupDetector dups, int type, int l _index = -1; } - protected void reset(int type, int lineNr, int colNr) { + /** + * Internal method to allow instance reuse: DO NOT USE unless you absolutely + * know what you are doing. + * Clears up state (including "current value"), changes type to one specified; + * resets current duplicate-detection state (if any). + * Parent link left as-is since it is {@code final}. + *

+ * NOTE: Public since 2.12. + */ + public void reset(int type, int lineNr, int colNr) { _type = type; _index = -1; _lineNr = lineNr; 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 3dc87b077e..c24a0116cd 100644 --- a/src/main/java/com/fasterxml/jackson/core/json/JsonWriteContext.java +++ b/src/main/java/com/fasterxml/jackson/core/json/JsonWriteContext.java @@ -84,7 +84,16 @@ protected JsonWriteContext(int type, JsonWriteContext parent, DupDetector dups, _currentValue = currValue; } - protected JsonWriteContext reset(int type) { + /** + * Internal method to allow instance reuse: DO NOT USE unless you absolutely + * know what you are doing. + * Clears up state (including "current value"), changes type to one specified; + * resets current duplicate-detection state (if any). + * Parent link left as-is since it is {@code final}. + *

+ * NOTE: Public since 2.12. + */ + public JsonWriteContext reset(int type) { _type = type; _index = -1; _currentName = null; @@ -94,8 +103,18 @@ protected JsonWriteContext reset(int type) { return this; } - /* @since 2.10 */ - protected JsonWriteContext reset(int type, Object currValue) { + /** + * Internal method to allow instance reuse: DO NOT USE unless you absolutely + * know what you are doing. + * Clears up state, changes type to one specified, assigns "current value"; + * resets current duplicate-detection state (if any). + * Parent link left as-is since it is {@code final}. + *

+ * NOTE: Public since 2.12. + * + * @since 2.10 + */ + public JsonWriteContext reset(int type, Object currValue) { _type = type; _index = -1; _currentName = null; diff --git a/src/test/java/com/fasterxml/jackson/core/filter/BasicParserFilteringTest.java b/src/test/java/com/fasterxml/jackson/core/filter/BasicParserFilteringTest.java index a49c5ea2f1..ebb5abe4d0 100644 --- a/src/test/java/com/fasterxml/jackson/core/filter/BasicParserFilteringTest.java +++ b/src/test/java/com/fasterxml/jackson/core/filter/BasicParserFilteringTest.java @@ -1,6 +1,5 @@ package com.fasterxml.jackson.core.filter; -import java.io.StringWriter; import java.math.BigInteger; import java.util.*; @@ -367,8 +366,6 @@ public void testNoMatchFiltering3() throws Exception String result = readAndWrite(JSON_F, p); assertEquals(aposToQuotes("[[{'array':[],'ob':{}}],[{'array':[],'ob':{}}],[{'array':[],'ob':{}}]]"), result); assertEquals(0, p.getMatchCount()); - - StringWriter w = new StringWriter(); } public void testNoMatchFiltering4() throws Exception