in google-http-client-gson/src/main/java/com/google/api/client/json/gson/GsonParser.java [134:211]
public JsonToken nextToken() throws IOException {
if (currentToken != null) {
switch (currentToken) {
case START_ARRAY:
reader.beginArray();
currentNameStack.add(null);
break;
case START_OBJECT:
reader.beginObject();
currentNameStack.add(null);
break;
default:
break;
}
}
// work around bug in GSON parser that it throws an EOFException for an empty document
// see http://code.google.com/p/google-gson/issues/detail?id=330
com.google.gson.stream.JsonToken peek;
try {
peek = reader.peek();
} catch (EOFException e) {
peek = com.google.gson.stream.JsonToken.END_DOCUMENT;
}
switch (peek) {
case BEGIN_ARRAY:
currentText = "[";
currentToken = JsonToken.START_ARRAY;
break;
case END_ARRAY:
currentText = "]";
currentToken = JsonToken.END_ARRAY;
currentNameStack.remove(currentNameStack.size() - 1);
reader.endArray();
break;
case BEGIN_OBJECT:
currentText = "{";
currentToken = JsonToken.START_OBJECT;
break;
case END_OBJECT:
currentText = "}";
currentToken = JsonToken.END_OBJECT;
currentNameStack.remove(currentNameStack.size() - 1);
reader.endObject();
break;
case BOOLEAN:
if (reader.nextBoolean()) {
currentText = "true";
currentToken = JsonToken.VALUE_TRUE;
} else {
currentText = "false";
currentToken = JsonToken.VALUE_FALSE;
}
break;
case NULL:
currentText = "null";
currentToken = JsonToken.VALUE_NULL;
reader.nextNull();
break;
case STRING:
currentText = reader.nextString();
currentToken = JsonToken.VALUE_STRING;
break;
case NUMBER:
currentText = reader.nextString();
currentToken = currentText.indexOf('.') == -1
? JsonToken.VALUE_NUMBER_INT : JsonToken.VALUE_NUMBER_FLOAT;
break;
case NAME:
currentText = reader.nextName();
currentToken = JsonToken.FIELD_NAME;
currentNameStack.set(currentNameStack.size() - 1, currentText);
break;
default:
currentText = null;
currentToken = null;
}
return currentToken;
}