From 62a97023852f879eb5819c3ef0fb7e7fdda51bc7 Mon Sep 17 00:00:00 2001 From: Simon Guerout Date: Fri, 20 Aug 2021 16:02:18 -0400 Subject: [PATCH] Improve the speed of the JSON_ELEMENT TypeAdapter when the object graph has already been turned into a JsonElement --- .../com/google/gson/internal/bind/JsonTreeReader.java | 9 +++++++++ .../java/com/google/gson/internal/bind/TypeAdapters.java | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/gson/src/main/java/com/google/gson/internal/bind/JsonTreeReader.java b/gson/src/main/java/com/google/gson/internal/bind/JsonTreeReader.java index a223754a..986c927b 100644 --- a/gson/src/main/java/com/google/gson/internal/bind/JsonTreeReader.java +++ b/gson/src/main/java/com/google/gson/internal/bind/JsonTreeReader.java @@ -249,6 +249,15 @@ public final class JsonTreeReader extends JsonReader { return result; } + JsonElement nextJsonElement() throws IOException { + if (peek() == JsonToken.NAME) { + throw new IllegalStateException("Can't turn a name into a JsonElement"); + } + final JsonElement element = (JsonElement) peekStack(); + skipValue(); + return element; + } + @Override public void close() throws IOException { stack = new Object[] { SENTINEL_CLOSED }; stackSize = 1; diff --git a/gson/src/main/java/com/google/gson/internal/bind/TypeAdapters.java b/gson/src/main/java/com/google/gson/internal/bind/TypeAdapters.java index 6bbd680a..81dda903 100644 --- a/gson/src/main/java/com/google/gson/internal/bind/TypeAdapters.java +++ b/gson/src/main/java/com/google/gson/internal/bind/TypeAdapters.java @@ -677,6 +677,10 @@ public final class TypeAdapters { public static final TypeAdapter JSON_ELEMENT = new TypeAdapter() { @Override public JsonElement read(JsonReader in) throws IOException { + if (in instanceof JsonTreeReader) { + return ((JsonTreeReader) in).nextJsonElement(); + } + switch (in.peek()) { case STRING: return new JsonPrimitive(in.nextString());