Repository: johnzon
Updated Branches:
  refs/heads/master 40e75bc56 -> 5852983bb


JOHNZON-110 better testing if we can use the JsonLongImpl optimization for 
jsonnumber


Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/5852983b
Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/5852983b
Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/5852983b

Branch: refs/heads/master
Commit: 5852983bbc16c0c07c60d30fcd39fd6c308d48bd
Parents: 40e75bc
Author: rmannibucau <[email protected]>
Authored: Thu Mar 23 22:51:00 2017 +0100
Committer: rmannibucau <[email protected]>
Committed: Thu Mar 23 22:51:00 2017 +0100

----------------------------------------------------------------------
 .../johnzon/core/JsonParserFactoryImpl.java       | 12 ++++++------
 .../org/apache/johnzon/core/JsonReaderImpl.java   |  6 +++---
 .../apache/johnzon/core/JsonStreamParserImpl.java |  4 ++++
 .../org/apache/johnzon/core/JsonNumberTest.java   | 18 ++++++++++++++----
 4 files changed, 27 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/johnzon/blob/5852983b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonParserFactoryImpl.java
----------------------------------------------------------------------
diff --git 
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonParserFactoryImpl.java 
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonParserFactoryImpl.java
index c57f144..d9bfd67 100644
--- 
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonParserFactoryImpl.java
+++ 
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonParserFactoryImpl.java
@@ -65,7 +65,7 @@ public class JsonParserFactoryImpl extends 
AbstractJsonFactory implements JsonPa
         this.supportsComments = getBool(SUPPORTS_COMMENTS, 
DEFAULT_SUPPORTS_COMMENT);
     }
 
-    private JsonParser getDefaultJsonParserImpl(final InputStream in) {
+    private JsonStreamParserImpl getDefaultJsonParserImpl(final InputStream 
in) {
         if (supportsComments) {
             return new CommentsJsonStreamParserImpl(in, maxSize, 
bufferProvider, valueBufferProvider);
         }
@@ -73,7 +73,7 @@ public class JsonParserFactoryImpl extends 
AbstractJsonFactory implements JsonPa
         return new JsonStreamParserImpl(in, maxSize, bufferProvider, 
valueBufferProvider);
     }
 
-    private JsonParser getDefaultJsonParserImpl(final InputStream in, final 
Charset charset) {
+    private JsonStreamParserImpl getDefaultJsonParserImpl(final InputStream 
in, final Charset charset) {
         if (supportsComments) {
             return new CommentsJsonStreamParserImpl(in, charset, maxSize, 
bufferProvider, valueBufferProvider);
         }
@@ -81,7 +81,7 @@ public class JsonParserFactoryImpl extends 
AbstractJsonFactory implements JsonPa
         return new JsonStreamParserImpl(in, charset, maxSize, bufferProvider, 
valueBufferProvider);
     }
 
-    private JsonParser getDefaultJsonParserImpl(final Reader in) {
+    private JsonStreamParserImpl getDefaultJsonParserImpl(final Reader in) {
         if (supportsComments) {
             return new CommentsJsonStreamParserImpl(in, maxSize, 
bufferProvider, valueBufferProvider);
         }
@@ -121,15 +121,15 @@ public class JsonParserFactoryImpl extends 
AbstractJsonFactory implements JsonPa
         return Collections.unmodifiableMap(internalConfig);
     }
 
-    public JsonParser createInternalParser(final InputStream in) {
+    public JsonStreamParserImpl createInternalParser(final InputStream in) {
         return getDefaultJsonParserImpl(in);
     }
     
-    public JsonParser createInternalParser(final InputStream in, final Charset 
charset) {
+    public JsonStreamParserImpl createInternalParser(final InputStream in, 
final Charset charset) {
         return getDefaultJsonParserImpl(in, charset);
     }
 
-    public JsonParser createInternalParser(final Reader reader) {
+    public JsonStreamParserImpl createInternalParser(final Reader reader) {
         return getDefaultJsonParserImpl(reader);
     }
 }

http://git-wip-us.apache.org/repos/asf/johnzon/blob/5852983b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
----------------------------------------------------------------------
diff --git 
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java 
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
index a209a56..4ceb803 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
@@ -30,10 +30,10 @@ import javax.json.stream.JsonParser;
 import javax.json.stream.JsonParsingException;
 
 public class JsonReaderImpl implements JsonReader {
-    private final JsonParser parser;
+    private final JsonStreamParserImpl parser;
     private boolean closed = false;
 
-    public JsonReaderImpl(final JsonParser parser) {
+    public JsonReaderImpl(final JsonStreamParserImpl parser) {
         this.parser = parser;
     }
 
@@ -151,7 +151,7 @@ public class JsonReaderImpl implements JsonReader {
                     break;
 
                 case VALUE_NUMBER:
-                    if (parser.isIntegralNumber()) {
+                    if (parser.isIntegralNumber() && parser.isNotTooLong()) {
                         builder.add(key, new JsonLongImpl(parser.getLong()));
                     } else {
                         builder.add(key, new 
JsonNumberImpl(parser.getBigDecimal()));

http://git-wip-us.apache.org/repos/asf/johnzon/blob/5852983b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
----------------------------------------------------------------------
diff --git 
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java 
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
index 876ec78..6f34368 100644
--- 
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
+++ 
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
@@ -838,6 +838,10 @@ public class JsonStreamParserImpl implements JsonChars, 
JsonParser{
         }
     }
 
+    boolean isNotTooLong() {
+        return (endOfValueInBuffer - startOfValueInBuffer) < 19;
+    }
+
     @Override
     public int getInt() {
         if (previousEvent != VALUE_NUMBER) {

http://git-wip-us.apache.org/repos/asf/johnzon/blob/5852983b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonNumberTest.java
----------------------------------------------------------------------
diff --git 
a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonNumberTest.java 
b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonNumberTest.java
index b610995..55c3754 100644
--- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonNumberTest.java
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonNumberTest.java
@@ -18,13 +18,15 @@
  */
 package org.apache.johnzon.core;
 
-import java.math.BigInteger;
+import org.junit.Assert;
+import org.junit.Test;
 
 import javax.json.Json;
 import javax.json.JsonArray;
-
-import org.junit.Assert;
-import org.junit.Test;
+import javax.json.JsonNumber;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.math.BigInteger;
 
 
 
@@ -48,4 +50,12 @@ public class JsonNumberTest {
        
     }
 
+    @Test
+    public void testBigIntegerButFromJustALongTooLong() {
+        final StringWriter writer = new StringWriter();
+        Json.createGenerator(writer).writeStartObject().write("value", new 
BigInteger("10002000000000000000")).writeEnd().close();
+        final String asJson = writer.toString();
+        final JsonNumber jsonNumber = Json.createReader(new 
StringReader(asJson)).readObject().getJsonNumber("value");
+        Assert.assertEquals(new BigInteger("10002000000000000000"), 
jsonNumber.bigIntegerValue());
+    }
 }

Reply via email to