Skip to content

Commit 10bdd6d

Browse files
Simplify collection type adapters slightly. (#2791)
* Simplify collection type adapters slightly. By moving some computations to the factory, we can pass fewer parameters to the constructor. * Fix formatting.
1 parent ab9c54f commit 10bdd6d

File tree

2 files changed

+16
-18
lines changed

2 files changed

+16
-18
lines changed

gson/src/main/java/com/google/gson/internal/bind/CollectionTypeAdapterFactory.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,12 @@ public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) {
4949

5050
Type elementType = $Gson$Types.getCollectionElementType(type, rawType);
5151
TypeAdapter<?> elementTypeAdapter = gson.getAdapter(TypeToken.get(elementType));
52+
TypeAdapter<?> wrappedTypeAdapter =
53+
new TypeAdapterRuntimeTypeWrapper<>(gson, elementTypeAdapter, elementType);
5254
ObjectConstructor<T> constructor = constructorConstructor.get(typeToken);
5355

5456
@SuppressWarnings({"unchecked", "rawtypes"}) // create() doesn't define a type parameter
55-
TypeAdapter<T> result = new Adapter(gson, elementType, elementTypeAdapter, constructor);
57+
TypeAdapter<T> result = new Adapter(wrappedTypeAdapter, constructor);
5658
return result;
5759
}
5860

@@ -61,12 +63,8 @@ private static final class Adapter<E> extends TypeAdapter<Collection<E>> {
6163
private final ObjectConstructor<? extends Collection<E>> constructor;
6264

6365
public Adapter(
64-
Gson context,
65-
Type elementType,
66-
TypeAdapter<E> elementTypeAdapter,
67-
ObjectConstructor<? extends Collection<E>> constructor) {
68-
this.elementTypeAdapter =
69-
new TypeAdapterRuntimeTypeWrapper<>(context, elementTypeAdapter, elementType);
66+
TypeAdapter<E> elementTypeAdapter, ObjectConstructor<? extends Collection<E>> constructor) {
67+
this.elementTypeAdapter = elementTypeAdapter;
7068
this.constructor = constructor;
7169
}
7270

gson/src/main/java/com/google/gson/internal/bind/MapTypeAdapterFactory.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -132,15 +132,19 @@ public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) {
132132
}
133133

134134
Type[] keyAndValueTypes = $Gson$Types.getMapKeyAndValueTypes(type, rawType);
135-
TypeAdapter<?> keyAdapter = getKeyAdapter(gson, keyAndValueTypes[0]);
136-
TypeAdapter<?> valueAdapter = gson.getAdapter(TypeToken.get(keyAndValueTypes[1]));
135+
Type keyType = keyAndValueTypes[0];
136+
Type valueType = keyAndValueTypes[1];
137+
TypeAdapter<?> keyAdapter = getKeyAdapter(gson, keyType);
138+
TypeAdapter<?> wrappedKeyAdapter =
139+
new TypeAdapterRuntimeTypeWrapper<>(gson, keyAdapter, keyType);
140+
TypeAdapter<?> valueAdapter = gson.getAdapter(TypeToken.get(valueType));
141+
TypeAdapter<?> wrappedValueAdapter =
142+
new TypeAdapterRuntimeTypeWrapper<>(gson, valueAdapter, valueType);
137143
ObjectConstructor<T> constructor = constructorConstructor.get(typeToken);
138144

139145
@SuppressWarnings({"unchecked", "rawtypes"})
140146
// we don't define a type parameter for the key or value types
141-
TypeAdapter<T> result =
142-
new Adapter(
143-
gson, keyAndValueTypes[0], keyAdapter, keyAndValueTypes[1], valueAdapter, constructor);
147+
TypeAdapter<T> result = new Adapter(wrappedKeyAdapter, wrappedValueAdapter, constructor);
144148
return result;
145149
}
146150

@@ -157,15 +161,11 @@ private final class Adapter<K, V> extends TypeAdapter<Map<K, V>> {
157161
private final ObjectConstructor<? extends Map<K, V>> constructor;
158162

159163
public Adapter(
160-
Gson context,
161-
Type keyType,
162164
TypeAdapter<K> keyTypeAdapter,
163-
Type valueType,
164165
TypeAdapter<V> valueTypeAdapter,
165166
ObjectConstructor<? extends Map<K, V>> constructor) {
166-
this.keyTypeAdapter = new TypeAdapterRuntimeTypeWrapper<>(context, keyTypeAdapter, keyType);
167-
this.valueTypeAdapter =
168-
new TypeAdapterRuntimeTypeWrapper<>(context, valueTypeAdapter, valueType);
167+
this.keyTypeAdapter = keyTypeAdapter;
168+
this.valueTypeAdapter = valueTypeAdapter;
169169
this.constructor = constructor;
170170
}
171171

0 commit comments

Comments
 (0)