Refactored the Async parser interface out of JsonParser into a new class JsonParserAsync. Updated the JsonParser to detect Eof and return a null instead of throwing a ParseException.
This commit is contained in:
parent
f2fd0b7d52
commit
6e59e502c2
|
@ -411,10 +411,7 @@ public final class Gson {
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public <T> T fromJson(Reader json, Type typeOfT) throws JsonParseException {
|
public <T> T fromJson(Reader json, Type typeOfT) throws JsonParseException {
|
||||||
JsonElement root = new JsonParser().parse(json);
|
JsonElement root = new JsonParser().parse(json);
|
||||||
JsonDeserializationContext context = new JsonDeserializationContextDefault(
|
return fromJson(root, typeOfT);
|
||||||
createDefaultObjectNavigatorFactory(), deserializers, objectConstructor);
|
|
||||||
T target = (T) context.deserialize(root, typeOfT);
|
|
||||||
return target;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -458,6 +455,9 @@ public final class Gson {
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public <T> T fromJson(JsonElement json, Type typeOfT) throws JsonParseException {
|
public <T> T fromJson(JsonElement json, Type typeOfT) throws JsonParseException {
|
||||||
|
if (json == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
JsonDeserializationContext context = new JsonDeserializationContextDefault(
|
JsonDeserializationContext context = new JsonDeserializationContextDefault(
|
||||||
createDefaultObjectNavigatorFactory(), deserializers, objectConstructor);
|
createDefaultObjectNavigatorFactory(), deserializers, objectConstructor);
|
||||||
T target = (T) context.deserialize(json, typeOfT);
|
T target = (T) context.deserialize(json, typeOfT);
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
*/
|
*/
|
||||||
package com.google.gson;
|
package com.google.gson;
|
||||||
|
|
||||||
|
import java.io.EOFException;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.io.StringReader;
|
import java.io.StringReader;
|
||||||
|
|
||||||
|
@ -27,21 +28,6 @@ import java.io.StringReader;
|
||||||
*/
|
*/
|
||||||
public final class JsonParser {
|
public final class JsonParser {
|
||||||
|
|
||||||
/**
|
|
||||||
* Interface to provide ability to read multiple {@link JsonElement}s from a stream
|
|
||||||
* asynchronously.
|
|
||||||
*
|
|
||||||
* @since 1.4
|
|
||||||
*/
|
|
||||||
public interface AsyncReader {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse and return one {@link JsonElement}
|
|
||||||
* @since 1.4
|
|
||||||
*/
|
|
||||||
public JsonElement readElement();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses the specified JSON string into a parse tree
|
* Parses the specified JSON string into a parse tree
|
||||||
*
|
*
|
||||||
|
@ -75,40 +61,11 @@ public final class JsonParser {
|
||||||
throw new JsonParseException("Failed parsing JSON source: " + json + " to Json", e);
|
throw new JsonParseException("Failed parsing JSON source: " + json + " to Json", e);
|
||||||
} catch (OutOfMemoryError e) {
|
} catch (OutOfMemoryError e) {
|
||||||
throw new JsonParseException("Failed parsing JSON source: " + json + " to Json", e);
|
throw new JsonParseException("Failed parsing JSON source: " + json + " to Json", e);
|
||||||
}
|
} catch (JsonParseException e) {
|
||||||
}
|
if (e.getCause() instanceof EOFException) {
|
||||||
|
return null;
|
||||||
/**
|
} else {
|
||||||
* Returns {@link AsyncReader} to allow reading of multiple {@link JsonElement}s from the
|
throw e;
|
||||||
* specified reader asynchronously.
|
|
||||||
*
|
|
||||||
* @param json The data stream containing JSON elements concatenated to each other.
|
|
||||||
* @return {@link AsyncReader} for reading {@link JsonElement}s asynchronously.
|
|
||||||
* @throws JsonParseException if the incoming stream is malformed JSON.
|
|
||||||
* @since 1.4
|
|
||||||
*/
|
|
||||||
public AsyncReader parseAsync(Reader json) throws JsonParseException {
|
|
||||||
return new AsyncReaderJavacc(json);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class AsyncReaderJavacc implements AsyncReader {
|
|
||||||
private final JsonParserJavacc parser;
|
|
||||||
private AsyncReaderJavacc(Reader json) {
|
|
||||||
parser = new JsonParserJavacc(json);
|
|
||||||
}
|
|
||||||
|
|
||||||
public JsonElement readElement() {
|
|
||||||
try {
|
|
||||||
JsonElement element = parser.parse();
|
|
||||||
return element;
|
|
||||||
} catch (TokenMgrError e) {
|
|
||||||
throw new JsonParseException("Failed parsing JSON source to Json", e);
|
|
||||||
} catch (ParseException e) {
|
|
||||||
throw new JsonParseException("Failed parsing JSON source to Json", e);
|
|
||||||
} catch (StackOverflowError e) {
|
|
||||||
throw new JsonParseException("Failed parsing JSON source to Json", e);
|
|
||||||
} catch (OutOfMemoryError e) {
|
|
||||||
throw new JsonParseException("Failed parsing JSON source to Json", e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
77
gson/src/main/java/com/google/gson/JsonParserAsync.java
Normal file
77
gson/src/main/java/com/google/gson/JsonParserAsync.java
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2009 Google Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.google.gson;
|
||||||
|
|
||||||
|
import java.io.EOFException;
|
||||||
|
import java.io.Reader;
|
||||||
|
import java.io.StringReader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A parser that allows reading of multiple {@link JsonElement}s from the specified reader
|
||||||
|
* asynchronously.
|
||||||
|
*
|
||||||
|
* @author Inderjeet Singh
|
||||||
|
* @author Joel Leitch
|
||||||
|
* @since 1.4
|
||||||
|
*/
|
||||||
|
public final class JsonParserAsync {
|
||||||
|
|
||||||
|
private final JsonParserJavacc parser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param json The string containing JSON elements concatenated to each other.
|
||||||
|
* @since 1.4
|
||||||
|
*/
|
||||||
|
public JsonParserAsync(String json) {
|
||||||
|
this(new StringReader(json));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param reader The data stream containing JSON elements concatenated to each other.
|
||||||
|
* @since 1.4
|
||||||
|
*/
|
||||||
|
public JsonParserAsync(Reader reader) {
|
||||||
|
parser = new JsonParserJavacc(reader);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the next available {@link JsonElement} on the reader. Null if none available.
|
||||||
|
*
|
||||||
|
* @return the next available {@link JsonElement} on the reader. Null if none available.
|
||||||
|
* @throws JsonParseException if the incoming stream is malformed JSON.
|
||||||
|
* @since 1.4
|
||||||
|
*/
|
||||||
|
public JsonElement nextElement() throws JsonParseException {
|
||||||
|
try {
|
||||||
|
JsonElement element = parser.parse();
|
||||||
|
return element;
|
||||||
|
} catch (TokenMgrError e) {
|
||||||
|
throw new JsonParseException("Failed parsing JSON source to Json", e);
|
||||||
|
} catch (ParseException e) {
|
||||||
|
throw new JsonParseException("Failed parsing JSON source to Json", e);
|
||||||
|
} catch (StackOverflowError e) {
|
||||||
|
throw new JsonParseException("Failed parsing JSON source to Json", e);
|
||||||
|
} catch (OutOfMemoryError e) {
|
||||||
|
throw new JsonParseException("Failed parsing JSON source to Json", e);
|
||||||
|
} catch (JsonParseException e) {
|
||||||
|
if (e.getCause() instanceof EOFException) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,11 +1,28 @@
|
||||||
/* Generated By:JavaCC: Do not edit this line. JsonParserJavacc.java */
|
/* Generated By:JavaCC: Do not edit this line. JsonParserJavacc.java */
|
||||||
package com.google.gson;
|
package com.google.gson;
|
||||||
|
import java.io.EOFException;
|
||||||
|
|
||||||
@SuppressWarnings("all")
|
@SuppressWarnings("all")
|
||||||
final class JsonParserJavacc implements JsonParserJavaccConstants {
|
final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
|
|
||||||
final public JsonElement parse() throws ParseException {
|
final public JsonElement parse() throws ParseException {
|
||||||
JsonElement json = null;
|
JsonElement json = null;
|
||||||
|
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
|
||||||
|
case 0:
|
||||||
|
jj_consume_token(0);
|
||||||
|
{if (true) throw new JsonParseException(new EOFException());}
|
||||||
|
break;
|
||||||
|
case DIGITS:
|
||||||
|
case NULL:
|
||||||
|
case NAN:
|
||||||
|
case INFINITY:
|
||||||
|
case BOOLEAN:
|
||||||
|
case SINGLE_QUOTE_LITERAL:
|
||||||
|
case DOUBLE_QUOTE_LITERAL:
|
||||||
|
case 26:
|
||||||
|
case 27:
|
||||||
|
case 31:
|
||||||
|
case 33:
|
||||||
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
|
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
|
||||||
case 26:
|
case 26:
|
||||||
jj_consume_token(26);
|
jj_consume_token(26);
|
||||||
|
@ -39,6 +56,12 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
throw new ParseException();
|
throw new ParseException();
|
||||||
}
|
}
|
||||||
{if (true) return json;}
|
{if (true) return json;}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
jj_la1[2] = jj_gen;
|
||||||
|
jj_consume_token(-1);
|
||||||
|
throw new ParseException();
|
||||||
|
}
|
||||||
throw new Error("Missing return statement in function");
|
throw new Error("Missing return statement in function");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,7 +76,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
Members(o);
|
Members(o);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
jj_la1[2] = jj_gen;
|
jj_la1[3] = jj_gen;
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
jj_consume_token(28);
|
jj_consume_token(28);
|
||||||
|
@ -76,7 +99,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
Members(o);
|
Members(o);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
jj_la1[3] = jj_gen;
|
jj_la1[4] = jj_gen;
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -104,7 +127,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
{if (true) return value;}
|
{if (true) return value;}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
jj_la1[4] = jj_gen;
|
jj_la1[5] = jj_gen;
|
||||||
jj_consume_token(-1);
|
jj_consume_token(-1);
|
||||||
throw new ParseException();
|
throw new ParseException();
|
||||||
}
|
}
|
||||||
|
@ -128,7 +151,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
Elements(array);
|
Elements(array);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
jj_la1[5] = jj_gen;
|
jj_la1[6] = jj_gen;
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
jj_consume_token(32);
|
jj_consume_token(32);
|
||||||
|
@ -146,7 +169,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
Elements(array);
|
Elements(array);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
jj_la1[6] = jj_gen;
|
jj_la1[7] = jj_gen;
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
array.add(element);
|
array.add(element);
|
||||||
|
@ -178,7 +201,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
o = JsonNull();
|
o = JsonNull();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
jj_la1[7] = jj_gen;
|
jj_la1[8] = jj_gen;
|
||||||
jj_consume_token(-1);
|
jj_consume_token(-1);
|
||||||
throw new ParseException();
|
throw new ParseException();
|
||||||
}
|
}
|
||||||
|
@ -214,7 +237,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
{if (true) return value;}
|
{if (true) return value;}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
jj_la1[8] = jj_gen;
|
jj_la1[9] = jj_gen;
|
||||||
jj_consume_token(-1);
|
jj_consume_token(-1);
|
||||||
throw new ParseException();
|
throw new ParseException();
|
||||||
}
|
}
|
||||||
|
@ -239,7 +262,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
fracpart = JsonFrac();
|
fracpart = JsonFrac();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
jj_la1[9] = jj_gen;
|
jj_la1[10] = jj_gen;
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
|
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
|
||||||
|
@ -247,7 +270,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
exppart = JsonExp();
|
exppart = JsonExp();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
jj_la1[10] = jj_gen;
|
jj_la1[11] = jj_gen;
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
Number n;
|
Number n;
|
||||||
|
@ -261,7 +284,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
{if (true) return new JsonPrimitive(n);}
|
{if (true) return new JsonPrimitive(n);}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
jj_la1[11] = jj_gen;
|
jj_la1[12] = jj_gen;
|
||||||
jj_consume_token(-1);
|
jj_consume_token(-1);
|
||||||
throw new ParseException();
|
throw new ParseException();
|
||||||
}
|
}
|
||||||
|
@ -284,14 +307,14 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
negative = true;
|
negative = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
jj_la1[12] = jj_gen;
|
jj_la1[13] = jj_gen;
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
jj_consume_token(INFINITY);
|
jj_consume_token(INFINITY);
|
||||||
{if (true) return new JsonPrimitive(negative ? Double.NEGATIVE_INFINITY : Double.POSITIVE_INFINITY);}
|
{if (true) return new JsonPrimitive(negative ? Double.NEGATIVE_INFINITY : Double.POSITIVE_INFINITY);}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
jj_la1[13] = jj_gen;
|
jj_la1[14] = jj_gen;
|
||||||
jj_consume_token(-1);
|
jj_consume_token(-1);
|
||||||
throw new ParseException();
|
throw new ParseException();
|
||||||
}
|
}
|
||||||
|
@ -307,7 +330,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
negative = true;
|
negative = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
jj_la1[14] = jj_gen;
|
jj_la1[15] = jj_gen;
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
digits = Digits();
|
digits = Digits();
|
||||||
|
@ -342,7 +365,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
t = jj_consume_token(IDENTIFIER_SANS_EXPONENT);
|
t = jj_consume_token(IDENTIFIER_SANS_EXPONENT);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
jj_la1[15] = jj_gen;
|
jj_la1[16] = jj_gen;
|
||||||
jj_consume_token(-1);
|
jj_consume_token(-1);
|
||||||
throw new ParseException();
|
throw new ParseException();
|
||||||
}
|
}
|
||||||
|
@ -367,7 +390,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
t = jj_consume_token(DOUBLE_QUOTE_LITERAL);
|
t = jj_consume_token(DOUBLE_QUOTE_LITERAL);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
jj_la1[16] = jj_gen;
|
jj_la1[17] = jj_gen;
|
||||||
jj_consume_token(-1);
|
jj_consume_token(-1);
|
||||||
throw new ParseException();
|
throw new ParseException();
|
||||||
}
|
}
|
||||||
|
@ -427,7 +450,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
private Token jj_scanpos, jj_lastpos;
|
private Token jj_scanpos, jj_lastpos;
|
||||||
private int jj_la;
|
private int jj_la;
|
||||||
private int jj_gen;
|
private int jj_gen;
|
||||||
final private int[] jj_la1 = new int[17];
|
final private int[] jj_la1 = new int[18];
|
||||||
static private int[] jj_la1_0;
|
static private int[] jj_la1_0;
|
||||||
static private int[] jj_la1_1;
|
static private int[] jj_la1_1;
|
||||||
static {
|
static {
|
||||||
|
@ -435,10 +458,10 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
jj_la1_init_1();
|
jj_la1_init_1();
|
||||||
}
|
}
|
||||||
private static void jj_la1_init_0() {
|
private static void jj_la1_init_0() {
|
||||||
jj_la1_0 = new int[] {0x4000000,0x880307c0,0x31800,0x20000000,0x31800,0x880307c0,0x20000000,0x880307c0,0x30740,0x0,0x20,0x40,0x0,0x300,0x0,0x1800,0x30000,};
|
jj_la1_0 = new int[] {0x4000000,0x880307c0,0x8c0307c1,0x31800,0x20000000,0x31800,0x880307c0,0x20000000,0x880307c0,0x30740,0x0,0x20,0x40,0x0,0x300,0x0,0x1800,0x30000,};
|
||||||
}
|
}
|
||||||
private static void jj_la1_init_1() {
|
private static void jj_la1_init_1() {
|
||||||
jj_la1_1 = new int[] {0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x2,0x2,0x4,0x0,0x2,0x2,0x2,0x2,0x0,0x0,};
|
jj_la1_1 = new int[] {0x0,0x2,0x2,0x0,0x0,0x0,0x2,0x0,0x2,0x2,0x4,0x0,0x2,0x2,0x2,0x2,0x0,0x0,};
|
||||||
}
|
}
|
||||||
final private JJCalls[] jj_2_rtns = new JJCalls[1];
|
final private JJCalls[] jj_2_rtns = new JJCalls[1];
|
||||||
private boolean jj_rescan = false;
|
private boolean jj_rescan = false;
|
||||||
|
@ -455,7 +478,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
token = new Token();
|
token = new Token();
|
||||||
jj_ntk = -1;
|
jj_ntk = -1;
|
||||||
jj_gen = 0;
|
jj_gen = 0;
|
||||||
for (int i = 0; i < 17; i++) jj_la1[i] = -1;
|
for (int i = 0; i < 18; i++) jj_la1[i] = -1;
|
||||||
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
|
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -470,7 +493,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
token = new Token();
|
token = new Token();
|
||||||
jj_ntk = -1;
|
jj_ntk = -1;
|
||||||
jj_gen = 0;
|
jj_gen = 0;
|
||||||
for (int i = 0; i < 17; i++) jj_la1[i] = -1;
|
for (int i = 0; i < 18; i++) jj_la1[i] = -1;
|
||||||
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
|
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -481,7 +504,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
token = new Token();
|
token = new Token();
|
||||||
jj_ntk = -1;
|
jj_ntk = -1;
|
||||||
jj_gen = 0;
|
jj_gen = 0;
|
||||||
for (int i = 0; i < 17; i++) jj_la1[i] = -1;
|
for (int i = 0; i < 18; i++) jj_la1[i] = -1;
|
||||||
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
|
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -492,7 +515,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
token = new Token();
|
token = new Token();
|
||||||
jj_ntk = -1;
|
jj_ntk = -1;
|
||||||
jj_gen = 0;
|
jj_gen = 0;
|
||||||
for (int i = 0; i < 17; i++) jj_la1[i] = -1;
|
for (int i = 0; i < 18; i++) jj_la1[i] = -1;
|
||||||
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
|
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -502,7 +525,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
token = new Token();
|
token = new Token();
|
||||||
jj_ntk = -1;
|
jj_ntk = -1;
|
||||||
jj_gen = 0;
|
jj_gen = 0;
|
||||||
for (int i = 0; i < 17; i++) jj_la1[i] = -1;
|
for (int i = 0; i < 18; i++) jj_la1[i] = -1;
|
||||||
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
|
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -512,7 +535,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
token = new Token();
|
token = new Token();
|
||||||
jj_ntk = -1;
|
jj_ntk = -1;
|
||||||
jj_gen = 0;
|
jj_gen = 0;
|
||||||
for (int i = 0; i < 17; i++) jj_la1[i] = -1;
|
for (int i = 0; i < 18; i++) jj_la1[i] = -1;
|
||||||
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
|
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -629,7 +652,7 @@ final class JsonParserJavacc implements JsonParserJavaccConstants {
|
||||||
la1tokens[jj_kind] = true;
|
la1tokens[jj_kind] = true;
|
||||||
jj_kind = -1;
|
jj_kind = -1;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < 17; i++) {
|
for (int i = 0; i < 18; i++) {
|
||||||
if (jj_la1[i] == jj_gen) {
|
if (jj_la1[i] == jj_gen) {
|
||||||
for (int j = 0; j < 32; j++) {
|
for (int j = 0; j < 32; j++) {
|
||||||
if ((jj_la1_0[i] & (1<<j)) != 0) {
|
if ((jj_la1_0[i] & (1<<j)) != 0) {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/* Generated By:JavaCC: Do not edit this line. JsonParserJavaccTokenManager.java */
|
/* Generated By:JavaCC: Do not edit this line. JsonParserJavaccTokenManager.java */
|
||||||
package com.google.gson;
|
package com.google.gson;
|
||||||
|
import java.io.EOFException;
|
||||||
|
|
||||||
/** Token Manager. */
|
/** Token Manager. */
|
||||||
@SuppressWarnings("all")
|
@SuppressWarnings("all")
|
||||||
|
|
|
@ -12,6 +12,7 @@ options {
|
||||||
PARSER_BEGIN(JsonParserJavacc)
|
PARSER_BEGIN(JsonParserJavacc)
|
||||||
|
|
||||||
package com.google.gson;
|
package com.google.gson;
|
||||||
|
import java.io.EOFException;
|
||||||
|
|
||||||
@SuppressWarnings("all")
|
@SuppressWarnings("all")
|
||||||
final class JsonParserJavacc {
|
final class JsonParserJavacc {
|
||||||
|
@ -60,6 +61,9 @@ public JsonElement parse() :
|
||||||
JsonElement json = null;
|
JsonElement json = null;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
(<EOF>){
|
||||||
|
throw new JsonParseException(new EOFException());
|
||||||
|
} |
|
||||||
[")]}'\n"]( json=JsonObject() |
|
[")]}'\n"]( json=JsonObject() |
|
||||||
json=JsonArray() |
|
json=JsonArray() |
|
||||||
json=JsonPrimitive() |
|
json=JsonPrimitive() |
|
||||||
|
|
19
gson/src/test/java/com/google/gson/JsonParserAsyncTest.java
Normal file
19
gson/src/test/java/com/google/gson/JsonParserAsyncTest.java
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
package com.google.gson;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unit tests for {@link JsonParserAsync}
|
||||||
|
*
|
||||||
|
* @author Inderjeet Singh
|
||||||
|
*/
|
||||||
|
public class JsonParserAsyncTest extends TestCase {
|
||||||
|
|
||||||
|
public void testParseTwoStrings() {
|
||||||
|
JsonParserAsync parser = new JsonParserAsync("'one' 'two'");
|
||||||
|
String actualOne = parser.nextElement().getAsString();
|
||||||
|
assertEquals("one", actualOne);
|
||||||
|
String actualTwo = parser.nextElement().getAsString();
|
||||||
|
assertEquals("two", actualTwo);
|
||||||
|
}
|
||||||
|
}
|
|
@ -178,11 +178,8 @@ public class ObjectTest extends TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testNullDeserialization() throws Exception {
|
public void testNullDeserialization() throws Exception {
|
||||||
try {
|
Object object = gson.fromJson("", Object.class);
|
||||||
gson.fromJson("", Object.class);
|
assertNull(object);
|
||||||
fail("Null strings should not be allowed");
|
|
||||||
} catch (JsonParseException expected) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testNullFieldsSerialization() throws Exception {
|
public void testNullFieldsSerialization() throws Exception {
|
||||||
|
|
|
@ -17,9 +17,8 @@ package com.google.gson.functional;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
import com.google.gson.JsonParseException;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParserAsync;
|
||||||
import com.google.gson.JsonParser.AsyncReader;
|
|
||||||
import com.google.gson.common.TestTypes.BagOfPrimitives;
|
import com.google.gson.common.TestTypes.BagOfPrimitives;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
@ -93,11 +92,10 @@ public class ReadersWritersTest extends TestCase {
|
||||||
writer.write(gson.toJson("one").toCharArray());
|
writer.write(gson.toJson("one").toCharArray());
|
||||||
writer.write(gson.toJson("two").toCharArray());
|
writer.write(gson.toJson("two").toCharArray());
|
||||||
CharArrayReader reader = new CharArrayReader(writer.toCharArray());
|
CharArrayReader reader = new CharArrayReader(writer.toCharArray());
|
||||||
JsonParser parser = new JsonParser();
|
JsonParserAsync parser = new JsonParserAsync(reader);
|
||||||
AsyncReader asyncReader = parser.parseAsync(reader);
|
String actualOne = gson.fromJson(parser.nextElement(), String.class);
|
||||||
String actualOne = gson.fromJson(asyncReader.readElement(), String.class);
|
|
||||||
assertEquals("one", actualOne);
|
assertEquals("one", actualOne);
|
||||||
String actualTwo = gson.fromJson(asyncReader.readElement(), String.class);
|
String actualTwo = gson.fromJson(parser.nextElement(), String.class);
|
||||||
assertEquals("two", actualTwo);
|
assertEquals("two", actualTwo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,11 +107,11 @@ public class ReadersWritersTest extends TestCase {
|
||||||
BagOfPrimitives expectedTwo = new BagOfPrimitives(2, 2, false, "two");
|
BagOfPrimitives expectedTwo = new BagOfPrimitives(2, 2, false, "two");
|
||||||
writer.write(gson.toJson(expectedTwo).toCharArray());
|
writer.write(gson.toJson(expectedTwo).toCharArray());
|
||||||
CharArrayReader reader = new CharArrayReader(writer.toCharArray());
|
CharArrayReader reader = new CharArrayReader(writer.toCharArray());
|
||||||
JsonParser parser = new JsonParser();
|
JsonParserAsync parser = new JsonParserAsync(reader);
|
||||||
AsyncReader asyncReader = parser.parseAsync(reader);
|
BagOfPrimitives actualOne = gson.fromJson(parser.nextElement(), BagOfPrimitives.class);
|
||||||
BagOfPrimitives actualOne = gson.fromJson(asyncReader.readElement(), BagOfPrimitives.class);
|
|
||||||
assertEquals("one", actualOne.stringValue);
|
assertEquals("one", actualOne.stringValue);
|
||||||
BagOfPrimitives actualTwo = gson.fromJson(asyncReader.readElement(), BagOfPrimitives.class);
|
BagOfPrimitives actualTwo = gson.fromJson(parser.nextElement(), BagOfPrimitives.class);
|
||||||
assertEquals("two", actualTwo.stringValue);
|
assertEquals("two", actualTwo.stringValue);
|
||||||
|
JsonElement jsonElement = parser.nextElement();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user