Revised to the new name getDelegateAdapter.

This commit is contained in:
Inderjeet Singh 2012-04-14 19:04:14 +00:00
parent 83e5a4937c
commit 7a5cef9305
2 changed files with 12 additions and 11 deletions

View File

@ -84,7 +84,7 @@ public final class GraphAdapterBuilder {
return null; return null;
} }
final TypeAdapter<T> typeAdapter = gson.getNextAdapter(this, type); final TypeAdapter<T> typeAdapter = gson.getDelegateAdapter(this, type);
final TypeAdapter<JsonElement> elementAdapter = gson.getAdapter(JsonElement.class); final TypeAdapter<JsonElement> elementAdapter = gson.getAdapter(JsonElement.class);
return new TypeAdapter<T>() { return new TypeAdapter<T>() {
@Override public void write(JsonWriter out, T value) throws IOException { @Override public void write(JsonWriter out, T value) throws IOException {

View File

@ -16,6 +16,10 @@
package com.google.gson.typeadapters; package com.google.gson.typeadapters;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
@ -27,9 +31,6 @@ import com.google.gson.internal.Streams;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter; import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
/** /**
* Adapts values whose runtime type may differ from their declaration type. This * Adapts values whose runtime type may differ from their declaration type. This
@ -180,7 +181,7 @@ public final class RuntimeTypeAdapterFactory<T> implements TypeAdapterFactory {
return registerSubtype(type, type.getSimpleName()); return registerSubtype(type, type.getSimpleName());
} }
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) { public <R> TypeAdapter<R> create(Gson gson, TypeToken<R> type) {
if (type.getRawType() != baseType) { if (type.getRawType() != baseType) {
return null; return null;
} }
@ -190,13 +191,13 @@ public final class RuntimeTypeAdapterFactory<T> implements TypeAdapterFactory {
final Map<Class<?>, TypeAdapter<?>> subtypeToDelegate final Map<Class<?>, TypeAdapter<?>> subtypeToDelegate
= new LinkedHashMap<Class<?>, TypeAdapter<?>>(); = new LinkedHashMap<Class<?>, TypeAdapter<?>>();
for (Map.Entry<String, Class<?>> entry : labelToSubtype.entrySet()) { for (Map.Entry<String, Class<?>> entry : labelToSubtype.entrySet()) {
TypeAdapter<?> delegate = gson.getNextAdapter(this, TypeToken.get(entry.getValue())); TypeAdapter<?> delegate = gson.getDelegateAdapter(this, TypeToken.get(entry.getValue()));
labelToDelegate.put(entry.getKey(), delegate); labelToDelegate.put(entry.getKey(), delegate);
subtypeToDelegate.put(entry.getValue(), delegate); subtypeToDelegate.put(entry.getValue(), delegate);
} }
return new TypeAdapter<T>() { return new TypeAdapter<R>() {
@Override public T read(JsonReader in) throws IOException { @Override public R read(JsonReader in) throws IOException {
JsonElement jsonElement = Streams.parse(in); JsonElement jsonElement = Streams.parse(in);
JsonElement labelJsonElement = jsonElement.getAsJsonObject().remove(typeFieldName); JsonElement labelJsonElement = jsonElement.getAsJsonObject().remove(typeFieldName);
if (labelJsonElement == null) { if (labelJsonElement == null) {
@ -205,7 +206,7 @@ public final class RuntimeTypeAdapterFactory<T> implements TypeAdapterFactory {
} }
String label = labelJsonElement.getAsString(); String label = labelJsonElement.getAsString();
@SuppressWarnings("unchecked") // registration requires that subtype extends T @SuppressWarnings("unchecked") // registration requires that subtype extends T
TypeAdapter<T> delegate = (TypeAdapter<T>) labelToDelegate.get(label); TypeAdapter<R> delegate = (TypeAdapter<R>) labelToDelegate.get(label);
if (delegate == null) { if (delegate == null) {
throw new JsonParseException("cannot deserialize " + baseType + " subtype named " throw new JsonParseException("cannot deserialize " + baseType + " subtype named "
+ label + "; did you forget to register a subtype?"); + label + "; did you forget to register a subtype?");
@ -213,11 +214,11 @@ public final class RuntimeTypeAdapterFactory<T> implements TypeAdapterFactory {
return delegate.fromJsonTree(jsonElement); return delegate.fromJsonTree(jsonElement);
} }
@Override public void write(JsonWriter out, T value) throws IOException { @Override public void write(JsonWriter out, R value) throws IOException {
Class<?> srcType = value.getClass(); Class<?> srcType = value.getClass();
String label = subtypeToLabel.get(srcType); String label = subtypeToLabel.get(srcType);
@SuppressWarnings("unchecked") // registration requires that subtype extends T @SuppressWarnings("unchecked") // registration requires that subtype extends T
TypeAdapter<T> delegate = (TypeAdapter<T>) subtypeToDelegate.get(srcType); TypeAdapter<R> delegate = (TypeAdapter<R>) subtypeToDelegate.get(srcType);
if (delegate == null) { if (delegate == null) {
throw new JsonParseException("cannot serialize " + srcType.getName() throw new JsonParseException("cannot serialize " + srcType.getName()
+ "; did you forget to register a subtype?"); + "; did you forget to register a subtype?");