From b5453925011770e455cde86ea773a6ad9743b3fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89amonn=20McManus?= Date: Mon, 27 Jan 2025 16:27:09 -0800 Subject: [PATCH 1/2] Simplify collection type adapters slightly. By moving some computations to the factory, we can pass fewer parameters to the constructor. --- .../bind/CollectionTypeAdapterFactory.java | 9 ++++---- .../internal/bind/MapTypeAdapterFactory.java | 22 +++++++++---------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/gson/src/main/java/com/google/gson/internal/bind/CollectionTypeAdapterFactory.java b/gson/src/main/java/com/google/gson/internal/bind/CollectionTypeAdapterFactory.java index 1286d9beea..6d9fae8aa1 100644 --- a/gson/src/main/java/com/google/gson/internal/bind/CollectionTypeAdapterFactory.java +++ b/gson/src/main/java/com/google/gson/internal/bind/CollectionTypeAdapterFactory.java @@ -49,10 +49,12 @@ public TypeAdapter create(Gson gson, TypeToken typeToken) { Type elementType = $Gson$Types.getCollectionElementType(type, rawType); TypeAdapter elementTypeAdapter = gson.getAdapter(TypeToken.get(elementType)); + TypeAdapter wrappedTypeAdapter = + new TypeAdapterRuntimeTypeWrapper<>(gson, elementTypeAdapter, elementType); ObjectConstructor constructor = constructorConstructor.get(typeToken); @SuppressWarnings({"unchecked", "rawtypes"}) // create() doesn't define a type parameter - TypeAdapter result = new Adapter(gson, elementType, elementTypeAdapter, constructor); + TypeAdapter result = new Adapter(wrappedTypeAdapter, constructor); return result; } @@ -61,12 +63,9 @@ private static final class Adapter extends TypeAdapter> { private final ObjectConstructor> constructor; public Adapter( - Gson context, - Type elementType, TypeAdapter elementTypeAdapter, ObjectConstructor> constructor) { - this.elementTypeAdapter = - new TypeAdapterRuntimeTypeWrapper<>(context, elementTypeAdapter, elementType); + this.elementTypeAdapter = elementTypeAdapter; this.constructor = constructor; } diff --git a/gson/src/main/java/com/google/gson/internal/bind/MapTypeAdapterFactory.java b/gson/src/main/java/com/google/gson/internal/bind/MapTypeAdapterFactory.java index 56de0ea3a8..6b0996e936 100644 --- a/gson/src/main/java/com/google/gson/internal/bind/MapTypeAdapterFactory.java +++ b/gson/src/main/java/com/google/gson/internal/bind/MapTypeAdapterFactory.java @@ -132,15 +132,19 @@ public TypeAdapter create(Gson gson, TypeToken typeToken) { } Type[] keyAndValueTypes = $Gson$Types.getMapKeyAndValueTypes(type, rawType); - TypeAdapter keyAdapter = getKeyAdapter(gson, keyAndValueTypes[0]); - TypeAdapter valueAdapter = gson.getAdapter(TypeToken.get(keyAndValueTypes[1])); + Type keyType = keyAndValueTypes[0]; + Type valueType = keyAndValueTypes[1]; + TypeAdapter keyAdapter = getKeyAdapter(gson, keyType); + TypeAdapter wrappedKeyAdapter = + new TypeAdapterRuntimeTypeWrapper<>(gson, keyAdapter, keyType); + TypeAdapter valueAdapter = gson.getAdapter(TypeToken.get(valueType)); + TypeAdapter wrappedValueAdapter = + new TypeAdapterRuntimeTypeWrapper<>(gson, valueAdapter, valueType); ObjectConstructor constructor = constructorConstructor.get(typeToken); @SuppressWarnings({"unchecked", "rawtypes"}) // we don't define a type parameter for the key or value types - TypeAdapter result = - new Adapter( - gson, keyAndValueTypes[0], keyAdapter, keyAndValueTypes[1], valueAdapter, constructor); + TypeAdapter result = new Adapter(wrappedKeyAdapter, wrappedValueAdapter, constructor); return result; } @@ -157,15 +161,11 @@ private final class Adapter extends TypeAdapter> { private final ObjectConstructor> constructor; public Adapter( - Gson context, - Type keyType, TypeAdapter keyTypeAdapter, - Type valueType, TypeAdapter valueTypeAdapter, ObjectConstructor> constructor) { - this.keyTypeAdapter = new TypeAdapterRuntimeTypeWrapper<>(context, keyTypeAdapter, keyType); - this.valueTypeAdapter = - new TypeAdapterRuntimeTypeWrapper<>(context, valueTypeAdapter, valueType); + this.keyTypeAdapter = keyTypeAdapter; + this.valueTypeAdapter = valueTypeAdapter; this.constructor = constructor; } From 02b6d44883ebb03425db6420c0456e70105a1cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89amonn=20McManus?= Date: Mon, 27 Jan 2025 16:30:32 -0800 Subject: [PATCH 2/2] Fix formatting. --- .../gson/internal/bind/CollectionTypeAdapterFactory.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gson/src/main/java/com/google/gson/internal/bind/CollectionTypeAdapterFactory.java b/gson/src/main/java/com/google/gson/internal/bind/CollectionTypeAdapterFactory.java index 6d9fae8aa1..9dfc7bc9bc 100644 --- a/gson/src/main/java/com/google/gson/internal/bind/CollectionTypeAdapterFactory.java +++ b/gson/src/main/java/com/google/gson/internal/bind/CollectionTypeAdapterFactory.java @@ -63,8 +63,7 @@ private static final class Adapter extends TypeAdapter> { private final ObjectConstructor> constructor; public Adapter( - TypeAdapter elementTypeAdapter, - ObjectConstructor> constructor) { + TypeAdapter elementTypeAdapter, ObjectConstructor> constructor) { this.elementTypeAdapter = elementTypeAdapter; this.constructor = constructor; }