Various fixes for deRPC.
- If an array type is artificially rescued, it should rescue its component type.
- Don't generate bad RPC proxy code if the legacy type-elision flag is set.
- Correctly handle CustomFieldSerializers that write null Strings.
Patch by: bobv
Review by: jgw (desk)
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@6323 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/javac/ArtificialRescueChecker.java b/dev/core/src/com/google/gwt/dev/javac/ArtificialRescueChecker.java
index edaaae1..c1ffc49 100644
--- a/dev/core/src/com/google/gwt/dev/javac/ArtificialRescueChecker.java
+++ b/dev/core/src/com/google/gwt/dev/javac/ArtificialRescueChecker.java
@@ -103,6 +103,15 @@
referencedTypes = Lists.add(referencedTypes, className);
}
+ boolean isArray = false;
+ while (className.endsWith("[]")) {
+ className = className.substring(0, className.length() - 2);
+ if (collectTypes) {
+ referencedTypes = Lists.add(referencedTypes, className);
+ }
+ isArray = true;
+ }
+
if (!reportErrors) {
// Nothing else to do
return;
@@ -110,11 +119,6 @@
// Goal (2)
// Strip off any array-like extensions and just find base type
- boolean isArray = false;
- while (className.endsWith("[]")) {
- className = className.substring(0, className.length() - 2);
- isArray = true;
- }
// Fix JSNI primitive type names to something JDT will understand
if (isArray && className.length() == 1) {
diff --git a/user/src/com/google/gwt/rpc/rebind/RpcProxyCreator.java b/user/src/com/google/gwt/rpc/rebind/RpcProxyCreator.java
index 5d277be..65dd36d 100644
--- a/user/src/com/google/gwt/rpc/rebind/RpcProxyCreator.java
+++ b/user/src/com/google/gwt/rpc/rebind/RpcProxyCreator.java
@@ -113,6 +113,11 @@
}
@Override
+ protected void generateStreamWriterOverride(SourceWriter srcWriter) {
+ // Intentional no-op. Called if elideTypeNames is on, which is ignored
+ }
+
+ @Override
protected void generateTypeHandlers(TreeLogger logger, GeneratorContext ctx,
SerializableTypeOracle serializationSto,
SerializableTypeOracle deserializationSto)
diff --git a/user/src/com/google/gwt/rpc/server/CommandServerSerializationStreamReader.java b/user/src/com/google/gwt/rpc/server/CommandServerSerializationStreamReader.java
index 231e0e0..30dc6e0 100644
--- a/user/src/com/google/gwt/rpc/server/CommandServerSerializationStreamReader.java
+++ b/user/src/com/google/gwt/rpc/server/CommandServerSerializationStreamReader.java
@@ -314,7 +314,7 @@
}
public String readString() throws SerializationException {
- return readNextCommand(StringValueCommand.class).getValue();
+ return (String) readObject();
}
private <T extends ValueCommand> T readNextCommand(Class<T> clazz)