14
14
* limitations under the License.
15
15
*/
16
16
17
- package com .google .gson ;
17
+ package com .google .gson . internal . bind ;
18
18
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 ;
19
28
import com .google .gson .internal .$Gson$Preconditions ;
20
29
import com .google .gson .internal .Streams ;
21
30
import com .google .gson .reflect .TypeToken ;
22
31
import com .google .gson .stream .JsonReader ;
23
32
import com .google .gson .stream .JsonWriter ;
24
33
import java .io .IOException ;
34
+ import java .lang .reflect .Type ;
25
35
26
36
/**
27
37
* Adapts a Gson 1.x tree-style adapter as a streaming TypeAdapter. Since the
28
38
* tree adapter may be serialization-only or deserialization-only, this class
29
39
* has a facility to lookup a delegate type adapter on demand.
30
40
*/
31
- final class TreeTypeAdapter <T > extends TypeAdapter <T > {
41
+ public final class TreeTypeAdapter <T > extends TypeAdapter <T > {
32
42
private final JsonSerializer <T > serializer ;
33
43
private final JsonDeserializer <T > deserializer ;
34
44
private final Gson gson ;
35
45
private final TypeToken <T > typeToken ;
36
46
private final TypeAdapterFactory skipPast ;
47
+ private final GsonContextImpl context = new GsonContextImpl ();
37
48
38
49
/** The delegate is lazily created because it may not be needed, and creating it may fail. */
39
50
private TypeAdapter <T > delegate ;
40
51
41
- TreeTypeAdapter (JsonSerializer <T > serializer , JsonDeserializer <T > deserializer ,
52
+ public TreeTypeAdapter (JsonSerializer <T > serializer , JsonDeserializer <T > deserializer ,
42
53
Gson gson , TypeToken <T > typeToken , TypeAdapterFactory skipPast ) {
43
54
this .serializer = serializer ;
44
55
this .deserializer = deserializer ;
@@ -55,7 +66,7 @@ final class TreeTypeAdapter<T> extends TypeAdapter<T> {
55
66
if (value .isJsonNull ()) {
56
67
return null ;
57
68
}
58
- return deserializer .deserialize (value , typeToken .getType (), gson . deserializationContext );
69
+ return deserializer .deserialize (value , typeToken .getType (), context );
59
70
}
60
71
61
72
@ Override public void write (JsonWriter out , T value ) throws IOException {
@@ -67,7 +78,7 @@ final class TreeTypeAdapter<T> extends TypeAdapter<T> {
67
78
out .nullValue ();
68
79
return ;
69
80
}
70
- JsonElement tree = serializer .serialize (value , typeToken .getType (), gson . serializationContext );
81
+ JsonElement tree = serializer .serialize (value , typeToken .getType (), context );
71
82
Streams .write (tree , out );
72
83
}
73
84
@@ -105,7 +116,7 @@ public static TypeAdapterFactory newTypeHierarchyFactory(
105
116
return new SingleTypeFactory (typeAdapter , null , false , hierarchyType );
106
117
}
107
118
108
- private static class SingleTypeFactory implements TypeAdapterFactory {
119
+ private static final class SingleTypeFactory implements TypeAdapterFactory {
109
120
private final TypeToken <?> exactType ;
110
121
private final boolean matchRawType ;
111
122
private final Class <?> hierarchyType ;
@@ -138,4 +149,17 @@ public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
138
149
: null ;
139
150
}
140
151
}
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
+ };
141
165
}
0 commit comments