aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatu Saloranta <tatu.saloranta@iki.fi>2020-06-26 15:08:29 -0700
committerTatu Saloranta <tatu.saloranta@iki.fi>2020-06-26 15:08:29 -0700
commit914bdbbc0a929e8638eb00a5478f5f0f595b06f9 (patch)
treeaf8d02a85474ed46b1e152160f81ec15db4e3b29
parenta1355253b811b9e03e6a9c61f6e1a810535e926d (diff)
downloadjackson-core-914bdbbc0a929e8638eb00a5478f5f0f595b06f9.tar.gz
Fixed #627
-rw-r--r--release-notes/VERSION-2.x1
-rw-r--r--src/main/java/com/fasterxml/jackson/core/JsonParser.java11
-rw-r--r--src/main/java/com/fasterxml/jackson/core/base/ParserMinimalBase.java3
-rw-r--r--src/main/java/com/fasterxml/jackson/core/util/JsonParserDelegate.java2
-rw-r--r--src/test/java/com/fasterxml/jackson/core/read/NumberParsingTest.java3
-rw-r--r--src/test/java/com/fasterxml/jackson/core/util/TestDelegates.java2
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());