Skip to content

Commit 0c7e399

Browse files
committed
Merge pull request google#818 from google/gsoncontext_refactoring
moved the JsonSerializationContext/JsonDeserializationContext fields …
2 parents ee8d6be + 34d7521 commit 0c7e399

File tree

3 files changed

+31
-22
lines changed

3 files changed

+31
-22
lines changed

gson/src/main/java/com/google/gson/Gson.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -133,22 +133,6 @@ public final class Gson {
133133
private final boolean prettyPrinting;
134134
private final boolean lenient;
135135

136-
final JsonDeserializationContext deserializationContext = new JsonDeserializationContext() {
137-
@SuppressWarnings("unchecked")
138-
@Override public <T> T deserialize(JsonElement json, Type typeOfT) throws JsonParseException {
139-
return (T) fromJson(json, typeOfT);
140-
}
141-
};
142-
143-
final JsonSerializationContext serializationContext = new JsonSerializationContext() {
144-
@Override public JsonElement serialize(Object src) {
145-
return toJsonTree(src);
146-
}
147-
@Override public JsonElement serialize(Object src, Type typeOfSrc) {
148-
return toJsonTree(src, typeOfSrc);
149-
}
150-
};
151-
152136
/**
153137
* Constructs a Gson object with default configuration. The default configuration has the
154138
* following settings:

gson/src/main/java/com/google/gson/GsonBuilder.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
import com.google.gson.internal.$Gson$Preconditions;
3131
import com.google.gson.internal.Excluder;
32+
import com.google.gson.internal.bind.TreeTypeAdapter;
3233
import com.google.gson.internal.bind.TypeAdapters;
3334
import com.google.gson.reflect.TypeToken;
3435

gson/src/main/java/com/google/gson/TreeTypeAdapter.java renamed to gson/src/main/java/com/google/gson/internal/bind/TreeTypeAdapter.java

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,31 +14,42 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.google.gson;
17+
package com.google.gson.internal.bind;
1818

19+
import com.google.gson.Gson;
20+
import com.google.gson.JsonDeserializationContext;
21+
import com.google.gson.JsonDeserializer;
22+
import com.google.gson.JsonElement;
23+
import com.google.gson.JsonParseException;
24+
import com.google.gson.JsonSerializationContext;
25+
import com.google.gson.JsonSerializer;
26+
import com.google.gson.TypeAdapter;
27+
import com.google.gson.TypeAdapterFactory;
1928
import com.google.gson.internal.$Gson$Preconditions;
2029
import com.google.gson.internal.Streams;
2130
import com.google.gson.reflect.TypeToken;
2231
import com.google.gson.stream.JsonReader;
2332
import com.google.gson.stream.JsonWriter;
2433
import java.io.IOException;
34+
import java.lang.reflect.Type;
2535

2636
/**
2737
* Adapts a Gson 1.x tree-style adapter as a streaming TypeAdapter. Since the
2838
* tree adapter may be serialization-only or deserialization-only, this class
2939
* has a facility to lookup a delegate type adapter on demand.
3040
*/
31-
final class TreeTypeAdapter<T> extends TypeAdapter<T> {
41+
public final class TreeTypeAdapter<T> extends TypeAdapter<T> {
3242
private final JsonSerializer<T> serializer;
3343
private final JsonDeserializer<T> deserializer;
3444
private final Gson gson;
3545
private final TypeToken<T> typeToken;
3646
private final TypeAdapterFactory skipPast;
47+
private final GsonContextImpl context = new GsonContextImpl();
3748

3849
/** The delegate is lazily created because it may not be needed, and creating it may fail. */
3950
private TypeAdapter<T> delegate;
4051

41-
TreeTypeAdapter(JsonSerializer<T> serializer, JsonDeserializer<T> deserializer,
52+
public TreeTypeAdapter(JsonSerializer<T> serializer, JsonDeserializer<T> deserializer,
4253
Gson gson, TypeToken<T> typeToken, TypeAdapterFactory skipPast) {
4354
this.serializer = serializer;
4455
this.deserializer = deserializer;
@@ -55,7 +66,7 @@ final class TreeTypeAdapter<T> extends TypeAdapter<T> {
5566
if (value.isJsonNull()) {
5667
return null;
5768
}
58-
return deserializer.deserialize(value, typeToken.getType(), gson.deserializationContext);
69+
return deserializer.deserialize(value, typeToken.getType(), context);
5970
}
6071

6172
@Override public void write(JsonWriter out, T value) throws IOException {
@@ -67,7 +78,7 @@ final class TreeTypeAdapter<T> extends TypeAdapter<T> {
6778
out.nullValue();
6879
return;
6980
}
70-
JsonElement tree = serializer.serialize(value, typeToken.getType(), gson.serializationContext);
81+
JsonElement tree = serializer.serialize(value, typeToken.getType(), context);
7182
Streams.write(tree, out);
7283
}
7384

@@ -105,7 +116,7 @@ public static TypeAdapterFactory newTypeHierarchyFactory(
105116
return new SingleTypeFactory(typeAdapter, null, false, hierarchyType);
106117
}
107118

108-
private static class SingleTypeFactory implements TypeAdapterFactory {
119+
private static final class SingleTypeFactory implements TypeAdapterFactory {
109120
private final TypeToken<?> exactType;
110121
private final boolean matchRawType;
111122
private final Class<?> hierarchyType;
@@ -138,4 +149,17 @@ public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
138149
: null;
139150
}
140151
}
152+
153+
private final class GsonContextImpl implements JsonSerializationContext, JsonDeserializationContext {
154+
@Override public JsonElement serialize(Object src) {
155+
return gson.toJsonTree(src);
156+
}
157+
@Override public JsonElement serialize(Object src, Type typeOfSrc) {
158+
return gson.toJsonTree(src, typeOfSrc);
159+
}
160+
@SuppressWarnings("unchecked")
161+
@Override public <R> R deserialize(JsonElement json, Type typeOfT) throws JsonParseException {
162+
return (R) gson.fromJson(json, typeOfT);
163+
}
164+
};
141165
}

0 commit comments

Comments
 (0)