Server side code will now also check for java.io.Serializable when determining if a type is GWT serializable. Added unit tests to cross-check. TEst failed before the modification to ServerSerializableTypeOracleImpl and passed afterwards.
Patch by: mmendez
Review by: bruce (desk check)
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@1178 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializableTypeOracleImpl.java b/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializableTypeOracleImpl.java
index 88c45d8..43d7e6a 100644
--- a/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializableTypeOracleImpl.java
+++ b/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializableTypeOracleImpl.java
@@ -17,6 +17,7 @@
import com.google.gwt.user.client.rpc.IsSerializable;
+import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
@@ -213,7 +214,8 @@
if (instanceType.isPrimitive()) {
return true;
}
- if (IsSerializable.class.isAssignableFrom(instanceType)) {
+ if (IsSerializable.class.isAssignableFrom(instanceType) ||
+ Serializable.class.isAssignableFrom(instanceType)) {
return true;
}
return hasCustomFieldSerializer(instanceType) != null;
diff --git a/user/test/com/google/gwt/user/client/rpc/InheritanceTest.java b/user/test/com/google/gwt/user/client/rpc/InheritanceTest.java
index d08d122..8f180af 100644
--- a/user/test/com/google/gwt/user/client/rpc/InheritanceTest.java
+++ b/user/test/com/google/gwt/user/client/rpc/InheritanceTest.java
@@ -29,6 +29,8 @@
// private static final int TEST_DELAY = Integer.MAX_VALUE;
private static final int TEST_DELAY = 5000;
+ private InheritanceTestServiceAsync inheritanceTestService;
+
public String getModuleName() {
return "com.google.gwt.user.RPCSuite";
}
@@ -88,6 +90,26 @@
}
/**
+ * Tests that transient fields do not prevent serializability.
+ */
+ public void testJavaSerializableClass() {
+ delayTestFinish(TEST_DELAY);
+
+ InheritanceTestServiceAsync service = getServiceAsync();
+ service.echo(new InheritanceTestSetFactory.JavaSerializableClass(3),
+ new AsyncCallback() {
+ public void onFailure(Throwable caught) {
+ fail(caught.toString());
+ }
+
+ public void onSuccess(Object result) {
+ assertNotNull(result);
+ finishTest();
+ }
+ });
+ }
+
+ /**
* Test that non-static inner classes are not serializable.
*/
public void testNonStaticInnerClass() {
@@ -197,6 +219,4 @@
}
return inheritanceTestService;
}
-
- private InheritanceTestServiceAsync inheritanceTestService;
}
diff --git a/user/test/com/google/gwt/user/client/rpc/InheritanceTestService.java b/user/test/com/google/gwt/user/client/rpc/InheritanceTestService.java
index c3790ed..8e4f309 100644
--- a/user/test/com/google/gwt/user/client/rpc/InheritanceTestService.java
+++ b/user/test/com/google/gwt/user/client/rpc/InheritanceTestService.java
@@ -17,6 +17,7 @@
import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.AnonymousClassInterface;
import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.Circle;
+import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.JavaSerializableClass;
import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.SerializableClass;
import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.SerializableClassWithTransientField;
@@ -28,6 +29,8 @@
Circle echo(Circle circle);
+ JavaSerializableClass echo(JavaSerializableClass javaSerializableClass);
+
SerializableClass echo(SerializableClass serializableClass);
SerializableClassWithTransientField echo(
diff --git a/user/test/com/google/gwt/user/client/rpc/InheritanceTestServiceAsync.java b/user/test/com/google/gwt/user/client/rpc/InheritanceTestServiceAsync.java
index 2c5926d..f19010f 100644
--- a/user/test/com/google/gwt/user/client/rpc/InheritanceTestServiceAsync.java
+++ b/user/test/com/google/gwt/user/client/rpc/InheritanceTestServiceAsync.java
@@ -17,6 +17,7 @@
import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.AnonymousClassInterface;
import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.Circle;
+import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.JavaSerializableClass;
import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.SerializableClass;
import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.SerializableClassWithTransientField;
@@ -28,6 +29,8 @@
void echo(Circle circle, AsyncCallback callback);
+ void echo(JavaSerializableClass javaSerializableClass, AsyncCallback callback);
+
void echo(SerializableClass serializableClass, AsyncCallback callback);
void echo(SerializableClassWithTransientField serializableClass,
diff --git a/user/test/com/google/gwt/user/client/rpc/InheritanceTestSetFactory.java b/user/test/com/google/gwt/user/client/rpc/InheritanceTestSetFactory.java
index 0c8b78c..4c1b448 100644
--- a/user/test/com/google/gwt/user/client/rpc/InheritanceTestSetFactory.java
+++ b/user/test/com/google/gwt/user/client/rpc/InheritanceTestSetFactory.java
@@ -15,6 +15,8 @@
*/
package com.google.gwt.user.client.rpc;
+import java.io.Serializable;
+
/**
* TODO: document me.
*/
@@ -23,16 +25,8 @@
/**
* TODO: document me.
*/
- public static class Shape implements IsSerializable {
- private String name;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
+ public static interface AnonymousClassInterface extends IsSerializable {
+ void foo();
}
/**
@@ -40,16 +34,38 @@
*/
public static class Circle extends Shape {
private String name;
+
public native void doStuff() /*-{
- alert("foo");
- }-*/;
+ alert("foo");
+ }-*/;
+ }
+
+ /**
+ * TODO: document me.
+ */
+ public static class JavaSerializableBaseClass implements Serializable {
+ private int field1 = -1;
+
+ public JavaSerializableBaseClass() {
+ }
+
+ public JavaSerializableBaseClass(int field1) {
+ this.field1 = field1;
+ }
}
/**
* TODO: document me.
*/
- public static interface AnonymousClassInterface extends IsSerializable {
- void foo();
+ public static class JavaSerializableClass extends JavaSerializableBaseClass {
+ private int field2 = -2;
+
+ public JavaSerializableClass() {
+ }
+
+ public JavaSerializableClass(int field2) {
+ this.field2 = field2;
+ }
}
/**
@@ -65,6 +81,16 @@
* TODO: document me.
*/
public static class SerializableClass implements IsSerializable {
+ protected int d = 4;
+
+ int e = 5;
+
+ private int a = 1;
+
+ private int b = 2;
+
+ private int c = 3;
+
public int getA() {
return a;
}
@@ -88,16 +114,6 @@
public void setC(int c) {
this.c = c;
}
-
- private int a = 1;
-
- private int b = 2;
-
- private int c = 3;
-
- protected int d = 4;
-
- int e = 5;
}
/**
@@ -105,6 +121,8 @@
*/
public static class SerializableClassWithTransientField extends
SerializableClass {
+ private transient Object obj;
+
public Object getObj() {
return obj;
}
@@ -112,14 +130,14 @@
public void setObj(Object obj) {
this.obj = obj;
}
-
- private transient Object obj;
}
/**
* TODO: document me.
*/
public static class SerializableSubclass extends SerializableClass {
+ private int d = 4;
+
public int getD() {
return d;
}
@@ -127,8 +145,21 @@
public void setD(int d) {
this.d = d;
}
+ }
- private int d = 4;
+ /**
+ * TODO: document me.
+ */
+ public static class Shape implements IsSerializable {
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
}
public static Circle createCircle() {
@@ -137,6 +168,14 @@
return circle;
}
+ public static SerializableClass createNonStaticInnerClass() {
+ return new SerializableClass() {
+ public String toString() {
+ return "foo";
+ }
+ };
+ }
+
public static SerializableClass createSerializableClass() {
return new SerializableClass();
}
@@ -147,14 +186,6 @@
return cls;
}
- public static SerializableClass createNonStaticInnerClass() {
- return new SerializableClass() {
- public String toString() {
- return "foo";
- }
- };
- }
-
public static SerializableClass createSerializableSubclass() {
return new SerializableSubclass();
}
diff --git a/user/test/com/google/gwt/user/server/rpc/InheritanceTestServiceImpl.java b/user/test/com/google/gwt/user/server/rpc/InheritanceTestServiceImpl.java
index bba012e..ec64347 100644
--- a/user/test/com/google/gwt/user/server/rpc/InheritanceTestServiceImpl.java
+++ b/user/test/com/google/gwt/user/server/rpc/InheritanceTestServiceImpl.java
@@ -20,6 +20,7 @@
import com.google.gwt.user.client.rpc.InheritanceTestServiceSubtype;
import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.AnonymousClassInterface;
import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.Circle;
+import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.JavaSerializableClass;
import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.SerializableClass;
import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.SerializableClassWithTransientField;
@@ -37,6 +38,10 @@
return circle;
}
+ public JavaSerializableClass echo(JavaSerializableClass javaSerializableClass) {
+ return javaSerializableClass;
+ }
+
public SerializableClass echo(SerializableClass serializableClass) {
if (!InheritanceTestSetValidator.isValid(serializableClass)) {
throw new RuntimeException();
@@ -64,4 +69,4 @@
public SerializableClass getUnserializableClass() {
return InheritanceTestSetFactory.createNonStaticInnerClass();
}
-}
+}
\ No newline at end of file