diff options
author | Tatu Saloranta <tatu.saloranta@iki.fi> | 2020-06-26 15:08:29 -0700 |
---|---|---|
committer | Tatu Saloranta <tatu.saloranta@iki.fi> | 2020-06-26 15:08:29 -0700 |
commit | 914bdbbc0a929e8638eb00a5478f5f0f595b06f9 (patch) | |
tree | af8d02a85474ed46b1e152160f81ec15db4e3b29 | |
parent | a1355253b811b9e03e6a9c61f6e1a810535e926d (diff) | |
download | jackson-core-914bdbbc0a929e8638eb00a5478f5f0f595b06f9.tar.gz |
Fixed #627
6 files changed, 21 insertions, 1 deletions
diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index 7806b224..729ec1f0 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -20,6 +20,7 @@ JSON library. (contributed by Jendrik J) #619: Add `StreamReadCapability` for further format-based/format-agnostic handling improvements +#627: Add `JsonParser.isExpectedNumberIntToken()` convenience method - Deprecate `JsonParser.getCurrentTokenId()` (use `#currentTokenId()` instead) 2.11.1 (25-Jun-2020) diff --git a/src/main/java/com/fasterxml/jackson/core/JsonParser.java b/src/main/java/com/fasterxml/jackson/core/JsonParser.java index 93e76fa0..4fe901c4 100644 --- a/src/main/java/com/fasterxml/jackson/core/JsonParser.java +++ b/src/main/java/com/fasterxml/jackson/core/JsonParser.java @@ -1118,6 +1118,17 @@ public abstract class JsonParser public boolean isExpectedStartObjectToken() { return currentToken() == JsonToken.START_OBJECT; } /** + * Similar to {@link #isExpectedStartArrayToken()}, but checks whether stream + * currently points to {@link JsonToken#VALUE_NUMBER_INT}. + *<p> + * The initial use case is for XML backend to efficiently (attempt to) coerce + * textual content into numbers. + * + * @since 2.12 + */ + public boolean isExpectedNumberIntToken() { return currentToken() == JsonToken.VALUE_NUMBER_INT; } + + /** * Access for checking whether current token is a numeric value token, but * one that is of "not-a-number" (NaN) variety (including both "NaN" AND * positive/negative infinity!): not supported by all formats, diff --git a/src/main/java/com/fasterxml/jackson/core/base/ParserMinimalBase.java b/src/main/java/com/fasterxml/jackson/core/base/ParserMinimalBase.java index ea1e1a69..219af4ba 100644 --- a/src/main/java/com/fasterxml/jackson/core/base/ParserMinimalBase.java +++ b/src/main/java/com/fasterxml/jackson/core/base/ParserMinimalBase.java @@ -212,7 +212,8 @@ public abstract class ParserMinimalBase extends JsonParser @Override public boolean isExpectedStartArrayToken() { return _currToken == JsonToken.START_ARRAY; } @Override public boolean isExpectedStartObjectToken() { return _currToken == JsonToken.START_OBJECT; } - + @Override public boolean isExpectedNumberIntToken() { return _currToken == JsonToken.VALUE_NUMBER_INT; } + @Override public JsonToken nextValue() throws IOException { // Implementation should be as trivial as follows; only needs to change if diff --git a/src/main/java/com/fasterxml/jackson/core/util/JsonParserDelegate.java b/src/main/java/com/fasterxml/jackson/core/util/JsonParserDelegate.java index e7ed57fb..0bcbd41b 100644 --- a/src/main/java/com/fasterxml/jackson/core/util/JsonParserDelegate.java +++ b/src/main/java/com/fasterxml/jackson/core/util/JsonParserDelegate.java @@ -127,6 +127,8 @@ public class JsonParserDelegate extends JsonParser @Override public JsonStreamContext getParsingContext() { return delegate.getParsingContext(); } @Override public boolean isExpectedStartArrayToken() { return delegate.isExpectedStartArrayToken(); } @Override public boolean isExpectedStartObjectToken() { return delegate.isExpectedStartObjectToken(); } + @Override public boolean isExpectedNumberIntToken() { return delegate.isExpectedNumberIntToken(); } + @Override public boolean isNaN() throws IOException { return delegate.isNaN(); } /* diff --git a/src/test/java/com/fasterxml/jackson/core/read/NumberParsingTest.java b/src/test/java/com/fasterxml/jackson/core/read/NumberParsingTest.java index a5804b96..bb43aa8d 100644 --- a/src/test/java/com/fasterxml/jackson/core/read/NumberParsingTest.java +++ b/src/test/java/com/fasterxml/jackson/core/read/NumberParsingTest.java @@ -69,6 +69,7 @@ public class NumberParsingTest assertToken(JsonToken.START_ARRAY, p.nextToken()); assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken()); assertEquals(JsonParser.NumberType.INT, p.getNumberType()); + assertTrue(p.isExpectedNumberIntToken()); assertEquals(""+EXP_I, p.getText()); if (((short) EXP_I) == EXP_I) { @@ -108,6 +109,7 @@ public class NumberParsingTest DOC = String.valueOf(EXP_I); p = createParser(mode, DOC + " "); // DataInput requires separator assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken()); + assertTrue(p.isExpectedNumberIntToken()); assertEquals(DOC, p.getText()); int i = p.getIntValue(); @@ -122,6 +124,7 @@ public class NumberParsingTest DOC = String.valueOf(EXP_I)+".0"; p = createParser(mode, DOC + " "); assertToken(JsonToken.VALUE_NUMBER_FLOAT, p.nextToken()); + assertFalse(p.isExpectedNumberIntToken()); assertEquals(EXP_I, p.getValueAsInt()); p.close(); diff --git a/src/test/java/com/fasterxml/jackson/core/util/TestDelegates.java b/src/test/java/com/fasterxml/jackson/core/util/TestDelegates.java index f1202487..7453ae9c 100644 --- a/src/test/java/com/fasterxml/jackson/core/util/TestDelegates.java +++ b/src/test/java/com/fasterxml/jackson/core/util/TestDelegates.java @@ -231,6 +231,7 @@ public class TestDelegates extends com.fasterxml.jackson.core.BaseTest assertFalse(del.hasTokenId(JsonTokenId.ID_START_OBJECT)); assertTrue(del.isExpectedStartArrayToken()); assertFalse(del.isExpectedStartObjectToken()); + assertFalse(del.isExpectedNumberIntToken()); assertEquals("[", del.getText()); assertNotNull(del.getParsingContext()); assertSame(parser.getParsingContext(), del.getParsingContext()); @@ -251,6 +252,7 @@ public class TestDelegates extends com.fasterxml.jackson.core.BaseTest assertEquals((short)1, del.getShortValue()); assertEquals(1f, del.getFloatValue()); assertFalse(del.isNaN()); + assertTrue(del.isExpectedNumberIntToken()); assertEquals(NumberType.INT, del.getNumberType()); assertEquals(Integer.valueOf(1), del.getNumberValue()); assertNull(del.getEmbeddedObject()); |