aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn O. Pearce <sop@google.com>2009-05-15 09:40:23 -0700
committerShawn O. Pearce <sop@google.com>2009-05-15 09:40:23 -0700
commit02ed182d3a81e768ca23f8cecfdd4a8fbfa30dec (patch)
tree6a4e0cffcc69e5936c7471cdb9f6d5c9a1f61e23
parent74552d98ab76eba84572946f1e20f8bec8a92d5d (diff)
downloadgwtjsonrpc-02ed182d3a81e768ca23f8cecfdd4a8fbfa30dec.tar.gz
Fix result types for List<T>, Set<T>, Map<K,V>
Parameterized result types are stored as instance members in the proxy, and thus must be held in a field of type ResultDeserializer<R> and not a JsonSerializer<R>. Also add support for ResultDeserializer to the various basic Java collection types we support. Signed-off-by: Shawn O. Pearce <sop@google.com>
-rw-r--r--src/main/java/com/google/gwtjsonrpc/client/ListSerializer.java9
-rw-r--r--src/main/java/com/google/gwtjsonrpc/client/ObjectMapSerializer.java9
-rw-r--r--src/main/java/com/google/gwtjsonrpc/client/SetSerializer.java9
-rw-r--r--src/main/java/com/google/gwtjsonrpc/client/StringMapSerializer.java9
-rw-r--r--src/main/java/com/google/gwtjsonrpc/rebind/ProxyCreator.java3
5 files changed, 34 insertions, 5 deletions
diff --git a/src/main/java/com/google/gwtjsonrpc/client/ListSerializer.java b/src/main/java/com/google/gwtjsonrpc/client/ListSerializer.java
index f0e0cfa..61a69e5 100644
--- a/src/main/java/com/google/gwtjsonrpc/client/ListSerializer.java
+++ b/src/main/java/com/google/gwtjsonrpc/client/ListSerializer.java
@@ -24,7 +24,8 @@ import java.util.ArrayList;
* When deserialized from JSON the List implementation is always an
* {@link ArrayList}. When serializing to JSON any List is permitted.
*/
-public class ListSerializer<T> extends JsonSerializer<java.util.List<T>> {
+public class ListSerializer<T> extends JsonSerializer<java.util.List<T>>
+ implements ResultDeserializer<java.util.List<T>> {
private final JsonSerializer<T> serializer;
public ListSerializer(final JsonSerializer<T> s) {
@@ -65,6 +66,12 @@ public class ListSerializer<T> extends JsonSerializer<java.util.List<T>> {
return r;
}
+ @Override
+ public java.util.List<T> fromResult(final JavaScriptObject response) {
+ final JavaScriptObject result = ObjectSerializer.objectResult(response);
+ return result == null ? null : fromJson(result);
+ }
+
private static final native int size(JavaScriptObject o)/*-{ return o.length; }-*/;
private static final native Object get(JavaScriptObject o, int i)/*-{ return o[i]; }-*/;
diff --git a/src/main/java/com/google/gwtjsonrpc/client/ObjectMapSerializer.java b/src/main/java/com/google/gwtjsonrpc/client/ObjectMapSerializer.java
index 6ee6502..f18f321 100644
--- a/src/main/java/com/google/gwtjsonrpc/client/ObjectMapSerializer.java
+++ b/src/main/java/com/google/gwtjsonrpc/client/ObjectMapSerializer.java
@@ -30,7 +30,8 @@ import java.util.Map;
* {@link HashMap}. When serializing to JSON any Map is permitted.
*/
public class ObjectMapSerializer<K, V> extends
- JsonSerializer<java.util.Map<K, V>> {
+ JsonSerializer<java.util.Map<K, V>> implements
+ ResultDeserializer<java.util.Map<K, V>> {
private final JsonSerializer<K> keySerializer;
private final JsonSerializer<V> valueSerializer;
@@ -82,6 +83,12 @@ public class ObjectMapSerializer<K, V> extends
return r;
}
+ @Override
+ public java.util.Map<K, V> fromResult(final JavaScriptObject response) {
+ final JavaScriptObject result = ObjectSerializer.objectResult(response);
+ return result == null ? null : fromJson(result);
+ }
+
private static final native int size(JavaScriptObject o)/*-{ return o.length; }-*/;
private static final native Object get(JavaScriptObject o, int i)/*-{ return o[i]; }-*/;
diff --git a/src/main/java/com/google/gwtjsonrpc/client/SetSerializer.java b/src/main/java/com/google/gwtjsonrpc/client/SetSerializer.java
index c10e6aa..d016e83 100644
--- a/src/main/java/com/google/gwtjsonrpc/client/SetSerializer.java
+++ b/src/main/java/com/google/gwtjsonrpc/client/SetSerializer.java
@@ -24,7 +24,8 @@ import java.util.HashSet;
* When deserialized from JSON the Set implementation is always a
* {@link HashSet}. When serializing to JSON any Set is permitted.
*/
-public class SetSerializer<T> extends JsonSerializer<java.util.Set<T>> {
+public class SetSerializer<T> extends JsonSerializer<java.util.Set<T>>
+ implements ResultDeserializer<java.util.Set<T>> {
private final JsonSerializer<T> serializer;
public SetSerializer(final JsonSerializer<T> s) {
@@ -65,6 +66,12 @@ public class SetSerializer<T> extends JsonSerializer<java.util.Set<T>> {
return r;
}
+ @Override
+ public java.util.Set<T> fromResult(final JavaScriptObject response) {
+ final JavaScriptObject result = ObjectSerializer.objectResult(response);
+ return result == null ? null : fromJson(result);
+ }
+
private static final native int size(JavaScriptObject o)/*-{ return o.length; }-*/;
private static final native Object get(JavaScriptObject o, int i)/*-{ return o[i]; }-*/;
diff --git a/src/main/java/com/google/gwtjsonrpc/client/StringMapSerializer.java b/src/main/java/com/google/gwtjsonrpc/client/StringMapSerializer.java
index f854a73..82f497c 100644
--- a/src/main/java/com/google/gwtjsonrpc/client/StringMapSerializer.java
+++ b/src/main/java/com/google/gwtjsonrpc/client/StringMapSerializer.java
@@ -29,7 +29,8 @@ import java.util.Map;
* {@link HashMap}. When serializing to JSON any Map is permitted.
*/
public class StringMapSerializer<V> extends
- JsonSerializer<java.util.Map<String, V>> {
+ JsonSerializer<java.util.Map<String, V>> implements
+ ResultDeserializer<java.util.Map<String, V>> {
private final JsonSerializer<V> valueSerializer;
public StringMapSerializer(final JsonSerializer<V> v) {
@@ -74,6 +75,12 @@ public class StringMapSerializer<V> extends
return r;
}
+ @Override
+ public java.util.Map<String, V> fromResult(final JavaScriptObject response) {
+ final JavaScriptObject result = ObjectSerializer.objectResult(response);
+ return result == null ? null : fromJson(result);
+ }
+
private native void copy(Map<String, V> r, JavaScriptObject jsObject) /*-{
for (var key in jsObject) {
this.@com.google.gwtjsonrpc.client.StringMapSerializer::copyOne(Ljava/util/Map;Ljava/lang/String;Ljava/lang/Object;)(r, key, jsObject[key]);
diff --git a/src/main/java/com/google/gwtjsonrpc/rebind/ProxyCreator.java b/src/main/java/com/google/gwtjsonrpc/rebind/ProxyCreator.java
index 26d65e0..404372e 100644
--- a/src/main/java/com/google/gwtjsonrpc/rebind/ProxyCreator.java
+++ b/src/main/java/com/google/gwtjsonrpc/rebind/ProxyCreator.java
@@ -36,6 +36,7 @@ import com.google.gwtjsonrpc.client.CallbackHandle;
import com.google.gwtjsonrpc.client.HostPageCache;
import com.google.gwtjsonrpc.client.JsonSerializer;
import com.google.gwtjsonrpc.client.JsonUtil;
+import com.google.gwtjsonrpc.client.ResultDeserializer;
import java.io.PrintWriter;
import java.util.HashSet;
@@ -236,7 +237,7 @@ class ProxyCreator {
if (resultType.isParameterized() != null) {
serializerFields[params.length - 1] = "serializer_" + instanceField++;
w.print("private static final ");
- w.print(JsonSerializer.class.getName());
+ w.print(ResultDeserializer.class.getName());
w.print(" ");
w.print(serializerFields[params.length - 1]);
w.print(" = ");