From 7ae15659848ec44a1e081b25f2f2cead6497677d Mon Sep 17 00:00:00 2001 From: sb123sb123 <152394158+sb123sb123@users.noreply.github.com> Date: Tue, 22 Sep 2026 01:15:23 +0800 Subject: [PATCH 1/2] Use a larger buffer for implicit JSON output Fixes #2645 --- gson/src/main/java/com/google/gson/Gson.java | 10 ++++++++-- gson/src/main/java/com/google/gson/JsonElement.java | 2 +- gson/src/main/java/com/google/gson/TypeAdapter.java | 2 +- gson/src/test/java/com/google/gson/GsonTest.java | 5 +++++ 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/gson/src/main/java/com/google/gson/Gson.java b/gson/src/main/java/com/google/gson/Gson.java index 28ba4ae32f..879497b9c7 100644 --- a/gson/src/main/java/com/google/gson/Gson.java +++ b/gson/src/main/java/com/google/gson/Gson.java @@ -157,6 +157,12 @@ public final class Gson { private static final String JSON_NON_EXECUTABLE_PREFIX = ")]}'\n"; + private static final int DEFAULT_JSON_BUFFER_SIZE = 256; + + static StringBuilder newJsonStringBuilder() { + return new StringBuilder(DEFAULT_JSON_BUFFER_SIZE); + } + /** * This thread local guards against reentrant calls to {@link #getAdapter(TypeToken)}. In certain * object graphs, creating an adapter for a type may recursively require an adapter for the same @@ -588,7 +594,7 @@ public String toJson(Object src) { * @see #toJson(Object) */ public String toJson(Object src, Type typeOfSrc) { - StringBuilder writer = new StringBuilder(); + StringBuilder writer = newJsonStringBuilder(); toJson(src, typeOfSrc, writer); return writer.toString(); } @@ -706,7 +712,7 @@ public void toJson(Object src, Type typeOfSrc, JsonWriter writer) throws JsonIOE * @since 1.4 */ public String toJson(JsonElement jsonElement) { - StringBuilder writer = new StringBuilder(); + StringBuilder writer = newJsonStringBuilder(); toJson(jsonElement, writer); return writer.toString(); } diff --git a/gson/src/main/java/com/google/gson/JsonElement.java b/gson/src/main/java/com/google/gson/JsonElement.java index 127b96078c..ba33ef0849 100644 --- a/gson/src/main/java/com/google/gson/JsonElement.java +++ b/gson/src/main/java/com/google/gson/JsonElement.java @@ -420,7 +420,7 @@ public short getAsShort() { @Override public String toString() { try { - StringBuilder stringBuilder = new StringBuilder(); + StringBuilder stringBuilder = Gson.newJsonStringBuilder(); JsonWriter jsonWriter = new JsonWriter(Streams.writerForAppendable(stringBuilder)); // Make writer lenient because toString() must not fail, even if for example JsonPrimitive // contains NaN diff --git a/gson/src/main/java/com/google/gson/TypeAdapter.java b/gson/src/main/java/com/google/gson/TypeAdapter.java index 0c21c78e3b..6a22ba7ef6 100644 --- a/gson/src/main/java/com/google/gson/TypeAdapter.java +++ b/gson/src/main/java/com/google/gson/TypeAdapter.java @@ -158,7 +158,7 @@ public final void toJson(Writer out, T value) throws IOException { * @since 2.2 */ public final String toJson(T value) { - StringBuilder stringBuilder = new StringBuilder(); + StringBuilder stringBuilder = Gson.newJsonStringBuilder(); try { toJson(Streams.writerForAppendable(stringBuilder), value); } catch (IOException e) { diff --git a/gson/src/test/java/com/google/gson/GsonTest.java b/gson/src/test/java/com/google/gson/GsonTest.java index 2d00dd4d35..91ca003f7a 100644 --- a/gson/src/test/java/com/google/gson/GsonTest.java +++ b/gson/src/test/java/com/google/gson/GsonTest.java @@ -60,6 +60,11 @@ private static Gson createGson() { return gsonBuilder.create(); } + @Test + public void testDefaultJsonStringBuilderCapacity() { + assertThat(Gson.newJsonStringBuilder().capacity()).isEqualTo(256); + } + @Test public void testStrictnessDefault() { assertThat(new Gson().strictness).isNull(); From 9cc008976ca22aead466449c3275919d6e4093f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=B3=BB=E7=A5=8E?= Date: Thu, 1 Oct 2026 22:11:02 +0800 Subject: [PATCH 2/2] fix: keep Gson subset builds independent --- gson/src/main/java/com/google/gson/Gson.java | 10 ++-------- gson/src/main/java/com/google/gson/JsonElement.java | 9 ++++++++- gson/src/main/java/com/google/gson/TypeAdapter.java | 2 +- gson/src/test/java/com/google/gson/GsonTest.java | 2 +- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/gson/src/main/java/com/google/gson/Gson.java b/gson/src/main/java/com/google/gson/Gson.java index 879497b9c7..8d53e00acf 100644 --- a/gson/src/main/java/com/google/gson/Gson.java +++ b/gson/src/main/java/com/google/gson/Gson.java @@ -157,12 +157,6 @@ public final class Gson { private static final String JSON_NON_EXECUTABLE_PREFIX = ")]}'\n"; - private static final int DEFAULT_JSON_BUFFER_SIZE = 256; - - static StringBuilder newJsonStringBuilder() { - return new StringBuilder(DEFAULT_JSON_BUFFER_SIZE); - } - /** * This thread local guards against reentrant calls to {@link #getAdapter(TypeToken)}. In certain * object graphs, creating an adapter for a type may recursively require an adapter for the same @@ -594,7 +588,7 @@ public String toJson(Object src) { * @see #toJson(Object) */ public String toJson(Object src, Type typeOfSrc) { - StringBuilder writer = newJsonStringBuilder(); + StringBuilder writer = JsonElement.newJsonStringBuilder(); toJson(src, typeOfSrc, writer); return writer.toString(); } @@ -712,7 +706,7 @@ public void toJson(Object src, Type typeOfSrc, JsonWriter writer) throws JsonIOE * @since 1.4 */ public String toJson(JsonElement jsonElement) { - StringBuilder writer = newJsonStringBuilder(); + StringBuilder writer = JsonElement.newJsonStringBuilder(); toJson(jsonElement, writer); return writer.toString(); } diff --git a/gson/src/main/java/com/google/gson/JsonElement.java b/gson/src/main/java/com/google/gson/JsonElement.java index ba33ef0849..d35c321168 100644 --- a/gson/src/main/java/com/google/gson/JsonElement.java +++ b/gson/src/main/java/com/google/gson/JsonElement.java @@ -94,6 +94,9 @@ * @author Joel Leitch */ public abstract class JsonElement { + + private static final int DEFAULT_JSON_BUFFER_SIZE = 256; + /** * @deprecated Creating custom {@code JsonElement} subclasses is highly discouraged and can lead * to undefined behavior.
@@ -420,7 +423,7 @@ public short getAsShort() { @Override public String toString() { try { - StringBuilder stringBuilder = Gson.newJsonStringBuilder(); + StringBuilder stringBuilder = newJsonStringBuilder(); JsonWriter jsonWriter = new JsonWriter(Streams.writerForAppendable(stringBuilder)); // Make writer lenient because toString() must not fail, even if for example JsonPrimitive // contains NaN @@ -431,4 +434,8 @@ public String toString() { throw new AssertionError(e); } } + + static StringBuilder newJsonStringBuilder() { + return new StringBuilder(DEFAULT_JSON_BUFFER_SIZE); + } } diff --git a/gson/src/main/java/com/google/gson/TypeAdapter.java b/gson/src/main/java/com/google/gson/TypeAdapter.java index 6a22ba7ef6..1ab7c05c9d 100644 --- a/gson/src/main/java/com/google/gson/TypeAdapter.java +++ b/gson/src/main/java/com/google/gson/TypeAdapter.java @@ -158,7 +158,7 @@ public final void toJson(Writer out, T value) throws IOException { * @since 2.2 */ public final String toJson(T value) { - StringBuilder stringBuilder = Gson.newJsonStringBuilder(); + StringBuilder stringBuilder = JsonElement.newJsonStringBuilder(); try { toJson(Streams.writerForAppendable(stringBuilder), value); } catch (IOException e) { diff --git a/gson/src/test/java/com/google/gson/GsonTest.java b/gson/src/test/java/com/google/gson/GsonTest.java index 91ca003f7a..a298a4a40d 100644 --- a/gson/src/test/java/com/google/gson/GsonTest.java +++ b/gson/src/test/java/com/google/gson/GsonTest.java @@ -62,7 +62,7 @@ private static Gson createGson() { @Test public void testDefaultJsonStringBuilderCapacity() { - assertThat(Gson.newJsonStringBuilder().capacity()).isEqualTo(256); + assertThat(JsonElement.newJsonStringBuilder().capacity()).isEqualTo(256); } @Test