Remove deprecated deRPC.

Change-Id: If725b4690397bd8aed000368e93ef82e8b290b72
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/CastableTypeMap.java b/dev/core/src/com/google/gwt/core/ext/linker/CastableTypeMap.java
deleted file mode 100644
index 4a47661..0000000
--- a/dev/core/src/com/google/gwt/core/ext/linker/CastableTypeMap.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.google.gwt.core.ext.linker;
-
-import java.io.Serializable;
-
-/**
- * An encapsulation of a JSON map containing a set of castable type ids.
- */
-public interface CastableTypeMap extends Serializable {
-
-    /**
-     * Returns an eval-able JSON object.
-     */
-    String toJs();
-}
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/SymbolData.java b/dev/core/src/com/google/gwt/core/ext/linker/SymbolData.java
index 6378b89..bac46d3 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/SymbolData.java
+++ b/dev/core/src/com/google/gwt/core/ext/linker/SymbolData.java
@@ -82,11 +82,6 @@
   }
 
   /**
-   * Returns a JSON map of castableTypes.
-   */
-  CastableTypeMap getCastableTypeMap();
-
-  /**
    * Returns the name of the type or enclosing type if the symbol is a method or
    * field.
    */
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardCastableTypeMap.java b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardCastableTypeMap.java
deleted file mode 100644
index d0fff59..0000000
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardCastableTypeMap.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.google.gwt.core.ext.linker.impl;
-
-import com.google.gwt.core.ext.linker.CastableTypeMap;
-
-/**
- * The standard implementation of {@link CastableTypeMap}.
- */
-public class StandardCastableTypeMap implements CastableTypeMap {
-  // Save some memory by defining this constant string.
-  private static final String EMPTY_JSON_REF = "{}";
-
-  final String jsonData;
-  public StandardCastableTypeMap(String jsonData) {
-    this.jsonData = jsonData.equals(EMPTY_JSON_REF) ? EMPTY_JSON_REF : jsonData;
-  }
-
-  @Override
-  public String toJs() {
-    return jsonData;
-  }
-}
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardSymbolData.java b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardSymbolData.java
index ee0a0fa..a34a033 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardSymbolData.java
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardSymbolData.java
@@ -15,7 +15,6 @@
  */
 package com.google.gwt.core.ext.linker.impl;
 
-import com.google.gwt.core.ext.linker.CastableTypeMap;
 import com.google.gwt.core.ext.linker.SymbolData;
 
 import java.io.File;
@@ -32,15 +31,15 @@
 public class StandardSymbolData implements SymbolData {
 
   public static StandardSymbolData forClass(String className, String uriString,
-      int lineNumber, CastableTypeMap castableTypeMap, String typeId) {
+      int lineNumber, String typeId) {
     return new StandardSymbolData(className, null, null, uriString, lineNumber,
-        castableTypeMap, typeId);
+        typeId);
   }
 
   public static StandardSymbolData forMember(String className,
       String memberName, String methodSig, String uriString, int lineNumber) {
     return new StandardSymbolData(className, memberName, methodSig, uriString,
-        lineNumber, null, null);
+        lineNumber, null);
   }
 
   public static String toUriString(String fileName) {
@@ -64,11 +63,9 @@
   private String sourceUri;
   private String symbolName;
   private String typeId;
-  private CastableTypeMap castableTypeMap;
 
   private StandardSymbolData(String className, String memberName,
-      String methodSig, String sourceUri, int sourceLine,
-      CastableTypeMap castableTypeMap, String typeId) {
+      String methodSig, String sourceUri, int sourceLine, String typeId) {
     assert className != null && className.length() > 0 : "className";
     assert memberName != null || methodSig == null : "methodSig without memberName";
     assert sourceLine >= -1 : "sourceLine: " + sourceLine;
@@ -78,16 +75,10 @@
     this.methodSig = methodSig;
     this.sourceUri = sourceUri;
     this.sourceLine = sourceLine;
-    this.castableTypeMap = castableTypeMap;
     this.typeId = typeId;
   }
 
   @Override
-  public CastableTypeMap getCastableTypeMap() {
-    return castableTypeMap;
-  }
-
-  @Override
   public String getClassName() {
     return className;
   }
@@ -179,7 +170,6 @@
     sourceLine = in.readInt();
     sourceUri = (String) in.readObject();
     symbolName = in.readUTF();
-    castableTypeMap = (CastableTypeMap) in.readObject();
     typeId = (String) in.readObject();
     fragmentNumber = in.readInt();
   }
@@ -208,7 +198,6 @@
     out.writeInt(sourceLine);
     out.writeObject(sourceUri);
     out.writeUTF(symbolName);
-    out.writeObject(castableTypeMap);
     out.writeObject(typeId);
     out.writeInt(fragmentNumber);
   }
diff --git a/dev/core/src/com/google/gwt/dev/javac/StandardGeneratorContext.java b/dev/core/src/com/google/gwt/dev/javac/StandardGeneratorContext.java
index c9b3ef9..baa34fa 100644
--- a/dev/core/src/com/google/gwt/dev/javac/StandardGeneratorContext.java
+++ b/dev/core/src/com/google/gwt/dev/javac/StandardGeneratorContext.java
@@ -265,8 +265,6 @@
         CompilerEventType.GENERATOR_I18N);
     eventsByGeneratorType.put("com.google.gwt.user.rebind.rpc.ServiceInterfaceProxyGenerator",
         CompilerEventType.GENERATOR_RPC);
-    eventsByGeneratorType.put("com.google.gwt.rpc.rebind.RpcServiceGenerator",
-        CompilerEventType.GENERATOR_RPC); // deRPC
     eventsByGeneratorType.put("com.google.gwt.uibinder.rebind.UiBinderGenerator",
         CompilerEventType.GENERATOR_UIBINDER);
     eventsByGeneratorType.put("com.google.gwt.inject.rebind.GinjectorGenerator",
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
index cad2e97..3912f5d 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
@@ -15,8 +15,6 @@
  */
 package com.google.gwt.dev.jjs.impl;
 
-import com.google.gwt.core.ext.linker.CastableTypeMap;
-import com.google.gwt.core.ext.linker.impl.StandardCastableTypeMap;
 import com.google.gwt.core.ext.linker.impl.StandardSymbolData;
 import com.google.gwt.dev.CompilerContext;
 import com.google.gwt.dev.cfg.PermProps;
@@ -694,29 +692,11 @@
       if (getRuntimeTypeReference(x) == null || !typeOracle.isInstantiatedType(x)) {
         return;
       }
-      // TODO(rluble): Remove castmaps from symbol maps as part of deRPC deprecation.
-      StringBuilder sb = new StringBuilder();
-      sb.append('{');
-      JCastMap castMap = program.getCastMap(x);
-      if (castMap != null) {
-        boolean isFirst = true;
-        for (JExpression castToType : castMap.getCanCastToTypes()) {
-          if (isFirst) {
-            isFirst = false;
-          } else {
-            sb.append(',');
-          }
-          sb.append(castToType.toSource());
-          sb.append(":1");
-        }
-      }
-      sb.append('}');
-      CastableTypeMap castableTypeMap = new StandardCastableTypeMap(sb.toString());
 
       String typeId = getRuntimeTypeReference(x).toSource();
       StandardSymbolData symbolData =
           StandardSymbolData.forClass(x.getName(), x.getSourceInfo().getFileName(),
-              x.getSourceInfo().getStartLine(), castableTypeMap, typeId);
+              x.getSourceInfo().getStartLine(), typeId);
       assert !symbolTable.containsKey(symbolData);
       symbolTable.put(symbolData, jsName);
     }
diff --git a/dev/core/test/com/google/gwt/core/ext/linker/SourceMapTest.java b/dev/core/test/com/google/gwt/core/ext/linker/SourceMapTest.java
index aafe4a6..f2ad2e8 100644
--- a/dev/core/test/com/google/gwt/core/ext/linker/SourceMapTest.java
+++ b/dev/core/test/com/google/gwt/core/ext/linker/SourceMapTest.java
@@ -130,11 +130,6 @@
     }
 
     @Override
-    public CastableTypeMap getCastableTypeMap() {
-      return null;
-    }
-
-    @Override
     public String getClassName() {
       return this.className;
     }
diff --git a/dev/core/test/com/google/gwt/core/ext/linker/SymbolMapTest.java b/dev/core/test/com/google/gwt/core/ext/linker/SymbolMapTest.java
index 442e915..05998b4 100644
--- a/dev/core/test/com/google/gwt/core/ext/linker/SymbolMapTest.java
+++ b/dev/core/test/com/google/gwt/core/ext/linker/SymbolMapTest.java
@@ -92,11 +92,6 @@
     }
 
     @Override
-    public CastableTypeMap getCastableTypeMap() {
-      return null;
-    }
-
-    @Override
     public String getClassName() {
       return this.className;
     }
diff --git a/tools/api-checker/config/gwt26_27userApi.conf b/tools/api-checker/config/gwt26_27userApi.conf
index d76e53a..6df95c2 100644
--- a/tools/api-checker/config/gwt26_27userApi.conf
+++ b/tools/api-checker/config/gwt26_27userApi.conf
@@ -52,6 +52,7 @@
 :com/google/gwt/rpc/client/impl/ClientWriterFactory.java\
 :com/google/gwt/rpc/client/impl/EscapeUtil.java\
 :com/google/gwt/rpc/client/impl/RpcCallbackAdapter.java\
+:com/google/gwt/rpc/client/impl/RpcServiceProxy.java\
 :com/google/gwt/safecss/shared/SafeStylesHostedModeUtils.java\
 :com/google/gwt/safehtml/shared/SafeHtmlHostedModeUtils.java\
 :com/google/gwt/safehtml/shared/SafeUriHostedModeUtils.java\
@@ -109,9 +110,6 @@
 :user/src/com/google/gwt/resources/css/**\
 :user/src/com/google/gwt/resources/ext/**\
 :user/src/com/google/gwt/resources/rg/**\
-:user/src/com/google/gwt/rpc/client/impl/ClientWriterFactory.java\
-:user/src/com/google/gwt/rpc/client/impl/EscapeUtil.java\
-:user/src/com/google/gwt/rpc/client/impl/RpcCallbackAdapter.java\
 :user/src/com/google/gwt/safecss/shared/SafeStylesHostedModeUtils.java\
 :user/src/com/google/gwt/safehtml/shared/SafeHtmlHostedModeUtils.java\
 :user/src/com/google/gwt/safehtml/shared/SafeUriHostedModeUtils.java\
@@ -140,6 +138,7 @@
 :com.google.gwt.junit.client.impl\
 :com.google.gwt.lang\
 :com.google.gwt.resources.client.impl\
+:com.google.gwt.rpc.client.impl\
 :com.google.gwt.user.client.impl\
 :com.google.gwt.user.client.ui.impl\
 :com.google.gwt.xml.client.impl\
@@ -174,3 +173,10 @@
 
 # Removed deprecated c.g.gwt.widgets
 com.google.gwt.widget.client MISSING
+
+# Removed deprecated deRPC
+# TODO(rluble) remove all references to deRPC and com.google.gwt.rpc from next gwtXX_XXuserApi.conf
+# on next version switch..
+com.google.gwt.rpc.client MISSING
+com.google.gwt.rpc.client.ast MISSING
+
diff --git a/user/BUILD b/user/BUILD
index 0ee11f1..1c603a1 100644
--- a/user/BUILD
+++ b/user/BUILD
@@ -279,15 +279,8 @@
             "src/com/google/gwt/user/client/rpc/SerializationException.java",
             "src/com/google/gwt/user/client/rpc/SerializationStreamReader.java",
             "src/com/google/gwt/user/client/rpc/SerializationStreamWriter.java",
-            "src/com/google/gwt/rpc/client/ast/*.java",
-            "src/com/google/gwt/rpc/client/impl/CommandSerializationStreamWriterBase.java",
-            "src/com/google/gwt/rpc/client/impl/CommandClientSerializationStreamReader.java",
-            "src/com/google/gwt/rpc/client/impl/EscapeUtil.java",
             "src/com/google/gwt/user/client/rpc/impl/ClientSerializationStreamWriter.java",
             "src/com/google/gwt/user/client/rpc/impl/Serializer.java",
-            "src/com/google/gwt/rpc/client/impl/HasValuesCommandSink.java",
-            "src/com/google/gwt/rpc/client/impl/SimplePayloadSink.java",
-            "src/com/google/gwt/rpc/client/impl/RemoteException.java",
             # ...which need:
             "src/com/google/gwt/core/client/GWT.java",
             "src/com/google/gwt/core/client/JavaScriptException.java",
diff --git a/user/build.xml b/user/build.xml
index a926fa5..274f4ef 100755
--- a/user/build.xml
+++ b/user/build.xml
@@ -181,7 +181,6 @@
         <pathelement location="${project.build}/bin/com/google/gwt/regexp/RegExp.gwtar"/>
         <pathelement location="${project.build}/bin/com/google/gwt/user/User.gwtar"/>
         <pathelement location="${project.build}/bin/com/google/gwt/xml/XML.gwtar"/>
-        <pathelement location="${project.build}/bin/com/google/gwt/rpc/RPC.gwtar"/>
         <pathelement location="${project.build}/bin/com/google/gwt/debug/Debug.gwtar"/>
         <pathelement location="${project.build}/bin/com/google/gwt/place/Place.gwtar"/>
         <pathelement location="${project.build}/bin/com/google/gwt/activity/Activity.gwtar"/>
@@ -205,7 +204,6 @@
 
             <!-- Below are modules that depend on User           -->
             <arg value="com.google.gwt.xml.XML"/>
-            <arg value="com.google.gwt.rpc.RPC"/>
             <arg value="com.google.gwt.debug.Debug"/>
             <arg value="com.google.gwt.logging.Logging"/>
 
diff --git a/user/src/com/google/gwt/junit/server/JUnitHostImpl.java b/user/src/com/google/gwt/junit/server/JUnitHostImpl.java
index 37c4ecb..8fa4065 100644
--- a/user/src/com/google/gwt/junit/server/JUnitHostImpl.java
+++ b/user/src/com/google/gwt/junit/server/JUnitHostImpl.java
@@ -15,8 +15,6 @@
  */
 package com.google.gwt.junit.server;
 
-import static com.google.gwt.user.client.rpc.RpcRequestBuilder.MODULE_BASE_HEADER;
-
 import com.google.gwt.core.server.StackTraceDeobfuscator;
 import com.google.gwt.junit.JUnitFatalLaunchException;
 import com.google.gwt.junit.JUnitMessageQueue;
@@ -31,8 +29,6 @@
 import com.google.gwt.user.server.rpc.RemoteServiceServlet;
 
 import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
 import java.util.HashMap;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -154,31 +150,6 @@
     return machine + " / " + agent;
   }
 
-  /**
-   * Extract the module's base path from the current request.
-   * 
-   * @return the module's base path, modulo protocol and host, as reported by
-   *         {@link com.google.gwt.core.client.GWT#getModuleBaseURL()} or
-   *         <code>null</code> if the request did not contain the
-   *         {@value com.google.gwt.user.client.rpc.RpcRequestBuilder#MODULE_BASE_HEADER} header
-   */
-  private String getRequestModuleBasePath() {
-    try {
-      String header = getThreadLocalRequest().getHeader(MODULE_BASE_HEADER);
-      if (header == null) {
-        return null;
-      }
-      String path = new URL(header).getPath();
-      String contextPath = getThreadLocalRequest().getContextPath();
-      if (!path.startsWith(contextPath)) {
-        return null;
-      }
-      return path.substring(contextPath.length());
-    } catch (MalformedURLException e) {
-      return null;
-    }
-  }
-
   private void initResult(HttpServletRequest request, JUnitResult result) {
     result.setAgent(request.getHeader("User-Agent"));
     result.setHost(request.getRemoteHost());
diff --git a/user/src/com/google/gwt/rpc/RPC.gwt.xml b/user/src/com/google/gwt/rpc/RPC.gwt.xml
deleted file mode 100644
index c88a958..0000000
--- a/user/src/com/google/gwt/rpc/RPC.gwt.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<module type="fileset">
-  <inherits name="com.google.gwt.core.Core" />
-  <!-- Inherits standard RPC, c.g.g.user.RemoteService is not standalone. -->
-  <inherits name="com.google.gwt.user.User" />
-
-  <source path="client" />
-  <super-source path="super" />
-
-  <define-linker name="clientOracleLinker"
-    class="com.google.gwt.rpc.linker.ClientOracleLinker" />
-  <add-linker name="clientOracleLinker" />
-
-  <define-property name="gwt.rpc.hijackLegacyInterface" values="true,false" />
-  <set-property name="gwt.rpc.hijackLegacyInterface" value="false" />
-
-  <generate-with class="com.google.gwt.rpc.rebind.RpcServiceGenerator">
-    <any>
-      <when-type-assignable class="com.google.gwt.rpc.client.RpcService" />
-      <all>
-        <when-type-assignable class="com.google.gwt.user.client.rpc.RemoteService" />
-        <when-property-is name="gwt.rpc.hijackLegacyInterface"
-          value="true" />
-      </all>
-    </any>
-  </generate-with>
-</module>
diff --git a/user/src/com/google/gwt/rpc/client/RpcService.java b/user/src/com/google/gwt/rpc/client/RpcService.java
deleted file mode 100644
index b482e49..0000000
--- a/user/src/com/google/gwt/rpc/client/RpcService.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client;
-
-import com.google.gwt.user.client.rpc.RemoteService;
-
-/**
- * EXPERIMENTAL and subject to change. Do not use this in production code.
- * <p>
- * Marker interface to be used with RpcServlet.
- */
-public interface RpcService extends RemoteService {
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/ArrayValueCommand.java b/user/src/com/google/gwt/rpc/client/ast/ArrayValueCommand.java
deleted file mode 100644
index 49406b8..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/ArrayValueCommand.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor.Context;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Encapsulates an array of values.
- */
-public class ArrayValueCommand extends IdentityValueCommand {
-  private final Class<?> componentType;
-  private final List<ValueCommand> values = new ArrayList<ValueCommand>();
-
-  public ArrayValueCommand(Class<?> componentType) {
-    this.componentType = componentType;
-  }
-
-  public void add(ValueCommand x) {
-    values.add(x);
-  }
-
-  @Override
-  public void clear() {
-    values.clear();
-  }
-
-  public Class<?> getComponentType() {
-    return componentType;
-  }
-
-  public List<ValueCommand> getComponentValues() {
-    return values;
-  }
-
-  @Override
-  public void traverse(RpcCommandVisitor visitor, Context ctx) {
-    if (visitor.visit(this, ctx)) {
-      visitor.accept(values);
-    }
-    visitor.endVisit(this, ctx);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/BooleanValueCommand.java b/user/src/com/google/gwt/rpc/client/ast/BooleanValueCommand.java
deleted file mode 100644
index ed82909..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/BooleanValueCommand.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor.Context;
-
-/**
- * Encapsulates a boolean value in the command stream.
- */
-public class BooleanValueCommand extends ScalarValueCommand {
-  private final boolean value;
-
-  public BooleanValueCommand(double value) {
-    this.value = value != 0;
-  }
-
-  public BooleanValueCommand(boolean value) {
-    this.value = value;
-  }
-
-  public BooleanValueCommand(Boolean value) {
-    this.value = value;
-  }
-
-  @Override
-  public Boolean getValue() {
-    return value;
-  }
-
-  @Override
-  public void traverse(RpcCommandVisitor visitor, Context ctx) {
-    visitor.visit(this, ctx);
-    visitor.endVisit(this, ctx);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/ByteValueCommand.java b/user/src/com/google/gwt/rpc/client/ast/ByteValueCommand.java
deleted file mode 100644
index d29bde0..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/ByteValueCommand.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor.Context;
-
-/**
- * Encapsulates a boolean value in the command stream.
- */
-public class ByteValueCommand extends ScalarValueCommand {
-  private final byte value;
-
-  public ByteValueCommand(double value) {
-    this.value = (byte) value;
-  }
-
-  public ByteValueCommand(byte value) {
-    this.value = value;
-  }
-
-  public ByteValueCommand(Byte value) {
-    this.value = value;
-  }
-
-  @Override
-  public Byte getValue() {
-    return value;
-  }
-
-  @Override
-  public void traverse(RpcCommandVisitor visitor, Context ctx) {
-    visitor.visit(this, ctx);
-    visitor.endVisit(this, ctx);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/CharValueCommand.java b/user/src/com/google/gwt/rpc/client/ast/CharValueCommand.java
deleted file mode 100644
index 17850f5..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/CharValueCommand.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor.Context;
-
-/**
- * Encapsulates a boolean value in the command stream.
- */
-public class CharValueCommand extends ScalarValueCommand {
-  private final char value;
-
-  public CharValueCommand(double value) {
-    this.value = (char) value;
-  }
-
-  public CharValueCommand(char value) {
-    this.value = value;
-  }
-
-  public CharValueCommand(Character value) {
-    this.value = value;
-  }
-
-  @Override
-  public Character getValue() {
-    return value;
-  }
-
-  @Override
-  public void traverse(RpcCommandVisitor visitor, Context ctx) {
-    visitor.visit(this, ctx);
-    visitor.endVisit(this, ctx);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/CommandSink.java b/user/src/com/google/gwt/rpc/client/ast/CommandSink.java
deleted file mode 100644
index 10f9991..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/CommandSink.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.user.client.rpc.SerializationException;
-
-/**
- * Accepts a stream of RpcCommands.
- */
-public abstract class CommandSink {
-  /**
-   * Accept an RpcCommand for processing.
-   * 
-   * @param command
-   * @throws SerializationException
-   */
-  public abstract void accept(RpcCommand command) throws SerializationException;
-
-  /**
-   * Called when no more commands will be sent.
-   */
-  public abstract void finish() throws SerializationException;
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/DoubleValueCommand.java b/user/src/com/google/gwt/rpc/client/ast/DoubleValueCommand.java
deleted file mode 100644
index 2127185..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/DoubleValueCommand.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor.Context;
-
-/**
- * Encapsulates a boolean value in the command stream.
- */
-public class DoubleValueCommand extends ScalarValueCommand {
-  private final double value;
-
-  public DoubleValueCommand(double value) {
-    this.value = value;
-  }
-
-  public DoubleValueCommand(Double value) {
-    this.value = value;
-  }
-
-  @Override
-  public Double getValue() {
-    return value;
-  }
-
-  @Override
-  public void traverse(RpcCommandVisitor visitor, Context ctx) {
-    visitor.visit(this, ctx);
-    visitor.endVisit(this, ctx);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/EnumValueCommand.java b/user/src/com/google/gwt/rpc/client/ast/EnumValueCommand.java
deleted file mode 100644
index 7b66e55..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/EnumValueCommand.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor.Context;
-
-/**
- * Encapsulates a string value in the command stream.
- */
-public class EnumValueCommand extends IdentityValueCommand {
-  private Enum<?> value;
-
-  public Enum<?> getValue() {
-    return value;
-  }
-
-  /**
-   * Not a constructor argument so that the identity of the EnumValueCommand can
-   * be established before the identity of the value.
-   */
-  public void setValue(Enum<?> value) {
-    this.value = value;
-  }
-
-  @Override
-  public void traverse(RpcCommandVisitor visitor, Context ctx) {
-    visitor.visit(this, ctx);
-    visitor.endVisit(this, ctx);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/FloatValueCommand.java b/user/src/com/google/gwt/rpc/client/ast/FloatValueCommand.java
deleted file mode 100644
index 1cd4d79..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/FloatValueCommand.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor.Context;
-
-/**
- * Encapsulates a boolean value in the command stream.
- */
-public class FloatValueCommand extends ScalarValueCommand {
-  private final float value;
-
-  public FloatValueCommand(double value) {
-    this.value = (float) value;
-  }
-
-  public FloatValueCommand(float value) {
-    this.value = value;
-  }
-
-  public FloatValueCommand(Float value) {
-    this.value = value;
-  }
-
-  @Override
-  public Float getValue() {
-    return value;
-  }
-
-  @Override
-  public void traverse(RpcCommandVisitor visitor, Context ctx) {
-    visitor.visit(this, ctx);
-    visitor.endVisit(this, ctx);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/HasSetters.java b/user/src/com/google/gwt/rpc/client/ast/HasSetters.java
deleted file mode 100644
index 1da97b9..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/HasSetters.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import java.util.List;
-
-/**
- * Describes RpcCommands that have additional field setters.
- */
-public interface HasSetters {
-
-  List<SetCommand> getSetters();
-
-  void set(Class<?> fieldDeclClass, String fieldName, ValueCommand value);
-
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/HasTargetClass.java b/user/src/com/google/gwt/rpc/client/ast/HasTargetClass.java
deleted file mode 100644
index 9a5b428..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/HasTargetClass.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-/**
- * An RpcCommand with a target class.
- */
-public interface HasTargetClass {
-  Class<?> getTargetClass();
-}
\ No newline at end of file
diff --git a/user/src/com/google/gwt/rpc/client/ast/HasValues.java b/user/src/com/google/gwt/rpc/client/ast/HasValues.java
deleted file mode 100644
index 56150e1..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/HasValues.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import java.util.List;
-
-/**
- * An RpcCommand that contains other values.
- */
-public interface HasValues {
-
-  void addValue(ValueCommand value);
-
-  List<ValueCommand> getValues();
-
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/IdentityValueCommand.java b/user/src/com/google/gwt/rpc/client/ast/IdentityValueCommand.java
deleted file mode 100644
index b579719..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/IdentityValueCommand.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-/**
- * Represents a hierarchy of value types that must maintain distinct object
- * identity on the client. This type finalizes <code>equals</code> and
- * <code>hashCode</code> to give subtypes identity equality semantics.
- */
-public abstract class IdentityValueCommand extends ValueCommand {
-  @Override
-  public final boolean equals(Object o) {
-    return this == o;
-  }
-
-  @Override
-  public final int hashCode() {
-    return System.identityHashCode(this);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/InstantiateCommand.java b/user/src/com/google/gwt/rpc/client/ast/InstantiateCommand.java
deleted file mode 100644
index d0ed18d..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/InstantiateCommand.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor.Context;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Triggers the instantiation of an object.
- */
-public class InstantiateCommand extends IdentityValueCommand implements
-    HasSetters, HasTargetClass {
-  private final Class<?> clazz;
-  private final List<SetCommand> setters = new ArrayList<SetCommand>();
-
-  public InstantiateCommand(Class<?> clazz) {
-    this.clazz = clazz;
-  }
-
-  @Override
-  public void clear() {
-    setters.clear();
-  }
-
-  public List<SetCommand> getSetters() {
-    return setters;
-  }
-
-  public Class<?> getTargetClass() {
-    return clazz;
-  }
-
-  public void set(Class<?> fieldDeclClass, String fieldName, ValueCommand value) {
-    setters.add(new SetCommand(fieldDeclClass, fieldName, value));
-  }
-
-  @Override
-  public void traverse(RpcCommandVisitor visitor, Context ctx) {
-    if (visitor.visit(this, ctx)) {
-      visitor.accept(setters);
-    }
-    visitor.endVisit(this, ctx);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/IntValueCommand.java b/user/src/com/google/gwt/rpc/client/ast/IntValueCommand.java
deleted file mode 100644
index 1684d09..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/IntValueCommand.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor.Context;
-
-/**
- * Encapsulates a int value in the command stream.
- */
-public class IntValueCommand extends ScalarValueCommand {
-  private final int value;
-
-  public IntValueCommand(double value) {
-    this.value = (int) value;
-  }
-
-  public IntValueCommand(int value) {
-    this.value = value;
-  }
-
-  public IntValueCommand(Integer value) {
-    this.value = value;
-  }
-
-  @Override
-  public Integer getValue() {
-    return value;
-  }
-
-  @Override
-  public void traverse(RpcCommandVisitor visitor, Context ctx) {
-    visitor.visit(this, ctx);
-    visitor.endVisit(this, ctx);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/InvokeCustomFieldSerializerCommand.java b/user/src/com/google/gwt/rpc/client/ast/InvokeCustomFieldSerializerCommand.java
deleted file mode 100644
index d213050..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/InvokeCustomFieldSerializerCommand.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor.Context;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A placeholder for custom logic invocation.
- */
-public class InvokeCustomFieldSerializerCommand extends IdentityValueCommand
-    implements HasSetters, HasTargetClass, HasValues {
-  private final Class<?> manuallySerializedType;
-  private final Class<?> serializer;
-  private final List<SetCommand> setters = new ArrayList<SetCommand>();
-  private final Class<?> instantiatedType;
-  private final List<ValueCommand> values = new ArrayList<ValueCommand>();
-
-  public InvokeCustomFieldSerializerCommand(Class<?> instantiatedType,
-      Class<?> serializer, Class<?> manuallySerializedType) {
-    this.instantiatedType = instantiatedType;
-    this.serializer = serializer;
-    this.manuallySerializedType = manuallySerializedType;
-  }
-
-  public void addValue(ValueCommand value) {
-    values.add(value);
-  }
-
-  @Override
-  public void clear() {
-    values.clear();
-  }
-
-  public Class<?> getManuallySerializedType() {
-    return manuallySerializedType;
-  }
-
-  public Class<?> getSerializerClass() {
-    return serializer;
-  }
-
-  public List<SetCommand> getSetters() {
-    return setters;
-  }
-
-  public Class<?> getTargetClass() {
-    return instantiatedType;
-  }
-
-  public List<ValueCommand> getValues() {
-    return values;
-  }
-
-  public void set(Class<?> fieldDeclClass, String fieldName, ValueCommand value) {
-    setters.add(new SetCommand(fieldDeclClass, fieldName, value));
-  }
-
-  @Override
-  public void traverse(RpcCommandVisitor visitor, Context ctx) {
-    if (visitor.visit(this, ctx)) {
-      visitor.accept(values);
-      visitor.accept(setters);
-    }
-    visitor.endVisit(this, ctx);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/LongValueCommand.java b/user/src/com/google/gwt/rpc/client/ast/LongValueCommand.java
deleted file mode 100644
index fde7561..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/LongValueCommand.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor.Context;
-
-/**
- * Encapsulates a long value in the command stream.
- */
-public class LongValueCommand extends ScalarValueCommand {
-  /*
-   * NB: This does not have a constructor that accepts a double; the client must
-   * send the long
-   */
-  private final long value;
-
-  public LongValueCommand(long value) {
-    this.value = value;
-  }
-
-  public LongValueCommand(Long value) {
-    this.value = value;
-  }
-
-  @Override
-  public Long getValue() {
-    return value;
-  }
-
-  @Override
-  public void traverse(RpcCommandVisitor visitor, Context ctx) {
-    visitor.visit(this, ctx);
-    visitor.endVisit(this, ctx);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/NullValueCommand.java b/user/src/com/google/gwt/rpc/client/ast/NullValueCommand.java
deleted file mode 100644
index bfb42a1..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/NullValueCommand.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor.Context;
-
-/**
- * Represents a null or undefined value on the client.
- */
-public class NullValueCommand extends ScalarValueCommand {
-  /**
-   * The singleton instance of NullValueCommand.
-   */
-  public static final NullValueCommand INSTANCE = new NullValueCommand();
-
-  private NullValueCommand() {
-  }
-
-  @Override
-  public Object getValue() {
-    return null;
-  }
-
-  @Override
-  public void traverse(RpcCommandVisitor visitor, Context ctx) {
-    visitor.visit(this, ctx);
-    visitor.endVisit(this, ctx);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/ReturnCommand.java b/user/src/com/google/gwt/rpc/client/ast/ReturnCommand.java
deleted file mode 100644
index d068a60..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/ReturnCommand.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor.Context;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Represents a return statement.
- */
-public class ReturnCommand extends RpcCommand implements HasValues {
-  private final List<ValueCommand> values = new ArrayList<ValueCommand>();
-
-  public void addValue(ValueCommand value) {
-    values.add(value);
-  }
-
-  @Override
-  public void clear() {
-    values.clear();
-  }
-
-  public List<ValueCommand> getValues() {
-    return values;
-  }
-
-  @Override
-  public void traverse(RpcCommandVisitor visitor, Context ctx) {
-    if (visitor.visit(this, ctx)) {
-      visitor.accept(values);
-    }
-    visitor.endVisit(this, ctx);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/RpcCommand.java b/user/src/com/google/gwt/rpc/client/ast/RpcCommand.java
deleted file mode 100644
index 12097d9..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/RpcCommand.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor.Context;
-
-/**
- * Encapsulates a basic operation to be performed in RPC command stream.
- */
-public abstract class RpcCommand {
-  /**
-   * Delete all internal state so that the command may be used only for instance
-   * tracking.
-   */
-  public void clear() {
-  }
-
-  public abstract void traverse(RpcCommandVisitor visitor, Context ctx);
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/RpcCommandVisitor.java b/user/src/com/google/gwt/rpc/client/ast/RpcCommandVisitor.java
deleted file mode 100644
index aeefec8..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/RpcCommandVisitor.java
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import java.util.List;
-
-/**
- * Describes a visitor that will traverse the RpcCommand structures.
- */
-public class RpcCommandVisitor {
-  /**
-   * The context provides no services at this point and is provided as an
-   * extension point for future development.
-   */
-  public interface Context {
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   */
-  public final void accept(List<? extends RpcCommand> x) {
-    doAccept(x);
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   */
-  public final RpcCommand accept(RpcCommand x) {
-    return doAccept(x);
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   */
-  public final void accept(RpcCommand[] x) {
-    doAccept(x);
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public void endVisit(ArrayValueCommand x, Context ctx) {
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public void endVisit(BooleanValueCommand x, Context ctx) {
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public void endVisit(ByteValueCommand x, Context ctx) {
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public void endVisit(CharValueCommand x, Context ctx) {
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public void endVisit(DoubleValueCommand x, Context ctx) {
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public void endVisit(EnumValueCommand x, Context ctx) {
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public void endVisit(FloatValueCommand x, Context ctx) {
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public void endVisit(InstantiateCommand x, Context ctx) {
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public void endVisit(IntValueCommand x, Context ctx) {
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public void endVisit(InvokeCustomFieldSerializerCommand x, Context ctx) {
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public void endVisit(LongValueCommand x, Context ctx) {
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public void endVisit(NullValueCommand x, Context ctx) {
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public void endVisit(ReturnCommand x, Context ctx) {
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public void endVisit(SetCommand x, Context ctx) {
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public void endVisit(ShortValueCommand x, Context ctx) {
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public void endVisit(StringValueCommand x, Context ctx) {
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public void endVisit(ThrowCommand x, Context ctx) {
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public boolean visit(ArrayValueCommand x, Context ctx) {
-    return true;
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public boolean visit(BooleanValueCommand x, Context ctx) {
-    return true;
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public boolean visit(ByteValueCommand x, Context ctx) {
-    return true;
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public boolean visit(CharValueCommand x, Context ctx) {
-    return true;
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public boolean visit(DoubleValueCommand x, Context ctx) {
-    return true;
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public boolean visit(EnumValueCommand x, Context ctx) {
-    return true;
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public boolean visit(FloatValueCommand x, Context ctx) {
-    return true;
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public boolean visit(InstantiateCommand x, Context ctx) {
-    return true;
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public boolean visit(IntValueCommand x, Context ctx) {
-    return true;
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public boolean visit(InvokeCustomFieldSerializerCommand x, Context ctx) {
-    return true;
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public boolean visit(LongValueCommand x, Context ctx) {
-    return true;
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public boolean visit(NullValueCommand x, Context ctx) {
-    return true;
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public boolean visit(ReturnCommand x, Context ctx) {
-    return true;
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public boolean visit(SetCommand x, Context ctx) {
-    return true;
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public boolean visit(ShortValueCommand x, Context ctx) {
-    return true;
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public boolean visit(StringValueCommand x, Context ctx) {
-    return true;
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   * @param ctx the context for the visit
-   */
-  public boolean visit(ThrowCommand x, Context ctx) {
-    return true;
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   */
-  protected void doAccept(List<? extends RpcCommand> x) {
-    for (RpcCommand c : x) {
-      accept(c);
-    }
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   */
-  protected RpcCommand doAccept(RpcCommand x) {
-    x.traverse(this, null);
-    return x;
-  }
-
-  /**
-   * @param x a node in an RpcCommand structure
-   */
-  protected void doAccept(RpcCommand[] x) {
-    for (RpcCommand c : x) {
-      accept(c);
-    }
-  }
-
-  /*
-   * TODO: Make this fail more visibly
-   */
-  protected final void halt(Throwable t) {
-    throw new RuntimeException("Unable to continue", t);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/ScalarValueCommand.java b/user/src/com/google/gwt/rpc/client/ast/ScalarValueCommand.java
deleted file mode 100644
index a2168cb..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/ScalarValueCommand.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-/**
- * Represents a type hierarchy of values that do not maintain object identity on
- * the client.
- */
-public abstract class ScalarValueCommand extends ValueCommand {
-  @Override
-  public final boolean equals(Object o) {
-    if (!(o instanceof ScalarValueCommand)) {
-      return false;
-    }
-    ScalarValueCommand other = (ScalarValueCommand) o;
-    Object myValue = getValue();
-    Object otherValue = other.getValue();
-    if (myValue == null && otherValue == null) {
-      return true;
-    } else if (myValue == null && otherValue != null) {
-      return false;
-    } else {
-      return myValue.equals(otherValue);
-    }
-  }
-
-  /**
-   * Returns the value represented by the ScalarValueCommand.
-   */
-  public abstract Object getValue();
-
-  @Override
-  public final int hashCode() {
-    return getValue() == null ? 0 : getValue().hashCode();
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/SetCommand.java b/user/src/com/google/gwt/rpc/client/ast/SetCommand.java
deleted file mode 100644
index 2410f35..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/SetCommand.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor.Context;
-
-/**
- * A command to set the value of an object in the command stream.
- */
-public class SetCommand extends RpcCommand {
-  /*
-   * NB: Not using Field due to lack of GWT compatibility. Consider adding the
-   * Field type to the GWT JRE code.
-   */
-  private String field;
-  /**
-   * The class that defines the field. Used to account for field shadowing.
-   */
-  private Class<?> fieldDeclClass;
-  private ValueCommand value;
-
-  public SetCommand(Class<?> fieldDeclClass, String field, ValueCommand value) {
-    this.fieldDeclClass = fieldDeclClass;
-    this.field = field;
-    this.value = value;
-  }
-
-  @Override
-  public void clear() {
-    field = null;
-    value = null;
-  }
-
-  public String getField() {
-    return field;
-  }
-
-  public Class<?> getFieldDeclClass() {
-    return fieldDeclClass;
-  }
-
-  public ValueCommand getValue() {
-    return value;
-  }
-
-  @Override
-  public void traverse(RpcCommandVisitor visitor, Context ctx) {
-    if (visitor.visit(this, ctx)) {
-      value.traverse(visitor, ctx);
-    }
-    visitor.endVisit(this, ctx);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/ShortValueCommand.java b/user/src/com/google/gwt/rpc/client/ast/ShortValueCommand.java
deleted file mode 100644
index 9052a82..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/ShortValueCommand.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor.Context;
-
-/**
- * Encapsulates a short value in the command stream.
- */
-public class ShortValueCommand extends ScalarValueCommand {
-  private final short value;
-
-  public ShortValueCommand(double value) {
-    this.value = (short) value;
-  }
-
-  public ShortValueCommand(short value) {
-    this.value = value;
-  }
-
-  public ShortValueCommand(Short value) {
-    this.value = value;
-  }
-
-  @Override
-  public Short getValue() {
-    return value;
-  }
-
-  @Override
-  public void traverse(RpcCommandVisitor visitor, Context ctx) {
-    visitor.visit(this, ctx);
-    visitor.endVisit(this, ctx);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/StringValueCommand.java b/user/src/com/google/gwt/rpc/client/ast/StringValueCommand.java
deleted file mode 100644
index 05db7b9..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/StringValueCommand.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor.Context;
-
-/**
- * Encapsulates a string value in the command stream.
- */
-public class StringValueCommand extends ScalarValueCommand {
-  private final String value;
-
-  public StringValueCommand(String value) {
-    this.value = value;
-  }
-
-  @Override
-  public String getValue() {
-    return value;
-  }
-
-  @Override
-  public void traverse(RpcCommandVisitor visitor, Context ctx) {
-    visitor.visit(this, ctx);
-    visitor.endVisit(this, ctx);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/ThrowCommand.java b/user/src/com/google/gwt/rpc/client/ast/ThrowCommand.java
deleted file mode 100644
index f8057a8..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/ThrowCommand.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor.Context;
-
-import java.util.Collections;
-import java.util.List;
-
-/**
- * A command to indicate that a value was thrown by the remote side.
- */
-public class ThrowCommand extends RpcCommand implements HasValues {
-  private ValueCommand toThrow;
-
-  public void addValue(ValueCommand value) {
-    assert toThrow == null;
-    toThrow = value;
-  }
-
-  public ValueCommand getThrownValue() {
-    return toThrow;
-  }
-
-  public List<ValueCommand> getValues() {
-    return Collections.singletonList(toThrow);
-  }
-
-  @Override
-  public void traverse(RpcCommandVisitor visitor, Context ctx) {
-    if (visitor.visit(this, ctx)) {
-      visitor.accept(toThrow);
-    }
-    visitor.endVisit(this, ctx);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/ast/ValueCommand.java b/user/src/com/google/gwt/rpc/client/ast/ValueCommand.java
deleted file mode 100644
index 08b170f..0000000
--- a/user/src/com/google/gwt/rpc/client/ast/ValueCommand.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.ast;
-
-/**
- * Represents an atomic value.
- */
-public abstract class ValueCommand extends RpcCommand {
-  protected ValueCommand() {
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/impl/ClientWriterFactory.java b/user/src/com/google/gwt/rpc/client/impl/ClientWriterFactory.java
deleted file mode 100644
index a9ab98a..0000000
--- a/user/src/com/google/gwt/rpc/client/impl/ClientWriterFactory.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.impl;
-
-import com.google.gwt.rpc.client.ast.CommandSink;
-import com.google.gwt.rpc.server.CommandServerSerializationStreamReader;
-import com.google.gwt.rpc.server.CommandServerSerializationStreamWriter;
-import com.google.gwt.rpc.server.HostedModeClientOracle;
-import com.google.gwt.rpc.server.SimplePayloadDecoder;
-import com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException;
-import com.google.gwt.user.client.rpc.SerializationException;
-import com.google.gwt.user.client.rpc.SerializationStreamReader;
-import com.google.gwt.user.client.rpc.SerializationStreamWriter;
-
-import java.util.Collections;
-
-/**
- * Isolates client code from swapping out the command factory in hosted versus
- * Production Mode. This type has a super-source peer which is used in
- * Production Mode.
- */
-public class ClientWriterFactory {
-
-  public static SerializationStreamReader createReader(String payload)
-      throws IncompatibleRemoteServiceException, RemoteException {
-    SimplePayloadDecoder decoder;
-    try {
-      decoder = new SimplePayloadDecoder(new HostedModeClientOracle(), payload);
-    } catch (ClassNotFoundException e) {
-      throw new IncompatibleRemoteServiceException(
-          "Client does not have a type sent by the server", e);
-    }
-    CommandServerSerializationStreamReader reader = new CommandServerSerializationStreamReader();
-    if (decoder.getThrownValue() != null) {
-      reader.prepareToRead(Collections.singletonList(decoder.getThrownValue()));
-      try {
-        throw new RemoteException((Throwable) reader.readObject());
-      } catch (ClassCastException e) {
-        throw new RemoteException(
-            "The remote end threw something other than a Throwable", e);
-      } catch (SerializationException e) {
-        throw new RemoteException(
-            "The remote end threw an exception which could not be deserialized",
-            e);
-      }
-    } else {
-      reader.prepareToRead(decoder.getValues());
-    }
-    return reader;
-  }
-
-  @SuppressWarnings("unused") // used by super-source peer
-  public static SerializationStreamWriter createWriter(
-      TypeOverrides typeOverrides, CommandSink commandSink) {
-    return new CommandServerSerializationStreamWriter(commandSink);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/impl/CommandClientSerializationStreamReader.java b/user/src/com/google/gwt/rpc/client/impl/CommandClientSerializationStreamReader.java
deleted file mode 100644
index 83586a0..0000000
--- a/user/src/com/google/gwt/rpc/client/impl/CommandClientSerializationStreamReader.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.impl;
-
-import com.google.gwt.core.client.JavaScriptException;
-import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.core.client.JsArray;
-import com.google.gwt.core.client.UnsafeNativeLong;
-import com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException;
-import com.google.gwt.user.client.rpc.SerializationException;
-import com.google.gwt.user.client.rpc.SerializationStreamReader;
-
-/**
- * A peer to CommandServerSerializationStreamWriter.
- */
-public class CommandClientSerializationStreamReader implements
-    SerializationStreamReader {
-
-  /**
-   * An identifier in the payload evaluation context that is used to hold
-   * backreferences.
-   */
-  public static final String BACKREF_IDENT = "_";
-
-  private static native JsArray<JavaScriptObject> eval(String payload) /*-{
-    return eval(payload);
-  }-*/;
-
-  private static native boolean readBoolean0(JavaScriptObject obj, int idx) /*-{
-    return !!obj[idx];
-  }-*/;
-
-  private static native byte readByte0(JavaScriptObject obj, int idx) /*-{
-    return obj[idx];
-  }-*/;
-
-  private static native char readChar0(JavaScriptObject obj, int idx) /*-{
-    return obj[idx];
-  }-*/;
-
-  private static native double readDouble0(JavaScriptObject obj, int idx) /*-{
-    return obj[idx];
-  }-*/;
-
-  private static native float readFloat0(JavaScriptObject obj, int idx) /*-{
-    return obj[idx];
-  }-*/;
-
-  private static native int readInt0(JavaScriptObject obj, int idx) /*-{
-    return obj[idx];
-  }-*/;
-
-  @UnsafeNativeLong
-  private static native long readLong0(JavaScriptObject obj, int idx) /*-{
-    return obj[idx];
-  }-*/;
-
-  private static native Object readObject0(JavaScriptObject obj, int idx) /*-{
-    return obj[idx];
-  }-*/;
-
-  private static native short readShort0(JavaScriptObject obj, int idx) /*-{
-    return obj[idx];
-  }-*/;
-
-  private static native String readString0(JavaScriptObject obj, int idx) /*-{
-    return obj[idx];
-  }-*/;
-
-  // This field may be reset externally
-  volatile int idx = 0;
-  volatile JsArray<JavaScriptObject> payload;
-
-  public void prepareToRead(String js) throws RemoteException {
-    try {
-      payload = eval("(function(){var " + BACKREF_IDENT + "={};" + js + "})()");
-      assert payload != null : "Payload evaluated to null";
-    } catch (JavaScriptException e) {
-      throw new IncompatibleRemoteServiceException(
-          "Unable to evaluate payload", e);
-    } catch (Throwable e) {
-      throw new RemoteException("Unable to evaluate payload", e);
-    }
-  }
-
-  public boolean readBoolean() throws SerializationException {
-    assert idx < payload.length() : "Attempting to read beyond end of payload";
-    return readBoolean0(payload, idx++);
-  }
-
-  public byte readByte() throws SerializationException {
-    assert idx < payload.length() : "Attempting to read beyond end of payload";
-    return readByte0(payload, idx++);
-  }
-
-  public char readChar() throws SerializationException {
-    assert idx < payload.length() : "Attempting to read beyond end of payload";
-    return readChar0(payload, idx++);
-  }
-
-  public double readDouble() throws SerializationException {
-    assert idx < payload.length() : "Attempting to read beyond end of payload";
-    return readDouble0(payload, idx++);
-  }
-
-  public float readFloat() throws SerializationException {
-    assert idx < payload.length() : "Attempting to read beyond end of payload";
-    return readFloat0(payload, idx++);
-  }
-
-  public int readInt() throws SerializationException {
-    assert idx < payload.length() : "Attempting to read beyond end of payload";
-    return readInt0(payload, idx++);
-  }
-
-  public long readLong() throws SerializationException {
-    assert idx < payload.length() : "Attempting to read beyond end of payload";
-    return readLong0(payload, idx++);
-  }
-
-  public Object readObject() throws SerializationException {
-    assert idx < payload.length() : "Attempting to read beyond end of payload";
-    return readObject0(payload, idx++);
-  }
-
-  public short readShort() throws SerializationException {
-    assert idx < payload.length() : "Attempting to read beyond end of payload";
-    return readShort0(payload, idx++);
-  }
-
-  public String readString() throws SerializationException {
-    assert idx < payload.length() : "Attempting to read beyond end of payload";
-    return readString0(payload, idx++);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/impl/CommandClientSerializationStreamWriter.java b/user/src/com/google/gwt/rpc/client/impl/CommandClientSerializationStreamWriter.java
deleted file mode 100644
index 14416e3..0000000
--- a/user/src/com/google/gwt/rpc/client/impl/CommandClientSerializationStreamWriter.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.impl;
-
-import com.google.gwt.core.client.UnsafeNativeLong;
-import com.google.gwt.rpc.client.ast.ArrayValueCommand;
-import com.google.gwt.rpc.client.ast.BooleanValueCommand;
-import com.google.gwt.rpc.client.ast.CharValueCommand;
-import com.google.gwt.rpc.client.ast.CommandSink;
-import com.google.gwt.rpc.client.ast.DoubleValueCommand;
-import com.google.gwt.rpc.client.ast.EnumValueCommand;
-import com.google.gwt.rpc.client.ast.HasSetters;
-import com.google.gwt.rpc.client.ast.IdentityValueCommand;
-import com.google.gwt.rpc.client.ast.InstantiateCommand;
-import com.google.gwt.rpc.client.ast.InvokeCustomFieldSerializerCommand;
-import com.google.gwt.rpc.client.ast.LongValueCommand;
-import com.google.gwt.rpc.client.ast.NullValueCommand;
-import com.google.gwt.rpc.client.ast.StringValueCommand;
-import com.google.gwt.rpc.client.ast.ValueCommand;
-import com.google.gwt.rpc.client.impl.TypeOverrides.SerializeFunction;
-import com.google.gwt.user.client.rpc.IsSerializable;
-import com.google.gwt.user.client.rpc.SerializationException;
-
-import java.io.Serializable;
-import java.util.IdentityHashMap;
-import java.util.Map;
-
-/**
- * Provides a facade around serialization logic in client code.
- */
-public class CommandClientSerializationStreamWriter extends
-    CommandSerializationStreamWriterBase {
-
-  private static Object anObject = new Object[] {};
-
-  static {
-    // Don't need to explicitly filter $H
-    anObject.hashCode();
-  }
-
-  private final Map<Object, IdentityValueCommand> identityMap;
-  private final TypeOverrides serializer;
-
-  public CommandClientSerializationStreamWriter(TypeOverrides serializer,
-      CommandSink sink) {
-    this(serializer, sink, new IdentityHashMap<Object, IdentityValueCommand>());
-  }
-
-  private CommandClientSerializationStreamWriter(TypeOverrides serializer,
-      CommandSink sink, Map<Object, IdentityValueCommand> identityMap) {
-    super(sink);
-    this.serializer = serializer;
-    this.identityMap = identityMap;
-  }
-
-  /**
-   * Type is passed in to handle primitive types.
-   */
-  @Override
-  protected ValueCommand makeValue(Class<?> type, Object value)
-      throws SerializationException {
-    SerializeFunction customSerializer;
-    ValueCommand toReturn;
-
-    if (value == null) {
-      toReturn = NullValueCommand.INSTANCE;
-    } else if (type.isPrimitive()) {
-      if (type == boolean.class) {
-        toReturn = new BooleanValueCommand((Boolean) value);
-      } else if (type == void.class) {
-        toReturn = NullValueCommand.INSTANCE;
-      } else if (type == long.class) {
-        toReturn = new LongValueCommand((Long) value);
-      } else if (type == char.class) {
-        toReturn = new CharValueCommand((Character) value);
-      } else {
-        assert value instanceof Number : "Expecting Number; had "
-            + value.getClass().getName();
-        toReturn = new DoubleValueCommand(((Number) value).doubleValue());
-      }
-
-    } else if ((toReturn = identityMap.get(value)) != null) {
-      // Fall through
-
-    } else if (type == String.class) {
-      toReturn = new StringValueCommand((String) value);
-
-    } else if (type.isArray()) {
-      ArrayValueCommand array = new ArrayValueCommand(type.getComponentType());
-      identityMap.put(value, array);
-      extractData(array, value);
-      toReturn = array;
-
-    } else if (value instanceof Enum<?>) {
-      EnumValueCommand e = new EnumValueCommand();
-      e.setValue((Enum<?>) value);
-      toReturn = e;
-
-    } else if ((customSerializer = serializer.getOverride(type.getName())) != null) {
-      toReturn = invokeCustomSerializer(customSerializer, type, value);
-
-    } else {
-      toReturn = makeObject(type, value);
-    }
-
-    return toReturn;
-  }
-
-  private native void extractData(ArrayValueCommand x, Object obj) /*-{
-    for (var i = 0, j = obj.length; i < j; i++) {
-      var value = this.@com.google.gwt.rpc.client.impl.CommandClientSerializationStreamWriter::makeValue(Ljava/lang/Object;)(obj[i]);
-      x.@com.google.gwt.rpc.client.ast.ArrayValueCommand::add(Lcom/google/gwt/rpc/client/ast/ValueCommand;)(value);
-    }
-  }-*/;
-
-  private native void extractData(HasSetters x, Object obj) /*-{
-    for (var key in obj) {
-      // Ignore common properties
-      if (key in @com.google.gwt.rpc.client.impl.CommandClientSerializationStreamWriter::anObject) {
-        continue;
-      }
-      this.@com.google.gwt.rpc.client.impl.CommandClientSerializationStreamWriter::extractField(Lcom/google/gwt/rpc/client/ast/HasSetters;Ljava/lang/Object;Ljava/lang/String;)(x,obj,key);
-    }
-  }-*/;
-
-  private native void extractField(HasSetters x, Object obj, String key) /*-{
-    var command = this.@com.google.gwt.rpc.client.impl.CommandClientSerializationStreamWriter::makeValue(Ljava/lang/Object;)(obj[key]);
-
-    // makeValue may return undefined
-    command && x.@com.google.gwt.rpc.client.ast.HasSetters::set(Ljava/lang/Class;Ljava/lang/String;Lcom/google/gwt/rpc/client/ast/ValueCommand;)(null, key, command);
-  }-*/;
-
-  private ValueCommand invokeCustomSerializer(
-      SerializeFunction serializeFunction, Class<?> type, Object value) {
-    InvokeCustomFieldSerializerCommand command = new InvokeCustomFieldSerializerCommand(
-        type, null, null);
-    identityMap.put(value, command);
-
-    /*
-     * Pass the current identityMap into the new writer to allow circular
-     * references through the graph emitted by the CFS.
-     */
-    CommandClientSerializationStreamWriter subWriter = new CommandClientSerializationStreamWriter(
-        serializer, new HasValuesCommandSink(command), identityMap);
-
-    serializeFunction.serialize(subWriter, value);
-    if (serializer.hasExtraFields(type.getName())) {
-      for (String extraField : serializer.getExtraFields(type.getName())) {
-        if (extraField != null) {
-          // Sometimes fields might be pruned
-          extractField(command, value, extraField);
-        }
-      }
-    }
-    return command;
-  }
-
-  private ValueCommand makeObject(Class<?> clazz, Object value)
-      throws SerializationException {
-    if (!(value instanceof Serializable || value instanceof IsSerializable)) {
-      throw new SerializationException(clazz.getName()
-          + " is not a Serializable type");
-    }
-    InstantiateCommand x = new InstantiateCommand(clazz);
-    identityMap.put(value, x);
-
-    if (serializer.hasExtraFields(clazz.getName())) {
-      // Objects with transient fields or non-trivial semantics
-      for (String fieldName : serializer.getExtraFields(clazz.getName())) {
-        extractField(x, value, fieldName);
-      }
-    } else {
-      // Just a for-in loop
-      extractData(x, value);
-    }
-    return x;
-  }
-
-  @UnsafeNativeLong
-  private native ValueCommand makeValue(Object value) /*-{
-    var type;
-    if (value) {
-      // Maybe turn objects into primitives
-      value.valueOf && (value = value.valueOf());
-
-      // See if the value is our web-mode representation of a long
-      if (value.hasOwnProperty('l') && value.hasOwnProperty('m') && value.hasOwnProperty('h')) {
-        type = 'long';
-      }
-    }
-    type || (type = typeof value);
-
-    switch (type) {
-      case 'boolean':
-        return @com.google.gwt.rpc.client.ast.BooleanValueCommand::new(Z)(value);
-
-      case 'number':
-        return @com.google.gwt.rpc.client.ast.DoubleValueCommand::new(D)(value);
-
-      case 'string':
-        return @com.google.gwt.rpc.client.ast.StringValueCommand::new(Ljava/lang/String;)(value);
-
-      case 'long':
-        return @com.google.gwt.rpc.client.ast.LongValueCommand::new(J)(value);
-
-      case 'function':
-        // Not serializable
-        break;
-
-      case 'object':
-        // typeof null == 'object'
-        if (!value) {
-          return @com.google.gwt.rpc.client.ast.NullValueCommand::INSTANCE;
-        }
-
-        if (!value.@java.lang.Object::typeMarker) {
-          // Not a Java object
-          break;
-        }
-
-        return this.@com.google.gwt.rpc.client.impl.CommandClientSerializationStreamWriter::makeValue(Ljava/lang/Class;Ljava/lang/Object;)(value.@java.lang.Object::getClass()(), value);
-
-      case 'undefined':
-        // typeof undefined == 'undefined', but we treat it as null
-        return @com.google.gwt.rpc.client.ast.NullValueCommand::INSTANCE;
-
-      default:
-        throw @java.lang.RuntimeException::new(Ljava/lang/String;)('Unknown type ' + type);
-    }
-
-    // Intentionally return undefined
-  }-*/;
-}
diff --git a/user/src/com/google/gwt/rpc/client/impl/CommandSerializationStreamWriterBase.java b/user/src/com/google/gwt/rpc/client/impl/CommandSerializationStreamWriterBase.java
deleted file mode 100644
index 887ee11..0000000
--- a/user/src/com/google/gwt/rpc/client/impl/CommandSerializationStreamWriterBase.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.impl;
-
-import com.google.gwt.rpc.client.ast.CommandSink;
-import com.google.gwt.rpc.client.ast.ValueCommand;
-import com.google.gwt.user.client.rpc.SerializationException;
-import com.google.gwt.user.client.rpc.SerializationStreamWriter;
-
-/**
- * Contains base methods for implementing a SerializationStreamWriter.
- */
-public abstract class CommandSerializationStreamWriterBase implements
-    SerializationStreamWriter {
-
-  private final CommandSink commandSink;
-
-  protected CommandSerializationStreamWriterBase(CommandSink sink) {
-    this.commandSink = sink;
-  }
-
-  public void writeBoolean(boolean value) throws SerializationException {
-    commandSink.accept(makeValue(boolean.class, value));
-  }
-
-  public void writeByte(byte value) throws SerializationException {
-    commandSink.accept(makeValue(byte.class, value));
-  }
-
-  public void writeChar(char value) throws SerializationException {
-    commandSink.accept(makeValue(char.class, value));
-  }
-
-  public void writeDouble(double value) throws SerializationException {
-    commandSink.accept(makeValue(double.class, value));
-  }
-
-  public void writeFloat(float value) throws SerializationException {
-    commandSink.accept(makeValue(float.class, value));
-  }
-
-  public void writeInt(int value) throws SerializationException {
-    commandSink.accept(makeValue(int.class, value));
-  }
-
-  public void writeLong(long value) throws SerializationException {
-    commandSink.accept(makeValue(long.class, value));
-  }
-
-  public void writeObject(Object instance) throws SerializationException {
-    commandSink.accept(makeValue(instance != null ? instance.getClass()
-        : void.class, instance));
-  }
-
-  public void writeShort(short value) throws SerializationException {
-    commandSink.accept(makeValue(short.class, value));
-  }
-
-  public void writeString(String value) throws SerializationException {
-    commandSink.accept(makeValue(String.class, value));
-  }
-
-  protected final CommandSink getCommandSink() {
-    return commandSink;
-  }
-
-  protected abstract ValueCommand makeValue(Class<?> type, Object value)
-      throws SerializationException;
-
-}
\ No newline at end of file
diff --git a/user/src/com/google/gwt/rpc/client/impl/CommandToStringWriter.java b/user/src/com/google/gwt/rpc/client/impl/CommandToStringWriter.java
deleted file mode 100644
index e1f1fd8..0000000
--- a/user/src/com/google/gwt/rpc/client/impl/CommandToStringWriter.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.impl;
-
-import com.google.gwt.rpc.client.ast.CommandSink;
-import com.google.gwt.rpc.client.ast.ReturnCommand;
-import com.google.gwt.rpc.client.ast.RpcCommand;
-import com.google.gwt.rpc.client.ast.ValueCommand;
-import com.google.gwt.user.client.rpc.SerializationException;
-import com.google.gwt.user.client.rpc.SerializationStreamWriter;
-
-/**
- * Existing code assumes that a SerializationStreamWriter will export its
- * payload via the toString() method. This uses an internal CommandSink and
- * creates a string payload on-demand.
- */
-public class CommandToStringWriter implements SerializationStreamWriter {
-
-  private static class ToStringCommandSink extends CommandSink {
-    private final ReturnCommand retCommand = new ReturnCommand();
-
-    @Override
-    public void accept(RpcCommand command) throws SerializationException {
-      retCommand.addValue((ValueCommand) command);
-    }
-
-    @Override
-    public void finish() throws SerializationException {
-    }
-
-    @Override
-    public String toString() {
-      StringBuilder sb = new StringBuilder();
-      SimplePayloadSink sink = new SimplePayloadSink(sb);
-      try {
-        sink.accept(retCommand);
-        sink.finish();
-      } catch (SerializationException e) {
-        throw new RuntimeException("Unable to create payload", e);
-      }
-      return sb.toString();
-    }
-  }
-
-  private final ToStringCommandSink commandSink = new ToStringCommandSink();
-  private final SerializationStreamWriter writer;
-
-  public CommandToStringWriter(TypeOverrides overrides) {
-    writer = ClientWriterFactory.createWriter(overrides, commandSink);
-  }
-
-  @Override
-  public String toString() {
-    return commandSink.toString();
-  }
-
-  public void writeBoolean(boolean value) throws SerializationException {
-    writer.writeBoolean(value);
-  }
-
-  public void writeByte(byte value) throws SerializationException {
-    writer.writeByte(value);
-  }
-
-  public void writeChar(char value) throws SerializationException {
-    writer.writeChar(value);
-  }
-
-  public void writeDouble(double value) throws SerializationException {
-    writer.writeDouble(value);
-  }
-
-  public void writeFloat(float value) throws SerializationException {
-    writer.writeFloat(value);
-  }
-
-  public void writeInt(int value) throws SerializationException {
-    writer.writeInt(value);
-  }
-
-  public void writeLong(long value) throws SerializationException {
-    writer.writeLong(value);
-  }
-
-  public void writeObject(Object value) throws SerializationException {
-    writer.writeObject(value);
-  }
-
-  public void writeShort(short value) throws SerializationException {
-    writer.writeShort(value);
-  }
-
-  public void writeString(String value) throws SerializationException {
-    writer.writeString(value);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/impl/EscapeUtil.java b/user/src/com/google/gwt/rpc/client/impl/EscapeUtil.java
deleted file mode 100644
index 9db3edf..0000000
--- a/user/src/com/google/gwt/rpc/client/impl/EscapeUtil.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.impl;
-
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.rpc.impl.ClientSerializationStreamWriter;
-import com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter;
-
-/**
- * Provides the JVM implementations for payload escaping.
- */
-public class EscapeUtil {
-  public static String escape(String payload) {
-    if (GWT.isClient()) {
-      return ClientSerializationStreamWriter.quoteString(payload);
-    } else {
-      String quoted = ServerSerializationStreamWriter.escapeString(payload);
-      return quoted.substring(1, quoted.length() - 1);
-    }
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/impl/HasValuesCommandSink.java b/user/src/com/google/gwt/rpc/client/impl/HasValuesCommandSink.java
deleted file mode 100644
index e975334..0000000
--- a/user/src/com/google/gwt/rpc/client/impl/HasValuesCommandSink.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.impl;
-
-import com.google.gwt.rpc.client.ast.CommandSink;
-import com.google.gwt.rpc.client.ast.HasValues;
-import com.google.gwt.rpc.client.ast.RpcCommand;
-import com.google.gwt.rpc.client.ast.ValueCommand;
-import com.google.gwt.user.client.rpc.SerializationException;
-
-/**
- * A simple CommandSink that adds observed values to a container command.
- */
-public class HasValuesCommandSink extends CommandSink {
-  private HasValues container;
-
-  public HasValuesCommandSink(HasValues container) {
-    this.container = container;
-  }
-
-  @Override
-  public void accept(RpcCommand command) throws SerializationException {
-    if (!(command instanceof ValueCommand)) {
-      throw new SerializationException(command.getClass().getName());
-    }
-    container.addValue((ValueCommand) command);
-  }
-
-  /**
-   * Does nothing.
-   */
-  @Override
-  public void finish() throws SerializationException {
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/impl/ListCommandSink.java b/user/src/com/google/gwt/rpc/client/impl/ListCommandSink.java
deleted file mode 100644
index 9514649..0000000
--- a/user/src/com/google/gwt/rpc/client/impl/ListCommandSink.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.impl;
-
-import com.google.gwt.rpc.client.ast.CommandSink;
-import com.google.gwt.rpc.client.ast.RpcCommand;
-import com.google.gwt.user.client.rpc.SerializationException;
-
-import java.util.List;
-
-/**
- * A simple CommandSink that adds observed commands to a list.
- */
-public class ListCommandSink extends CommandSink {
-  private List<RpcCommand> commands;
-
-  public ListCommandSink(List<RpcCommand> commands) {
-    this.commands = commands;
-  }
-
-  @Override
-  public void accept(RpcCommand command) throws SerializationException {
-    commands.add(command);
-  }
-
-  /**
-   * Does nothing.
-   */
-  @Override
-  public void finish() throws SerializationException {
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/impl/RemoteException.java b/user/src/com/google/gwt/rpc/client/impl/RemoteException.java
deleted file mode 100644
index e0205ed..0000000
--- a/user/src/com/google/gwt/rpc/client/impl/RemoteException.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.impl;
-
-/**
- * A wrapper exception type indicating that the remote end threw an exception
- * over the wire.
- */
-public class RemoteException extends RuntimeException {
-  public RemoteException() {
-  }
-
-  public RemoteException(String msg, Throwable cause) {
-    super(msg, cause);
-  }
-
-  public RemoteException(Throwable cause) {
-    super(cause);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/impl/RpcCallbackAdapter.java b/user/src/com/google/gwt/rpc/client/impl/RpcCallbackAdapter.java
deleted file mode 100644
index dd51a95..0000000
--- a/user/src/com/google/gwt/rpc/client/impl/RpcCallbackAdapter.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2008 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.impl;
-
-import com.google.gwt.http.client.Request;
-import com.google.gwt.http.client.RequestCallback;
-import com.google.gwt.http.client.Response;
-import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException;
-import com.google.gwt.user.client.rpc.InvocationException;
-import com.google.gwt.user.client.rpc.SerializationException;
-import com.google.gwt.user.client.rpc.SerializationStreamFactory;
-import com.google.gwt.user.client.rpc.StatusCodeException;
-import com.google.gwt.user.client.rpc.impl.RpcStatsContext;
-
-/**
- * Adapter from a {@link RequestCallback} interface to an {@link AsyncCallback}
- * interface.
- * 
- * For internal use only.
- * 
- * @param <T> the type parameter for the {@link AsyncCallback}
- */
-public class RpcCallbackAdapter<T> implements RequestCallback {
-
-  /**
-   * {@link AsyncCallback} to notify or success or failure.
-   */
-  private final AsyncCallback<T> callback;
-
-  /**
-   * Used for stats recording.
-   */
-  private final String methodName;
-
-  /**
-   * Used for stats recording.
-   */
-  private final RpcStatsContext statsContext;
-
-  private final SerializationStreamFactory streamFactory;
-
-  public RpcCallbackAdapter(SerializationStreamFactory streamFactory,
-      String methodName, RpcStatsContext statsContext, AsyncCallback<T> callback) {
-    assert (streamFactory != null);
-    assert (callback != null);
-
-    this.streamFactory = streamFactory;
-    this.callback = callback;
-    this.methodName = methodName;
-    this.statsContext = statsContext;
-  }
-
-  public void onError(Request request, Throwable exception) {
-    callback.onFailure(exception);
-  }
-
-  @SuppressWarnings(value = {"unchecked", "unused"})
-  public void onResponseReceived(Request request, Response response) {
-    T result = null;
-    Throwable caught = null;
-    try {
-      String encodedResponse = response.getText();
-      int statusCode = response.getStatusCode();
-      boolean toss = statsContext.isStatsAvailable()
-          && statsContext.stats(
-              statsContext.bytesStat(methodName, encodedResponse.length(), "responseReceived"));
-
-      if (statusCode != Response.SC_OK) {
-        caught = new StatusCodeException(statusCode, response.getStatusText(), encodedResponse);
-      } else if (encodedResponse == null) {
-        // This can happen if the XHR is interrupted by the server dying
-        caught = new InvocationException("No response payload from " + methodName);
-      } else {
-        result = (T) streamFactory.createStreamReader(encodedResponse).readObject();
-      }
-    } catch (RemoteException e) {
-      caught = e.getCause();
-    } catch (SerializationException e) {
-      caught = new IncompatibleRemoteServiceException(
-          "The response could not be deserialized", e);
-    } catch (Throwable e) {
-      caught = e;
-    } finally {
-      boolean toss = statsContext.isStatsAvailable()
-          && statsContext.stats(statsContext.timeStat(methodName, "responseDeserialized"));
-    }
-
-    try {
-      if (caught == null) {
-        callback.onSuccess(result);
-      } else {
-        callback.onFailure(caught);
-      }
-    } finally {
-      boolean toss = statsContext.isStatsAvailable()
-          && statsContext.stats(statsContext.timeStat(methodName, "end"));
-    }
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/impl/RpcServiceProxy.java b/user/src/com/google/gwt/rpc/client/impl/RpcServiceProxy.java
deleted file mode 100644
index ceb4df0..0000000
--- a/user/src/com/google/gwt/rpc/client/impl/RpcServiceProxy.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.impl;
-
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.http.client.RequestCallback;
-import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.google.gwt.user.client.rpc.SerializationException;
-import com.google.gwt.user.client.rpc.SerializationStreamReader;
-import com.google.gwt.user.client.rpc.SerializationStreamWriter;
-import com.google.gwt.user.client.rpc.impl.RemoteServiceProxy;
-import com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.ResponseReader;
-import com.google.gwt.user.client.rpc.impl.RpcStatsContext;
-
-/**
- * The base type for RPC proxies.
- */
-public class RpcServiceProxy extends RemoteServiceProxy {
-  private final TypeOverrides typeOverrides;
-
-  protected RpcServiceProxy(String moduleBaseURL,
-      String remoteServiceRelativePath, TypeOverrides typeOverrides) {
-    super(moduleBaseURL, remoteServiceRelativePath,
-        GWT.getPermutationStrongName(), null);
-    this.typeOverrides = typeOverrides;
-  }
-
-  @Override
-  public SerializationStreamReader createStreamReader(String encoded)
-      throws SerializationException, RemoteException {
-    return ClientWriterFactory.createReader(encoded);
-  }
-
-  @Override
-  public SerializationStreamWriter createStreamWriter() {
-    return new CommandToStringWriter(typeOverrides);
-  }
-
-  @Override
-  protected <T> RequestCallback doCreateRequestCallback(
-      ResponseReader responseReader, String methodName, RpcStatsContext statsContext,
-      AsyncCallback<T> callback) {
-    return new RpcCallbackAdapter<T>(this, methodName, statsContext,
-        callback);
-  }
-
-}
diff --git a/user/src/com/google/gwt/rpc/client/impl/SimplePayloadSink.java b/user/src/com/google/gwt/rpc/client/impl/SimplePayloadSink.java
deleted file mode 100644
index 1d32d93..0000000
--- a/user/src/com/google/gwt/rpc/client/impl/SimplePayloadSink.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.impl;
-
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.rpc.client.ast.ArrayValueCommand;
-import com.google.gwt.rpc.client.ast.BooleanValueCommand;
-import com.google.gwt.rpc.client.ast.ByteValueCommand;
-import com.google.gwt.rpc.client.ast.CharValueCommand;
-import com.google.gwt.rpc.client.ast.CommandSink;
-import com.google.gwt.rpc.client.ast.DoubleValueCommand;
-import com.google.gwt.rpc.client.ast.EnumValueCommand;
-import com.google.gwt.rpc.client.ast.FloatValueCommand;
-import com.google.gwt.rpc.client.ast.InstantiateCommand;
-import com.google.gwt.rpc.client.ast.IntValueCommand;
-import com.google.gwt.rpc.client.ast.InvokeCustomFieldSerializerCommand;
-import com.google.gwt.rpc.client.ast.LongValueCommand;
-import com.google.gwt.rpc.client.ast.NullValueCommand;
-import com.google.gwt.rpc.client.ast.ReturnCommand;
-import com.google.gwt.rpc.client.ast.RpcCommand;
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor;
-import com.google.gwt.rpc.client.ast.SetCommand;
-import com.google.gwt.rpc.client.ast.ShortValueCommand;
-import com.google.gwt.rpc.client.ast.StringValueCommand;
-import com.google.gwt.rpc.client.ast.ThrowCommand;
-import com.google.gwt.rpc.client.ast.ValueCommand;
-import com.google.gwt.user.client.rpc.SerializationException;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * This implementation of CommandSink encodes RpcCommands in a simple transport
- * format that can be interpreted by both the client and the server.
- */
-public class SimplePayloadSink extends CommandSink {
-
-  private class Visitor extends RpcCommandVisitor {
-
-    @Override
-    public void endVisit(BooleanValueCommand x, Context ctx) {
-      appendTypedData(BOOLEAN_TYPE, x.getValue() ? "1" : "0");
-    }
-
-    @Override
-    public void endVisit(ByteValueCommand x, Context ctx) {
-      appendTypedData(BYTE_TYPE, x.getValue().toString());
-    }
-
-    @Override
-    public void endVisit(CharValueCommand x, Context ctx) {
-      appendTypedData(CHAR_TYPE, String.valueOf((int) x.getValue()));
-    }
-
-    @Override
-    public void endVisit(DoubleValueCommand x, Context ctx) {
-      appendTypedData(DOUBLE_TYPE, x.getValue().toString());
-    }
-
-    @Override
-    public void endVisit(EnumValueCommand x, Context ctx) {
-      // ETypeSeedName~IOrdinal~
-      if (appendIdentity(x)) {
-        appendTypedData(ENUM_TYPE, x.getValue().getDeclaringClass().getName());
-        // use ordinal (and not name), since name might have been obfuscated
-        appendTypedData(INT_TYPE, String.valueOf(x.getValue().ordinal()));
-      }
-    }
-
-    @Override
-    public void endVisit(FloatValueCommand x, Context ctx) {
-      appendTypedData(FLOAT_TYPE, x.getValue().toString());
-    }
-
-    @Override
-    public void endVisit(IntValueCommand x, Context ctx) {
-      appendTypedData(INT_TYPE, x.getValue().toString());
-    }
-
-    @Override
-    public void endVisit(LongValueCommand x, Context ctx) {
-      appendTypedData(LONG_TYPE, x.getValue().toString());
-    }
-
-    @Override
-    public void endVisit(NullValueCommand x, Context ctx) {
-      appendTypedData(VOID_TYPE, "");
-    }
-
-    @Override
-    public void endVisit(ShortValueCommand x, Context ctx) {
-      appendTypedData(SHORT_TYPE, x.getValue().toString());
-    }
-
-    @Override
-    public void endVisit(StringValueCommand x, Context ctx) {
-      // "4~abcd
-      if (appendIdentity(x)) {
-        String value = x.getValue();
-        /*
-         * Emit this a a Pascal-style string, using an explicit length. This
-         * avoids the need to escape the value.
-         */
-        appendTypedData(STRING_TYPE, String.valueOf(value.length()));
-        append(value);
-      }
-    }
-
-    @Override
-    public boolean visit(ArrayValueCommand x, Context ctx) {
-      /*
-       * Encoded as (leafType, dimensions, length, .... )
-       * 
-       * Object[] foo = new Object[3];
-       * 
-       * becomes
-       * 
-       * [ObjectSeedname~1~3~@....~@....~@...~
-       * 
-       * Object[][] foo = new Object[3][];
-       * 
-       * becomes
-       * 
-       * [ObjectSeedName~2~3~...three one-dim arrays...
-       */
-      if (appendIdentity(x)) {
-        int dims = 1;
-        Class<?> leaf = x.getComponentType();
-        while (leaf.getComponentType() != null) {
-          dims++;
-          leaf = leaf.getComponentType();
-        }
-
-        appendTypedData(ARRAY_TYPE, leaf.getName());
-        accept(new IntValueCommand(dims));
-        accept(new IntValueCommand(x.getComponentValues().size()));
-        return true;
-      } else {
-        return false;
-      }
-    }
-
-    @Override
-    public boolean visit(InstantiateCommand x, Context ctx) {
-      // @TypeSeedName~3~... N-many setters ...
-      if (appendIdentity(x)) {
-        appendTypedData(OBJECT_TYPE, x.getTargetClass().getName());
-        accept(new IntValueCommand(x.getSetters().size()));
-        return true;
-      } else {
-        return false;
-      }
-    }
-
-    @Override
-    public boolean visit(InvokeCustomFieldSerializerCommand x, Context ctx) {
-      // !TypeSeedName~Number of objects written by CFS~...CFS objects...~
-      // Number of extra fields~...N-many setters...
-      if (appendIdentity(x)) {
-        appendTypedData(INVOKE_TYPE, x.getTargetClass().getName());
-        accept(new IntValueCommand(x.getValues().size()));
-        accept(x.getValues());
-        accept(new IntValueCommand(x.getSetters().size()));
-        accept(x.getSetters());
-        return false;
-      } else {
-        return false;
-      }
-    }
-
-    @Override
-    public boolean visit(ReturnCommand x, Context ctx) {
-      // R4~...values...
-      appendTypedData(RETURN_TYPE, String.valueOf(x.getValues().size()));
-      return true;
-    }
-
-    @Override
-    public boolean visit(SetCommand x, Context ctx) {
-      /*
-       * In Development Mode, the field's declaring class is written to the
-       * stream to handle field shadowing. In Production Mode, this isn't
-       * necessary because all field names are allocated in the same "object"
-       * scope.
-       *
-       * DeclaringClassName~FieldName~...value...
-       */
-      if (!GWT.isScript()) {
-        accept(new StringValueCommand(x.getFieldDeclClass().getName()));
-      }
-      accept(new StringValueCommand(x.getField()));
-      return true;
-    }
-
-    @Override
-    public boolean visit(ThrowCommand x, Context ctx) {
-      // T...value...
-      appendTypedData(THROW_TYPE, "");
-      return true;
-    }
-
-    private void append(String x) {
-      try {
-        buffer.append(EscapeUtil.escape(x)).append(RPC_SEPARATOR_CHAR);
-      } catch (IOException e) {
-        halt(e);
-      }
-    }
-
-    private boolean appendIdentity(ValueCommand x) {
-      Integer backRef = backRefs.get(x);
-      if (backRef != null) {
-        if (PRETTY) {
-          try {
-            buffer.append(NL_CHAR);
-          } catch (IOException e) {
-            halt(e);
-          }
-        }
-        append(BACKREF_TYPE + String.valueOf(backRef));
-        return false;
-      } else {
-        backRefs.put(x, backRefs.size());
-        return true;
-      }
-    }
-
-    private void appendTypedData(char type, String value) {
-      try {
-        if (PRETTY) {
-          buffer.append(NL_CHAR);
-        }
-        buffer.append(type).append(value).append(RPC_SEPARATOR_CHAR);
-      } catch (IOException e) {
-        halt(e);
-      }
-    }
-  }
-
-  /**
-   * Used for diagnostics.
-   */
-  static final boolean PRETTY = false;
-
-  public static final char ARRAY_TYPE = '[';
-  public static final char BACKREF_TYPE = '@';
-  public static final char BOOLEAN_TYPE = 'Z';
-  public static final char BYTE_TYPE = 'B';
-  public static final char CHAR_TYPE = 'C';
-  public static final char DOUBLE_TYPE = 'D';
-  public static final char ENUM_TYPE = 'E';
-  public static final char FLOAT_TYPE = 'F';
-  public static final char INT_TYPE = 'I';
-  public static final char INVOKE_TYPE = '!';
-  public static final char LONG_TYPE = 'J';
-  public static final char NL_CHAR = '\n';
-  public static final char OBJECT_TYPE = 'L';
-  public static final char RETURN_TYPE = 'R';
-  public static final char RPC_SEPARATOR_CHAR = '~';
-  public static final char SHORT_TYPE = 'S';
-  public static final char STRING_TYPE = '"';
-  public static final char THROW_TYPE = 'T';
-  public static final char VOID_TYPE = 'V';
-
-  private final Map<ValueCommand, Integer> backRefs = new HashMap<ValueCommand, Integer>();
-
-  private final Appendable buffer;
-
-  public SimplePayloadSink(Appendable buffer) {
-    this.buffer = buffer;
-  }
-
-  @Override
-  public void accept(RpcCommand command) throws SerializationException {
-    (new Visitor()).accept(command);
-  }
-
-  @Override
-  public void finish() throws SerializationException {
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/client/impl/TypeOverrides.java b/user/src/com/google/gwt/rpc/client/impl/TypeOverrides.java
deleted file mode 100644
index 02040c0..0000000
--- a/user/src/com/google/gwt/rpc/client/impl/TypeOverrides.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.impl;
-
-import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.user.client.rpc.SerializationStreamWriter;
-
-/**
- * Contains serialization dispatch information for types that don't support
- * simple serialization.
- */
-public final class TypeOverrides extends JavaScriptObject {
-  /**
-   * An individual entry, which is a wrapper around the CFS's serialize method.
-   */
-  public static final class SerializeFunction extends JavaScriptObject {
-    protected SerializeFunction() {
-    }
-
-    public native void serialize(SerializationStreamWriter writer,
-        Object instance) /*-{
-      this(writer, instance);
-    }-*/;
-  }
-
-  public static TypeOverrides create() {
-    return JavaScriptObject.createObject().cast();
-  }
-
-  protected TypeOverrides() {
-  }
-
-  public native String[] getExtraFields(String className) /*-{
-    return this['B' + className];
-  }-*/;
-
-  public native SerializeFunction getOverride(String className) /*-{
-    return this['A' + className];
-  }-*/;
-
-  public native boolean hasExtraFields(String className) /*-{
-    return !!this['B' + className];
-  }-*/;
-
-  public native void set(String className, SerializeFunction override) /*-{
-    this['A' + className] = override;
-  }-*/;
-
-  public void set(String className, SerializeFunction override,
-      String[] extraFields) {
-    set(className, override);
-    set(className, extraFields);
-  }
-
-  public native void set(String className, String[] extraFields) /*-{
-    this['B' + className] = extraFields;
-  }-*/;
-}
diff --git a/user/src/com/google/gwt/rpc/client/package-info.java b/user/src/com/google/gwt/rpc/client/package-info.java
deleted file mode 100644
index 7552a18..0000000
--- a/user/src/com/google/gwt/rpc/client/package-info.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-/**
- * Contains the client-side APIs for deRPC.
- */
-@com.google.gwt.util.PreventSpuriousRebuilds
-package com.google.gwt.rpc.client;
diff --git a/user/src/com/google/gwt/rpc/linker/CastableTypeDataImpl.java b/user/src/com/google/gwt/rpc/linker/CastableTypeDataImpl.java
deleted file mode 100644
index 58207fb..0000000
--- a/user/src/com/google/gwt/rpc/linker/CastableTypeDataImpl.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.google.gwt.rpc.linker;
-
-import com.google.gwt.rpc.server.CastableTypeData;
-
-/**
- * Implementation of a wrapped castableTypeMap.
- */
-public class CastableTypeDataImpl implements CastableTypeData {
-  
-  private final String castableTypeMapJs;
-  
-  public CastableTypeDataImpl(String castableTypeMapJs) {
-    this.castableTypeMapJs = castableTypeMapJs;
-  }
-
-  public String toJs() {
-    return castableTypeMapJs;
-  }
-
-}
diff --git a/user/src/com/google/gwt/rpc/linker/ClientOracleLinker.java b/user/src/com/google/gwt/rpc/linker/ClientOracleLinker.java
deleted file mode 100644
index 4d1d1a2..0000000
--- a/user/src/com/google/gwt/rpc/linker/ClientOracleLinker.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.linker;
-
-import com.google.gwt.core.ext.LinkerContext;
-import com.google.gwt.core.ext.TreeLogger;
-import com.google.gwt.core.ext.UnableToCompleteException;
-import com.google.gwt.core.ext.linker.AbstractLinker;
-import com.google.gwt.core.ext.linker.ArtifactSet;
-import com.google.gwt.core.ext.linker.CompilationResult;
-import com.google.gwt.core.ext.linker.LinkerOrder;
-import com.google.gwt.core.ext.linker.LinkerOrder.Order;
-import com.google.gwt.core.ext.linker.Shardable;
-import com.google.gwt.core.ext.linker.SymbolData;
-import com.google.gwt.core.ext.linker.SyntheticArtifact;
-import com.google.gwt.rpc.server.WebModeClientOracle.Builder;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Exports data required by server components for directly-evalable RPC.
- */
-@LinkerOrder(Order.PRE)
-@Shardable
-public class ClientOracleLinker extends AbstractLinker {
-
-  private static final String SUFFIX = ".gwt.rpc";
-
-  @Override
-  public String getDescription() {
-    return "deRPC linker";
-  }
-
-  @Override
-  public ArtifactSet link(TreeLogger logger, LinkerContext context,
-      ArtifactSet artifacts, boolean onePermutation)
-      throws UnableToCompleteException {
-    if (onePermutation) {
-      artifacts = new ArtifactSet(artifacts);
-
-      Map<String, List<String>> allSerializableFields = new HashMap<String, List<String>>();
-
-      for (RpcDataArtifact data : artifacts.find(RpcDataArtifact.class)) {
-        allSerializableFields.putAll(data.getOperableFields());
-      }
-
-      for (CompilationResult result : artifacts.find(CompilationResult.class)) {
-        Builder builder = new Builder();
-
-        for (Map.Entry<String, List<String>> entry : allSerializableFields.entrySet()) {
-          builder.setSerializableFields(entry.getKey(), entry.getValue());
-        }
-
-        for (SymbolData symbolData : result.getSymbolMap()) {
-
-          String castableTypeMapString =
-              (symbolData.getCastableTypeMap() == null) ? null :
-                symbolData.getCastableTypeMap().toJs();
-
-          builder.add(symbolData.getSymbolName(), symbolData.getJsniIdent(),
-              symbolData.getClassName(), symbolData.getMemberName(),
-              symbolData.getRuntimeTypeId(),
-              new CastableTypeDataImpl(castableTypeMapString));
-        }
-
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        try {
-          builder.getOracle().store(out);
-        } catch (IOException e) {
-          // Should generally not happen
-          logger.log(TreeLogger.ERROR, "Unable to store deRPC data", e);
-          throw new UnableToCompleteException();
-        }
-
-        SyntheticArtifact a = emitBytes(logger, out.toByteArray(),
-            result.getStrongName() + SUFFIX);
-        artifacts.add(a);
-      }
-    }
-    return artifacts;
-  }
-
-}
diff --git a/user/src/com/google/gwt/rpc/linker/RpcDataArtifact.java b/user/src/com/google/gwt/rpc/linker/RpcDataArtifact.java
deleted file mode 100644
index b3087c7..0000000
--- a/user/src/com/google/gwt/rpc/linker/RpcDataArtifact.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.linker;
-
-import com.google.gwt.core.ext.linker.Artifact;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * This artifact allows the RpcProxyCreator class to communicate with the
- * ClientOracleLinker.
- */
-public class RpcDataArtifact extends Artifact<RpcDataArtifact> {
-
-  private final String rpcServiceName;
-  private final Map<String, List<String>> fieldsByClassName = new HashMap<String, List<String>>();
-
-  public RpcDataArtifact(String rpcServiceName) {
-    super(ClientOracleLinker.class);
-    this.rpcServiceName = rpcServiceName;
-  }
-
-  public Map<String, List<String>> getOperableFields() {
-    return fieldsByClassName;
-  }
-
-  @Override
-  public int hashCode() {
-    return rpcServiceName.hashCode();
-  }
-
-  public void setFields(String className, List<String> fields) {
-    fieldsByClassName.put(className, fields);
-  }
-
-  @Override
-  protected int compareToComparableArtifact(RpcDataArtifact o) {
-    return rpcServiceName.compareTo(o.rpcServiceName);
-  }
-
-  @Override
-  protected Class<RpcDataArtifact> getComparableArtifactType() {
-    return RpcDataArtifact.class;
-  }
-
-}
diff --git a/user/src/com/google/gwt/rpc/linker/package-info.java b/user/src/com/google/gwt/rpc/linker/package-info.java
deleted file mode 100644
index c83eb8b..0000000
--- a/user/src/com/google/gwt/rpc/linker/package-info.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-/**
- * Classes used to implement RPC.
- */
-@com.google.gwt.util.PreventSpuriousRebuilds
-package com.google.gwt.rpc.linker;
diff --git a/user/src/com/google/gwt/rpc/rebind/RpcProxyCreator.java b/user/src/com/google/gwt/rpc/rebind/RpcProxyCreator.java
deleted file mode 100644
index fe45275..0000000
--- a/user/src/com/google/gwt/rpc/rebind/RpcProxyCreator.java
+++ /dev/null
@@ -1,443 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.rebind;
-
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.core.client.impl.ArtificialRescue;
-import com.google.gwt.core.client.impl.ArtificialRescue.Rescue;
-import com.google.gwt.core.client.impl.Impl;
-import com.google.gwt.core.ext.GeneratorContext;
-import com.google.gwt.core.ext.TreeLogger;
-import com.google.gwt.core.ext.UnableToCompleteException;
-import com.google.gwt.core.ext.typeinfo.JArrayType;
-import com.google.gwt.core.ext.typeinfo.JClassType;
-import com.google.gwt.core.ext.typeinfo.JEnumType;
-import com.google.gwt.core.ext.typeinfo.JField;
-import com.google.gwt.core.ext.typeinfo.JMethod;
-import com.google.gwt.core.ext.typeinfo.JPrimitiveType;
-import com.google.gwt.core.ext.typeinfo.JType;
-import com.google.gwt.core.ext.typeinfo.TypeOracle;
-import com.google.gwt.dev.util.collect.Lists;
-import com.google.gwt.rpc.client.impl.CommandToStringWriter;
-import com.google.gwt.rpc.client.impl.RpcServiceProxy;
-import com.google.gwt.rpc.client.impl.TypeOverrides;
-import com.google.gwt.rpc.linker.RpcDataArtifact;
-import com.google.gwt.user.client.rpc.SerializationStreamWriter;
-import com.google.gwt.user.client.rpc.impl.RemoteServiceProxy;
-import com.google.gwt.user.linker.rpc.RpcLogArtifact;
-import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
-import com.google.gwt.user.rebind.SourceWriter;
-import com.google.gwt.user.rebind.rpc.CustomFieldSerializerValidator;
-import com.google.gwt.user.rebind.rpc.ProxyCreator;
-import com.google.gwt.user.rebind.rpc.SerializableTypeOracle;
-import com.google.gwt.user.rebind.rpc.SerializableTypeOracleBuilder;
-import com.google.gwt.user.rebind.rpc.SerializationUtils;
-
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Generates async proxy implementations using the RPC system.
- */
-public class RpcProxyCreator extends ProxyCreator {
-  private String typeOverrideName;
-
-  public RpcProxyCreator(JClassType type) {
-    super(type);
-  }
-
-  @Override
-  protected String computeTypeNameExpression(JType paramType) {
-    if (paramType.isClass() != null) {
-      return "GWT.isScript() ? Impl.getNameOf(\"@"
-          + paramType.getQualifiedSourceName() + "\") : \""
-          + SerializationUtils.getRpcTypeName(paramType) + "\"";
-    } else {
-      /*
-       * Consider the case of service methods that have interface parameters;
-       * these types don't necessarily exist in the client code, so we want to
-       * encode these type names in a way that can always be distinguished from
-       * obfuscated type names.
-       */
-      return "\" " + SerializationUtils.getRpcTypeName(paramType)
-          + "\"";
-    }
-  }
-
-  @Override
-  protected void generateProxyContructor(SourceWriter srcWriter) {
-    srcWriter.println("public " + getProxySimpleName() + "() {");
-    srcWriter.indent();
-    srcWriter.println("super(GWT.getModuleBaseURL(),");
-    srcWriter.indent();
-    srcWriter.println(getRemoteServiceRelativePath() + ",");
-    srcWriter.println("OVERRIDES);");
-    srcWriter.outdent();
-    srcWriter.outdent();
-    srcWriter.println("}");
-  }
-
-  /**
-   * Generate any fields required by the proxy.
-   */
-  @Override
-  protected void generateProxyFields(SourceWriter srcWriter,
-      SerializableTypeOracle serializableTypeOracle,
-      String serializationPolicyStrongName, String remoteServiceInterfaceName) {
-    // Initialize a field with binary name of the remote service interface
-    srcWriter.println("private static final String REMOTE_SERVICE_INTERFACE_NAME = "
-        + "\"" + remoteServiceInterfaceName + "\";");
-    srcWriter.println("private static final " + TypeOverrides.class.getName()
-        + " OVERRIDES = GWT.isScript() ? " + typeOverrideName
-        + ".create() : null;");
-    srcWriter.println();
-  }
-
-  @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)
-      throws UnableToCompleteException {
-    String simpleName = serviceIntf.getSimpleSourceName()
-        + "_TypeOverridesFactory";
-    PrintWriter out = ctx.tryCreate(logger, serviceIntf.getPackage().getName(),
-        simpleName);
-    if (out == null) {
-      return;
-    }
-
-    TypeOracle typeOracle = ctx.getTypeOracle();
-    JClassType objectType = typeOracle.getJavaLangObject();
-    Set<JType> classLiterals = new LinkedHashSet<JType>();
-    Map<JType, JMethod> serializerMethods = new LinkedHashMap<JType, JMethod>();
-    Map<JType, List<String>> fields = new LinkedHashMap<JType, List<String>>();
-
-    StringBuilder sb = writeArtificialRescues(typeOracle, serializationSto,
-        deserializationSto);
-
-    ClassSourceFileComposerFactory composerFactory = new ClassSourceFileComposerFactory(
-        serviceIntf.getPackage().getName(), simpleName);
-    composerFactory.addImport(ArtificialRescue.class.getCanonicalName());
-    composerFactory.addImport(GWT.class.getCanonicalName());
-    composerFactory.addImport(Impl.class.getCanonicalName());
-    composerFactory.addImport(Rescue.class.getCanonicalName());
-    composerFactory.addImport(TypeOverrides.class.getCanonicalName());
-    composerFactory.addImport(TypeOverrides.SerializeFunction.class.getCanonicalName());
-
-    composerFactory.addAnnotationDeclaration(sb.toString());
-    SourceWriter sw = composerFactory.createSourceWriter(ctx, out);
-
-    sw.println("public static TypeOverrides create() {");
-    sw.indent();
-    sw.println("TypeOverrides toReturn = TypeOverrides.create();");
-    for (JType type : serializationSto.getSerializableTypes()) {
-      JClassType classType = type.isClass();
-      if (classType == null) {
-        continue;
-      }
-
-      /*
-       * Figure out which fields should be serialized and if there's a CFS. This
-       * is done by crawling the supertype chain until we hit Object or a type
-       * with a CFS.
-       */
-      boolean allFieldsAreSerializable = true;
-      List<String> fieldRefs = new ArrayList<String>();
-      JMethod serializerMethod = null;
-      do {
-        JClassType customSerializer = SerializableTypeOracleBuilder.findCustomFieldSerializer(
-            typeOracle, classType);
-        serializerMethod = customSerializer == null ? null
-            : CustomFieldSerializerValidator.getSerializationMethod(
-                customSerializer, type.isClass());
-
-        if (serializerMethod != null) {
-          // Don't include any fields in the type
-          break;
-        }
-
-        JField[] serializableFields = SerializationUtils.getSerializableFields(
-            typeOracle, classType);
-        allFieldsAreSerializable &= serializableFields.length == classType.getFields().length;
-        for (JField field : serializableFields) {
-          fieldRefs.add("@" + field.getEnclosingType().getQualifiedSourceName()
-              + "::" + field.getName());
-        }
-        classType = classType.getSuperclass();
-      } while (classType != objectType);
-
-      if (allFieldsAreSerializable && serializerMethod == null) {
-        // We can just inspect the object at runtime; best for code size
-        continue;
-      }
-
-      if (serializerMethod != null || !fieldRefs.isEmpty()) {
-        classLiterals.add(type);
-
-        /*
-         * toReturn.set(class_foo_Bar().getName(), serializer_foo_Bar(),
-         * fields_foo_Bar());
-         */
-        String mangledTypeName = type.getQualifiedSourceName().replace('.', '_');
-        sw.println("toReturn.set(class_" + mangledTypeName + "().getName()");
-        if (serializerMethod == null) {
-        } else {
-          serializerMethods.put(type, serializerMethod);
-          sw.indentln(",serializer_" + mangledTypeName + "()");
-        }
-        if (fieldRefs.isEmpty()) {
-          sw.indentln(");");
-        } else {
-          fields.put(type, fieldRefs);
-          sw.indentln(",fields_" + mangledTypeName + "());");
-        }
-      }
-    }
-
-    sw.println("return toReturn;");
-    sw.outdent();
-    sw.println("}");
-
-    for (JType classLiteral : classLiterals) {
-      sw.println("public static native Class class_"
-          + classLiteral.getQualifiedSourceName().replace('.', '_') + "() /*-{");
-      sw.indentln("return @" + classLiteral.getQualifiedSourceName()
-          + "::class;");
-      sw.println("}-*/;");
-      sw.println();
-    }
-
-    for (Map.Entry<JType, JMethod> entry : serializerMethods.entrySet()) {
-      sw.println("public static native "
-          + TypeOverrides.SerializeFunction.class.getSimpleName()
-          + " serializer_"
-          + entry.getKey().getQualifiedSourceName().replace('.', '_')
-          + "() /*-{");
-      sw.indentln("return " + entry.getValue().getJsniSignature() + ";");
-      sw.println("}-*/;");
-      sw.println();
-    }
-
-    for (Map.Entry<JType, List<String>> entry : fields.entrySet()) {
-      sw.println("public static String[] fields_"
-          + entry.getKey().getQualifiedSourceName().replace('.', '_') + "() {");
-      sw.print("return new String[] {");
-      for (String fieldRef : entry.getValue()) {
-        sw.print("Impl.getNameOf(\"" + fieldRef + "\"),");
-      }
-      sw.println("};");
-      sw.println("}");
-      sw.println();
-    }
-
-    sw.commit(logger);
-
-    typeOverrideName = composerFactory.getCreatedClassName();
-  }
-
-  @Override
-  protected Class<? extends RemoteServiceProxy> getProxySupertype() {
-    return RpcServiceProxy.class;
-  }
-
-  @Override
-  protected Class<? extends SerializationStreamWriter> getStreamWriterClass() {
-    return CommandToStringWriter.class;
-  }
-
-  @Override
-  protected String writeSerializationPolicyFile(TreeLogger logger,
-      GeneratorContext ctx, SerializableTypeOracle serializationSto,
-      SerializableTypeOracle deserializationSto)
-      throws UnableToCompleteException {
-
-    RpcDataArtifact data = new RpcDataArtifact(
-        serviceIntf.getQualifiedSourceName());
-
-    for (JType type : deserializationSto.getSerializableTypes()) {
-      if (!(type instanceof JClassType)) {
-        continue;
-      }
-
-      JField[] serializableFields = SerializationUtils.getSerializableFields(
-          ctx.getTypeOracle(), (JClassType) type);
-
-      List<String> names = Lists.create();
-      for (int i = 0, j = serializableFields.length; i < j; i++) {
-        names = Lists.add(names, serializableFields[i].getName());
-      }
-
-      data.setFields(SerializationUtils.getRpcTypeName(type), names);
-    }
-
-    ctx.commitArtifact(logger, data);
-
-    return RpcLogArtifact.UNSPECIFIED_STRONGNAME;
-  }
-
-  private StringBuilder writeArtificialRescues(TypeOracle typeOracle,
-      SerializableTypeOracle serializationSto,
-      SerializableTypeOracle deserializationSto) {
-    Set<JType> serializableTypes = new LinkedHashSet<JType>();
-    Collections.addAll(serializableTypes,
-        serializationSto.getSerializableTypes());
-    Collections.addAll(serializableTypes,
-        deserializationSto.getSerializableTypes());
-    for (JMethod m : serviceIntf.getOverridableMethods()) {
-      // Pick up any primitive return types, which get sent boxed
-      JPrimitiveType mustBox = m.getReturnType().isPrimitive();
-      if (mustBox != null) {
-        serializableTypes.add(m.getReturnType());
-      }
-    }
-
-    StringBuilder sb = new StringBuilder("@ArtificialRescue({");
-    for (JType serializableType : serializableTypes) {
-
-      JArrayType serializableArray = serializableType.isArray();
-      JClassType serializableClass = serializableType.isClass();
-      JPrimitiveType serializablePrimitive = serializableType.isPrimitive();
-      if (serializableArray != null) {
-        sb.append("\n@Rescue(className = \"");
-        sb.append(serializableArray.getQualifiedSourceName());
-        sb.append("\",\n instantiable = true),");
-      } else if (serializableClass != null) {
-        writeSingleRescue(typeOracle, deserializationSto, sb, serializableClass);
-      } else if (serializablePrimitive != null) {
-        JClassType boxedClass = typeOracle.findType(serializablePrimitive.getQualifiedBoxedSourceName());
-        assert boxedClass != null : "No boxed version of "
-            + serializablePrimitive.getQualifiedSourceName();
-        writeSingleRescue(typeOracle, deserializationSto, sb, boxedClass);
-      }
-    }
-    sb.append("})");
-    return sb;
-  }
-
-  /**
-   * Writes the rescue of a serializable type and its custom serialization
-   * logic.
-   */
-  private void writeSingleRescue(TypeOracle typeOracle,
-      SerializableTypeOracle deserializationOracle, StringBuilder sb,
-      JClassType serializableClass) {
-    boolean shouldDeserialize = deserializationOracle.isSerializable(serializableClass);
-
-    // Pull the two custom serialization methods
-    JClassType customSerializer;
-    JMethod deserialize = null;
-    JMethod instantiate = null;
-
-    // An automatically-serializable subclass of a manually serialized class
-    boolean hybridSerialization = false;
-
-    {
-      JClassType search = serializableClass;
-      do {
-        customSerializer = SerializableTypeOracleBuilder.findCustomFieldSerializer(
-            typeOracle, search);
-
-        if (customSerializer != null) {
-          instantiate = CustomFieldSerializerValidator.getInstantiationMethod(
-              customSerializer, search);
-
-          deserialize = CustomFieldSerializerValidator.getDeserializationMethod(
-              customSerializer, search);
-
-          hybridSerialization = search != serializableClass;
-          break;
-        }
-
-        search = search.getSuperclass();
-      } while (search != null);
-    }
-
-    // The fields that should be preserved from being pruned
-    JField[] serializableFields;
-    JEnumType enumType = serializableClass.isEnum();
-    if (enumType != null) {
-      serializableFields = enumType.getFields();
-    } else {
-      serializableFields = SerializationUtils.getSerializableFields(typeOracle,
-          serializableClass);
-    }
-
-    /*
-     * We need to rescue the constructor if there is no instantiate method and
-     * there is a custom deserialize method.
-     */
-    boolean rescueConstructor = instantiate == null && deserialize != null;
-
-    /*
-     * There may be either no custom serializer or a custom serializer that
-     * doesn't define the instantiate method.
-     */
-    if (shouldDeserialize || rescueConstructor
-        || (customSerializer == null && serializableFields.length > 0)) {
-
-      /*
-       * @Rescue(className="package.Foo$Inner", instantiable=true, fields={..},
-       * methods={..}),
-       */
-      sb.append("\n@Rescue(className = \"").append(
-          serializableClass.getQualifiedSourceName()).append("\"");
-
-      sb.append(",\n instantiable = ").append(shouldDeserialize);
-      sb.append(",\n fields = {");
-      if (customSerializer == null || hybridSerialization) {
-        for (JField field : serializableFields) {
-          sb.append("\"").append(field.getName()).append("\",");
-        }
-      }
-      sb.append("},\n methods = {");
-      if (rescueConstructor) {
-        sb.append("\"").append(serializableClass.getName().replace('.', '$')).append(
-            "()\"");
-      }
-      sb.append("}),");
-    }
-
-    // Rescue the custom serialization logic if any exists
-    if (customSerializer != null) {
-      sb.append("\n@Rescue(className = \"").append(
-          customSerializer.getQualifiedSourceName()).append("\",\n methods = {");
-      if (instantiate != null) {
-        String jsniSignature = instantiate.getJsniSignature();
-        sb.append("\"").append(
-            jsniSignature.substring(jsniSignature.lastIndexOf(':') + 1)).append(
-            "\",");
-      }
-      if (deserialize != null) {
-        String jsniSignature = deserialize.getJsniSignature();
-        sb.append("\"").append(
-            jsniSignature.substring(jsniSignature.lastIndexOf(':') + 1)).append(
-            "\",");
-      }
-      sb.append("}),");
-    }
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/rebind/RpcServiceGenerator.java b/user/src/com/google/gwt/rpc/rebind/RpcServiceGenerator.java
deleted file mode 100644
index 65ef8cd..0000000
--- a/user/src/com/google/gwt/rpc/rebind/RpcServiceGenerator.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.rebind;
-
-import com.google.gwt.core.ext.typeinfo.JClassType;
-import com.google.gwt.user.rebind.rpc.ProxyCreator;
-import com.google.gwt.user.rebind.rpc.ServiceInterfaceProxyGenerator;
-
-/**
- * Generator for RPC service interfaces.
- */
-public class RpcServiceGenerator extends
-    ServiceInterfaceProxyGenerator {
-
-  @Override
-  protected ProxyCreator createProxyCreator(JClassType remoteService) {
-    return new RpcProxyCreator(remoteService);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/server/CastableTypeData.java b/user/src/com/google/gwt/rpc/server/CastableTypeData.java
deleted file mode 100644
index c2c2e63..0000000
--- a/user/src/com/google/gwt/rpc/server/CastableTypeData.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.google.gwt.rpc.server;
-
-import java.io.Serializable;
-
-/**
- * An encapsulation of a JSON object containing castable type information.
- */
-public interface CastableTypeData extends Serializable {
-  
-    /**
-     * Returns an eval-able JSON object.
-     */
-    String toJs();
-}
diff --git a/user/src/com/google/gwt/rpc/server/ClientOracle.java b/user/src/com/google/gwt/rpc/server/ClientOracle.java
deleted file mode 100644
index 54bf02e..0000000
--- a/user/src/com/google/gwt/rpc/server/ClientOracle.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.server;
-
-import com.google.gwt.rpc.client.ast.CommandSink;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.lang.reflect.Field;
-
-/**
- * Encapsulates information about a remote client. This type is not intended to
- * be implemented by end-users although the behavior of a concrete
- * implementation may be modified via the {@link DelegatingClientOracle} type.
- */
-public abstract class ClientOracle {
-
-  /**
-   * Not a generally-extensible class.
-   */
-  ClientOracle() {
-  }
-
-  /**
-   * Create a CommandSink that can encode a payload for the client.
-   *
-   * @param out the OutputStream to which the output will be written
-   * @return a CommandSink
-   * @throws IOException if the CommandSink cannot write to the OutputStream
-   */
-  public abstract CommandSink createCommandSink(OutputStream out)
-      throws IOException;
-
-  /**
-   * Returns an identifier that does not conflict with any symbols defined in
-   * the client. This method does not accumulate any state.
-   */
-  public abstract String createUnusedIdent(String ident);
-
-  /**
-   * Returns the Json castableType data for a given type.
-   */
-  public abstract CastableTypeData getCastableTypeData(Class<?> clazz);
-
-  /**
-   * Given a base type and the unobfuscated field name, find the obfuscated name
-   * for the field in the client. This will search superclasses as well for the
-   * first matching field.
-   */
-  public abstract String getFieldId(Class<?> clazz, String fieldName);
-
-  /**
-   * Return the field name for a given enum value.
-   */
-  public abstract String getFieldId(Enum<?> value);
-
-  /**
-   * This is similar to {@link #getFieldId(Class, String)} but does not search
-   * supertypes. It is intended to be used to access "magic" GWT types.
-   */
-  public abstract String getFieldId(String className, String fieldName);
-
-  /**
-   * Return the name of a field from a client-side id. This will search
-   * superclasses for the first instance of the named field.
-   *
-   * @return The field's declaring class and the name of the field
-   */
-  public abstract Pair<Class<?>, String> getFieldName(Class<?> clazz,
-      String fieldId);
-
-  /**
-   * Returns the name of the top-level function which implements the named
-   * method that takes the exact arguments specified. This will search in the
-   * given class as well as its supertypes.
-   */
-  public abstract String getMethodId(Class<?> clazz, String methodName,
-      Class<?>... args);
-
-  /**
-   * This is similar to {@link #getMethodId(Class, String, Class...)} but does
-   * not search supertypes. It is intended to be used to access "magic" GWT
-   * types.
-   */
-  public abstract String getMethodId(String className, String methodName,
-      String... jsniArgTypes);
-
-  /**
-   * Returns the fields of a given class that should be serialized. This method
-   * does not crawl supertypes.
-   */
-  public abstract Field[] getOperableFields(Class<?> clazz);
-
-  /**
-   * Returns the assigned castability runtimeTypeId of a given type.
-   */
-  public abstract String getRuntimeTypeId(Class<?> clazz);
-
-  /**
-   * Returns the name of the top-level function that is used as the seed
-   * function for a given type.
-   */
-  public abstract String getJsSymbolName(Class<?> clazz);
-
-  /**
-   * Returns the deobfuscated name of a type based on the name of the type's
-   * seed function.
-   */
-  public abstract String getTypeName(String seedName);
-
-  /**
-   * Indicates whether or not the remote client is running as compiled script.
-   * This may be used to optimize the payload based on assumptions that can be
-   * mode about web-mode or hosted-mode clients.
-   */
-  public abstract boolean isScript();
-}
diff --git a/user/src/com/google/gwt/rpc/server/CommandSerializationUtil.java b/user/src/com/google/gwt/rpc/server/CommandSerializationUtil.java
deleted file mode 100644
index e395272..0000000
--- a/user/src/com/google/gwt/rpc/server/CommandSerializationUtil.java
+++ /dev/null
@@ -1,491 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.server;
-
-import com.google.gwt.rpc.client.ast.BooleanValueCommand;
-import com.google.gwt.rpc.client.ast.ByteValueCommand;
-import com.google.gwt.rpc.client.ast.CharValueCommand;
-import com.google.gwt.rpc.client.ast.DoubleValueCommand;
-import com.google.gwt.rpc.client.ast.FloatValueCommand;
-import com.google.gwt.rpc.client.ast.IntValueCommand;
-import com.google.gwt.rpc.client.ast.LongValueCommand;
-import com.google.gwt.rpc.client.ast.ShortValueCommand;
-import com.google.gwt.rpc.client.ast.StringValueCommand;
-import com.google.gwt.rpc.client.ast.ValueCommand;
-import com.google.gwt.user.client.rpc.SerializationException;
-import com.google.gwt.user.client.rpc.SerializationStreamReader;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.Field;
-import java.util.IdentityHashMap;
-import java.util.Map;
-
-import sun.misc.Unsafe;
-
-/**
- * Contains common utility code.
- */
-public class CommandSerializationUtil {
-
-  /**
-   * Defines methods for getting and setting fields.
-   */
-  public interface Accessor {
-    boolean canMakeValueCommand();
-
-    /**
-     * Indicates if set can be called with a value of the given type.
-     */
-    boolean canSet(Class<?> clazz);
-
-    Object get(Object instance, Field f);
-
-    Class<?> getTargetType();
-
-    ValueCommand makeValueCommand(Object value);
-
-    Object readNext(SerializationStreamReader reader)
-        throws SerializationException;
-
-    void set(Object instance, Field f, Object value);
-
-    void set(Object array, int index, Object value);
-  }
-
-  /**
-   * Defines type-specific methods of getting and setting fields.
-   */
-  private static enum TypeAccessor implements Accessor {
-    BOOL {
-      @Override
-      public boolean canSet(Class<?> clazz) {
-        return Boolean.class.isAssignableFrom(clazz)
-            || Number.class.isAssignableFrom(clazz)
-            || String.class.isAssignableFrom(clazz);
-      }
-
-      @Override
-      public Object get(Object instance, long offset) {
-        return theUnsafe.getBoolean(instance, offset);
-      }
-
-      @Override
-      public Object getDefaultValue() {
-        return false;
-      }
-
-      @Override
-      public Class<?> getTargetType() {
-        return boolean.class;
-      }
-
-      @Override
-      public ValueCommand makeValueCommand(Object value) {
-        return new BooleanValueCommand((Boolean) value);
-      }
-
-      @Override
-      public Object readNext(SerializationStreamReader reader)
-          throws SerializationException {
-        return reader.readBoolean();
-      }
-
-      @Override
-      public void set(Object instance, long offset, Object value) {
-        theUnsafe.putBoolean(instance, offset, toBoolean(value));
-      }
-
-      private boolean toBoolean(Object value) {
-        if (value instanceof Number) {
-          return ((Number) value).intValue() != 0;
-        } else if (value instanceof String) {
-          return Boolean.valueOf((String) value);
-        } else {
-          // returns false if the value is null.
-          return Boolean.TRUE.equals(value);
-        }
-      }
-
-    },
-    BYTE {
-      @Override
-      public Object get(Object instance, long offset) {
-        return theUnsafe.getByte(instance, offset);
-      }
-
-      @Override
-      public Class<?> getTargetType() {
-        return byte.class;
-      }
-
-      @Override
-      public ValueCommand makeValueCommand(Object value) {
-        return new ByteValueCommand((Byte) value);
-      }
-
-      @Override
-      public Object readNext(SerializationStreamReader reader)
-          throws SerializationException {
-        return reader.readByte();
-      }
-
-      @Override
-      public void set(Object instance, long offset, Object value) {
-        theUnsafe.putByte(instance, offset, ((Number) value).byteValue());
-      }
-    },
-    CHAR {
-      @Override
-      public Object get(Object instance, long offset) {
-        return theUnsafe.getChar(instance, offset);
-      }
-
-      @Override
-      public Class<?> getTargetType() {
-        return char.class;
-      }
-
-      @Override
-      public ValueCommand makeValueCommand(Object value) {
-        return new CharValueCommand((Character) value);
-      }
-
-      @Override
-      public Object readNext(SerializationStreamReader reader)
-          throws SerializationException {
-        return reader.readChar();
-      }
-
-      @Override
-      public void set(Object instance, long offset, Object value) {
-        char c = (value instanceof Number) ? (char) ((Number) value).intValue()
-            : (Character) value;
-        theUnsafe.putChar(instance, offset, c);
-      }
-    },
-    DOUBLE {
-      @Override
-      public Object get(Object instance, long offset) {
-        return theUnsafe.getDouble(instance, offset);
-      }
-
-      @Override
-      public Class<?> getTargetType() {
-        return double.class;
-      }
-
-      @Override
-      public ValueCommand makeValueCommand(Object value) {
-        return new DoubleValueCommand((Double) value);
-      }
-
-      @Override
-      public Object readNext(SerializationStreamReader reader)
-          throws SerializationException {
-        return reader.readDouble();
-      }
-
-      @Override
-      public void set(Object instance, long offset, Object value) {
-        theUnsafe.putDouble(instance, offset, ((Number) value).doubleValue());
-      }
-    },
-    FLOAT {
-      @Override
-      public Object get(Object instance, long offset) {
-        return theUnsafe.getFloat(instance, offset);
-      }
-
-      @Override
-      public Class<?> getTargetType() {
-        return float.class;
-      }
-
-      @Override
-      public ValueCommand makeValueCommand(Object value) {
-        return new FloatValueCommand((Float) value);
-      }
-
-      @Override
-      public Object readNext(SerializationStreamReader reader)
-          throws SerializationException {
-        return reader.readFloat();
-      }
-
-      @Override
-      public void set(Object instance, long offset, Object value) {
-        theUnsafe.putFloat(instance, offset, ((Number) value).floatValue());
-      }
-    },
-    INT {
-      @Override
-      public Object get(Object instance, long offset) {
-        return theUnsafe.getInt(instance, offset);
-      }
-
-      @Override
-      public Class<?> getTargetType() {
-        return int.class;
-      }
-
-      @Override
-      public ValueCommand makeValueCommand(Object value) {
-        return new IntValueCommand(((Number) value).intValue());
-      }
-
-      @Override
-      public Object readNext(SerializationStreamReader reader)
-          throws SerializationException {
-        return reader.readInt();
-      }
-
-      @Override
-      public void set(Object instance, long offset, Object value) {
-        theUnsafe.putInt(instance, offset, ((Number) value).intValue());
-      }
-    },
-    LONG {
-      @Override
-      public Object get(Object instance, long offset) {
-        return theUnsafe.getLong(instance, offset);
-      }
-
-      @Override
-      public Class<?> getTargetType() {
-        return long.class;
-      }
-
-      @Override
-      public ValueCommand makeValueCommand(Object value) {
-        return new LongValueCommand((Long) value);
-      }
-
-      @Override
-      public Object readNext(SerializationStreamReader reader)
-          throws SerializationException {
-        return reader.readLong();
-      }
-
-      @Override
-      public void set(Object instance, long offset, Object value) {
-        theUnsafe.putLong(instance, offset, ((Number) value).longValue());
-      }
-    },
-    OBJECT {
-      @Override
-      public boolean canMakeValueCommand() {
-        return false;
-      }
-
-      @Override
-      public boolean canSet(Class<?> clazz) {
-        return Object.class.isAssignableFrom(clazz);
-      }
-
-      @Override
-      public Object get(Object instance, long offset) {
-        return theUnsafe.getObject(instance, offset);
-      }
-
-      @Override
-      public Object getDefaultValue() {
-        return null;
-      }
-
-      @Override
-      public Class<?> getTargetType() {
-        return Object.class;
-      }
-
-      @Override
-      public ValueCommand makeValueCommand(Object value) {
-        throw new RuntimeException("Cannot call makeValueCommand for Objects");
-      }
-
-      @Override
-      public Object readNext(SerializationStreamReader reader)
-          throws SerializationException {
-        return reader.readObject();
-      }
-
-      @Override
-      public void set(Object instance, long offset, Object value) {
-        theUnsafe.putObject(instance, offset, value);
-      }
-    },
-    SHORT {
-      @Override
-      public Object get(Object instance, long offset) {
-        return theUnsafe.getShort(instance, offset);
-      }
-
-      @Override
-      public Class<?> getTargetType() {
-        return short.class;
-      }
-
-      @Override
-      public ValueCommand makeValueCommand(Object value) {
-        return new ShortValueCommand((Short) value);
-      }
-
-      @Override
-      public Object readNext(SerializationStreamReader reader)
-          throws SerializationException {
-        return reader.readShort();
-      }
-
-      @Override
-      public void set(Object instance, long offset, Object value) {
-        theUnsafe.putShort(instance, offset, ((Number) value).shortValue());
-      }
-    },
-    STRING {
-      @Override
-      public boolean canSet(Class<?> clazz) {
-        return true;
-      }
-
-      @Override
-      public Object get(Object instance, long offset) {
-        return theUnsafe.getObject(instance, offset);
-      }
-
-      @Override
-      public Object getDefaultValue() {
-        return null;
-      }
-
-      @Override
-      public Class<?> getTargetType() {
-        return String.class;
-      }
-
-      @Override
-      public ValueCommand makeValueCommand(Object value) {
-        return new StringValueCommand((String) value);
-      }
-
-      @Override
-      public Object readNext(SerializationStreamReader reader)
-          throws SerializationException {
-        return reader.readObject();
-      }
-
-      @Override
-      public void set(Object instance, long offset, Object value) {
-        theUnsafe.putObject(instance, offset, value == null ? null
-            : value.toString());
-      }
-    };
-
-    private final Class<?> arrayType = Array.newInstance(getTargetType(), 0).getClass();
-    private final long arrayBase = theUnsafe.arrayBaseOffset(arrayType);
-    private final long arrayIndexScale = theUnsafe.arrayIndexScale(arrayType);
-
-    public boolean canMakeValueCommand() {
-      return true;
-    }
-
-    public boolean canSet(Class<?> clazz) {
-      return Number.class.isAssignableFrom(clazz);
-    }
-
-    public Object get(Object instance, Field f) {
-      long offset = objectFieldOffset(f);
-      return get(instance, offset);
-    }
-
-    public abstract Object get(Object instance, long offset);
-
-    public Object getDefaultValue() {
-      return 0;
-    }
-
-    public abstract Class<?> getTargetType();
-
-    public abstract ValueCommand makeValueCommand(Object value);
-
-    public abstract Object readNext(SerializationStreamReader reader)
-        throws SerializationException;
-
-    public void set(Object instance, Field f, Object value) {
-      long offset = objectFieldOffset(f);
-      set(instance, offset, value == null ? getDefaultValue() : value);
-    }
-
-    public void set(Object array, int index, Object value) {
-      set(array, arrayBase + arrayIndexScale * index, value);
-    }
-
-    public abstract void set(Object instance, long offset, Object value);
-  }
-
-  private static final Map<Class<?>, Accessor> ACCESSORS = new IdentityHashMap<Class<?>, Accessor>();
-  private static final Unsafe theUnsafe;
-
-  static {
-    Exception ex = null;
-    Unsafe localUnsafe = null;
-    try {
-      Field f = Unsafe.class.getDeclaredField("theUnsafe");
-      f.setAccessible(true);
-      localUnsafe = (Unsafe) f.get(null);
-    } catch (SecurityException e) {
-      ex = e;
-    } catch (NoSuchFieldException e) {
-      ex = e;
-    } catch (IllegalArgumentException e) {
-      ex = e;
-    } catch (IllegalAccessException e) {
-      ex = e;
-    }
-    if (ex != null) {
-      throw new RuntimeException("Unable to get Unsafe instance", ex);
-    } else {
-      theUnsafe = localUnsafe;
-    }
-
-    for (TypeAccessor setter : TypeAccessor.values()) {
-      ACCESSORS.put(setter.getTargetType(), setter);
-    }
-  }
-
-  public static Accessor getAccessor(Class<?> clazz) {
-    Accessor toReturn = ACCESSORS.get(clazz);
-    if (toReturn == null) {
-      toReturn = TypeAccessor.OBJECT;
-    }
-    return toReturn;
-  }
-
-  /**
-   * TODO: In the future it may be preferable to use a custom ClassLoader to
-   * inject a constructor that will initialize all of the final fields that we
-   * care about.
-   */
-  static <T> T allocateInstance(Class<T> clazz) throws InstantiationException {
-    Object obj = theUnsafe.allocateInstance(clazz);
-    return clazz.cast(obj);
-  }
-
-  private static long objectFieldOffset(Field f) {
-    return theUnsafe.objectFieldOffset(f);
-  }
-
-  private CommandSerializationUtil() {
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/server/CommandServerSerializationStreamReader.java b/user/src/com/google/gwt/rpc/server/CommandServerSerializationStreamReader.java
deleted file mode 100644
index 9cbafa2..0000000
--- a/user/src/com/google/gwt/rpc/server/CommandServerSerializationStreamReader.java
+++ /dev/null
@@ -1,388 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.server;
-
-import com.google.gwt.rpc.client.ast.ArrayValueCommand;
-import com.google.gwt.rpc.client.ast.BooleanValueCommand;
-import com.google.gwt.rpc.client.ast.ByteValueCommand;
-import com.google.gwt.rpc.client.ast.CharValueCommand;
-import com.google.gwt.rpc.client.ast.DoubleValueCommand;
-import com.google.gwt.rpc.client.ast.EnumValueCommand;
-import com.google.gwt.rpc.client.ast.FloatValueCommand;
-import com.google.gwt.rpc.client.ast.IdentityValueCommand;
-import com.google.gwt.rpc.client.ast.InstantiateCommand;
-import com.google.gwt.rpc.client.ast.IntValueCommand;
-import com.google.gwt.rpc.client.ast.InvokeCustomFieldSerializerCommand;
-import com.google.gwt.rpc.client.ast.LongValueCommand;
-import com.google.gwt.rpc.client.ast.NullValueCommand;
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor;
-import com.google.gwt.rpc.client.ast.ScalarValueCommand;
-import com.google.gwt.rpc.client.ast.SetCommand;
-import com.google.gwt.rpc.client.ast.ShortValueCommand;
-import com.google.gwt.rpc.client.ast.StringValueCommand;
-import com.google.gwt.rpc.client.ast.ValueCommand;
-import com.google.gwt.rpc.server.CommandSerializationUtil.Accessor;
-import com.google.gwt.user.client.rpc.SerializationException;
-import com.google.gwt.user.client.rpc.SerializationStreamReader;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
-
-/**
- * This class will use ValueCommands to reconstitute objects.
- */
-public class CommandServerSerializationStreamReader implements
-    SerializationStreamReader {
-
-  class Visitor extends RpcCommandVisitor {
-
-    @SuppressWarnings("hiding")
-    private final Stack<Object> values = new Stack<Object>();
-
-    @Override
-    public void endVisit(BooleanValueCommand x, Context ctx) {
-      pushScalar(x);
-    }
-
-    @Override
-    public void endVisit(ByteValueCommand x, Context ctx) {
-      pushScalar(x);
-    }
-
-    @Override
-    public void endVisit(CharValueCommand x, Context ctx) {
-      pushScalar(x);
-    }
-
-    @Override
-    public void endVisit(DoubleValueCommand x, Context ctx) {
-      pushScalar(x);
-    }
-
-    @Override
-    public void endVisit(EnumValueCommand x, Context ctx) {
-      push(x, x.getValue());
-    }
-
-    @Override
-    public void endVisit(FloatValueCommand x, Context ctx) {
-      pushScalar(x);
-    }
-
-    @Override
-    public void endVisit(IntValueCommand x, Context ctx) {
-      pushScalar(x);
-    }
-
-    @Override
-    public void endVisit(LongValueCommand x, Context ctx) {
-      pushScalar(x);
-    }
-
-    @Override
-    public void endVisit(NullValueCommand x, Context ctx) {
-      pushScalar(x);
-    }
-
-    @Override
-    public void endVisit(SetCommand x, Context ctx) {
-      Exception ex;
-      try {
-        Field f = x.getFieldDeclClass().getDeclaredField(x.getField());
-        Object value = values.pop();
-        Object instance = values.peek();
-        assert value == null
-            || CommandSerializationUtil.getAccessor(f.getType()).canSet(
-                value.getClass()) : "Cannot assign a "
-            + value.getClass().getName() + " into " + f.getType().getName();
-
-        CommandSerializationUtil.getAccessor(f.getType()).set(instance, f,
-            value);
-        return;
-      } catch (SecurityException e) {
-        ex = e;
-      } catch (NoSuchFieldException e) {
-        ex = e;
-      }
-      halt(new SerializationException("Unable to set field value", ex));
-    }
-
-    @Override
-    public void endVisit(ShortValueCommand x, Context ctx) {
-      pushScalar(x);
-    }
-
-    @Override
-    public void endVisit(StringValueCommand x, Context ctx) {
-      pushScalar(x);
-    }
-
-    @Override
-    public boolean visit(ArrayValueCommand x, Context ctx) {
-      if (maybePushBackRef(x)) {
-        Object array = Array.newInstance(x.getComponentType(),
-            x.getComponentValues().size());
-        push(x, array);
-
-        int size = x.getComponentValues().size();
-        Accessor a = CommandSerializationUtil.getAccessor(x.getComponentType());
-        for (int i = 0; i < size; i++) {
-          accept(x.getComponentValues().get(i));
-          a.set(array, i, values.pop());
-        }
-      }
-
-      return false;
-    }
-
-    @Override
-    public boolean visit(InstantiateCommand x, Context ctx) {
-      if (maybePushBackRef(x)) {
-        Object instance;
-        try {
-          instance = CommandSerializationUtil.allocateInstance(x.getTargetClass());
-          push(x, instance);
-          return true;
-        } catch (InstantiationException e) {
-          halt(new SerializationException("Unable to create instance", e));
-        }
-      }
-
-      return false;
-    }
-
-    @Override
-    public boolean visit(InvokeCustomFieldSerializerCommand x, Context ctx) {
-      if (maybePushBackRef(x)) {
-
-        CommandServerSerializationStreamReader subReader = new CommandServerSerializationStreamReader(
-            backRefs);
-        subReader.prepareToRead(x.getValues());
-
-        Class<?> serializerClass = x.getSerializerClass();
-        assert serializerClass != null;
-
-        Method instantiate = null;
-        Method deserialize = null;
-        for (Method m : serializerClass.getMethods()) {
-          if ("instantiate".equals(m.getName())) {
-            instantiate = m;
-          } else if ("deserialize".equals(m.getName())) {
-            deserialize = m;
-          }
-
-          if (instantiate != null && deserialize != null) {
-            break;
-          }
-        }
-
-        assert deserialize != null : "No deserialize method in "
-            + serializerClass.getName();
-
-        Object instance = null;
-        if (instantiate != null) {
-          assert Modifier.isStatic(instantiate.getModifiers()) : "instantiate method in "
-              + serializerClass.getName() + " must be static";
-          try {
-            instance = instantiate.invoke(null, subReader);
-          } catch (IllegalArgumentException e) {
-            halt(new SerializationException("Unable to create instance", e));
-          } catch (IllegalAccessException e) {
-            halt(new SerializationException("Unable to create instance", e));
-          } catch (InvocationTargetException e) {
-            halt(new SerializationException("Unable to create instance", e));
-          }
-        } else {
-          try {
-            instance = x.getTargetClass().newInstance();
-          } catch (InstantiationException e) {
-            halt(new SerializationException("Unable to create instance", e));
-          } catch (IllegalAccessException e) {
-            halt(new SerializationException("Unable to create instance", e));
-          }
-        }
-
-        assert instance != null : "Did not create instance";
-        push(x, instance);
-
-        // Process any additional fields
-        accept(x.getSetters());
-
-        try {
-          deserialize.invoke(null, subReader, instance);
-        } catch (IllegalArgumentException e) {
-          halt(new SerializationException("Unable to deserialize instance", e));
-        } catch (IllegalAccessException e) {
-          halt(new SerializationException("Unable to deserialize instance", e));
-        } catch (InvocationTargetException e) {
-          halt(new SerializationException("Unable to deserialize instance", e));
-        }
-      }
-
-      return false;
-    }
-
-    /**
-     * Returns true if the command must be processed.
-     */
-    private boolean maybePushBackRef(IdentityValueCommand x) {
-      Object instance = backRefs.get(x);
-      if (instance == null) {
-        return true;
-      } else {
-        values.push(instance);
-        return false;
-      }
-    }
-
-    private void push(IdentityValueCommand x, Object value) {
-      assert !backRefs.containsKey(x) : "Trying to redefine a backref";
-      backRefs.put(x, value);
-      values.push(value);
-    }
-
-    private void pushScalar(ScalarValueCommand x) {
-      values.push(x.getValue());
-    }
-  }
-
-  final Map<IdentityValueCommand, Object> backRefs;
-  Iterator<ValueCommand> values;
-
-  public CommandServerSerializationStreamReader() {
-    this(new HashMap<IdentityValueCommand, Object>());
-  }
-
-  private CommandServerSerializationStreamReader(
-      Map<IdentityValueCommand, Object> backRefs) {
-    this.backRefs = backRefs;
-  }
-
-  public void prepareToRead(List<ValueCommand> commands) {
-    values = commands.iterator();
-  }
-
-  public boolean readBoolean() throws SerializationException {
-    return readNumberCommand(BooleanValueCommand.class).getValue();
-  }
-
-  public byte readByte() throws SerializationException {
-    return readNumberCommand(ByteValueCommand.class).getValue();
-  }
-
-  public char readChar() throws SerializationException {
-    return readNumberCommand(CharValueCommand.class).getValue();
-  }
-
-  public double readDouble() throws SerializationException {
-    return readNumberCommand(DoubleValueCommand.class).getValue();
-  }
-
-  public float readFloat() throws SerializationException {
-    return readNumberCommand(FloatValueCommand.class).getValue();
-  }
-
-  public int readInt() throws SerializationException {
-    return readNumberCommand(IntValueCommand.class).getValue();
-  }
-
-  public long readLong() throws SerializationException {
-    return readNumberCommand(LongValueCommand.class).getValue();
-  }
-
-  public Object readObject() throws SerializationException {
-    ValueCommand command = readNextCommand(ValueCommand.class);
-    Visitor v = new Visitor();
-    v.accept(command);
-    return v.values.pop();
-  }
-
-  public short readShort() throws SerializationException {
-    return readNumberCommand(ShortValueCommand.class).getValue();
-  }
-
-  public String readString() throws SerializationException {
-    return (String) readObject();
-  }
-
-  private <T extends ValueCommand> T readNextCommand(Class<T> clazz)
-      throws SerializationException {
-    if (!values.hasNext()) {
-      throw new SerializationException("Reached end of stream");
-    }
-    ValueCommand next = values.next();
-    if (!clazz.isInstance(next)) {
-      throw new SerializationException("Cannot assign "
-          + next.getClass().getName() + " to " + clazz.getName());
-    }
-    return clazz.cast(next);
-  }
-
-  /**
-   * Will perform narrowing conversions from double type to other numeric types.
-   */
-  private <T extends ValueCommand> T readNumberCommand(Class<T> clazz)
-      throws SerializationException {
-    if (!values.hasNext()) {
-      throw new SerializationException("Reached end of stream");
-    }
-    ValueCommand next = values.next();
-
-    if (clazz.isInstance(next)) {
-      return clazz.cast(next);
-    } else if (next instanceof LongValueCommand) {
-      if (!clazz.isInstance(next)) {
-        throw new SerializationException("Cannot assign "
-            + next.getClass().getName() + " to " + clazz.getName());
-      }
-      return clazz.cast(next);
-    } else if (next instanceof DoubleValueCommand) {
-      Exception ex;
-      try {
-        Constructor<T> c = clazz.getConstructor(double.class);
-        return c.newInstance(((DoubleValueCommand) next).getValue().doubleValue());
-      } catch (SecurityException e) {
-        throw new SerializationException("Cannot construct ValueCommand type",
-            e);
-      } catch (NoSuchMethodException e) {
-        throw new SerializationException("Connot initialize a "
-            + clazz.getName() + " from a DoubleValueCommand", e);
-      } catch (IllegalArgumentException e) {
-        ex = e;
-      } catch (InstantiationException e) {
-        ex = e;
-      } catch (IllegalAccessException e) {
-        ex = e;
-      } catch (InvocationTargetException e) {
-        ex = e;
-      }
-      throw new SerializationException("Cannot create ValueCommand", ex);
-    } else {
-      throw new SerializationException(
-          "Cannot create a numeric ValueCommand from a "
-              + next.getClass().getName());
-    }
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/server/CommandServerSerializationStreamWriter.java b/user/src/com/google/gwt/rpc/server/CommandServerSerializationStreamWriter.java
deleted file mode 100644
index bfae11e..0000000
--- a/user/src/com/google/gwt/rpc/server/CommandServerSerializationStreamWriter.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.server;
-
-import com.google.gwt.rpc.client.ast.ArrayValueCommand;
-import com.google.gwt.rpc.client.ast.CommandSink;
-import com.google.gwt.rpc.client.ast.EnumValueCommand;
-import com.google.gwt.rpc.client.ast.HasSetters;
-import com.google.gwt.rpc.client.ast.IdentityValueCommand;
-import com.google.gwt.rpc.client.ast.InstantiateCommand;
-import com.google.gwt.rpc.client.ast.InvokeCustomFieldSerializerCommand;
-import com.google.gwt.rpc.client.ast.NullValueCommand;
-import com.google.gwt.rpc.client.ast.ValueCommand;
-import com.google.gwt.rpc.client.impl.CommandSerializationStreamWriterBase;
-import com.google.gwt.rpc.client.impl.HasValuesCommandSink;
-import com.google.gwt.rpc.server.CommandSerializationUtil.Accessor;
-import com.google.gwt.user.client.rpc.IsSerializable;
-import com.google.gwt.user.client.rpc.SerializationException;
-import com.google.gwt.user.server.rpc.impl.SerializabilityUtil;
-
-import java.io.Serializable;
-import java.lang.reflect.Array;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.IdentityHashMap;
-import java.util.Map;
-
-/**
- * A server-side implementation of SerializationStreamWriter that creates a
- * command stream.
- */
-public class CommandServerSerializationStreamWriter extends
-    CommandSerializationStreamWriterBase {
-
-  private final ClientOracle clientOracle;
-  private final Map<Object, IdentityValueCommand> identityMap;
-
-  public CommandServerSerializationStreamWriter(CommandSink sink) {
-    this(new HostedModeClientOracle(), sink);
-  }
-
-  public CommandServerSerializationStreamWriter(ClientOracle oracle,
-      CommandSink sink) {
-    this(oracle, sink, new IdentityHashMap<Object, IdentityValueCommand>());
-  }
-
-  private CommandServerSerializationStreamWriter(ClientOracle oracle,
-      CommandSink sink, Map<Object, IdentityValueCommand> identityMap) {
-    super(sink);
-    this.clientOracle = oracle;
-    this.identityMap = identityMap;
-  }
-
-  /**
-   * Type is passed in to handle primitive types.
-   */
-  @Override
-  protected ValueCommand makeValue(Class<?> type, Object value)
-      throws SerializationException {
-    if (value == null) {
-      return NullValueCommand.INSTANCE;
-    }
-
-    /*
-     * Check accessor map before the identity map because we don't want to
-     * recurse on wrapped primitive values.
-     */
-    Accessor accessor;
-    if ((accessor = CommandSerializationUtil.getAccessor(type)).canMakeValueCommand()) {
-      return accessor.makeValueCommand(value);
-
-    } else if (identityMap.containsKey(value)) {
-      return identityMap.get(value);
-
-    } else if (type.isArray()) {
-      return makeArray(type, value);
-
-    } else if (Enum.class.isAssignableFrom(type)) {
-      return makeEnum(value);
-
-    } else {
-      return makeObject(type, value);
-    }
-  }
-
-  private ArrayValueCommand makeArray(Class<?> type, Object value)
-      throws SerializationException {
-    ArrayValueCommand toReturn = new ArrayValueCommand(type.getComponentType());
-    identityMap.put(value, toReturn);
-    for (int i = 0, j = Array.getLength(value); i < j; i++) {
-      Object arrayValue = Array.get(value, i);
-      if (arrayValue == null) {
-        toReturn.add(NullValueCommand.INSTANCE);
-      } else {
-        Class<? extends Object> valueType = type.getComponentType().isPrimitive()
-            ? type.getComponentType() : arrayValue.getClass();
-        toReturn.add(makeValue(valueType, arrayValue));
-      }
-    }
-    return toReturn;
-  }
-
-  private ValueCommand makeEnum(Object value) {
-    EnumValueCommand toReturn = new EnumValueCommand();
-    toReturn.setValue((Enum<?>) value);
-    return toReturn;
-  }
-
-  /*
-   * TODO: Profiling shows that the reflection and conditional logic in this
-   * method is a hotspot. This could be remedied by generating synthetic
-   * InstantiateCommand types that initialize themselves.
-   */
-  private IdentityValueCommand makeObject(Class<?> type, Object value)
-      throws SerializationException {
-
-    if (type.isAnonymousClass() || type.isLocalClass()) {
-      throw new SerializationException(
-          "Cannot serialize anonymous or local classes");
-    }
-
-    Class<?> manualType = type;
-    Class<?> customSerializer;
-    do {
-      customSerializer = SerializabilityUtil.hasCustomFieldSerializer(manualType);
-      if (customSerializer != null) {
-        break;
-      }
-      manualType = manualType.getSuperclass();
-    } while (manualType != null);
-
-    IdentityValueCommand ins;
-    if (customSerializer != null) {
-      ins = serializeWithCustomSerializer(customSerializer, value, type,
-          manualType);
-    } else {
-      ins = new InstantiateCommand(type);
-      identityMap.put(value, ins);
-    }
-
-    /*
-     * If we're looking at a subclass of a manually-serialized type, the
-     * subclass must be tagged as serializable in order to qualify for
-     * serialization.
-     */
-    if (type != manualType) {
-      if (!Serializable.class.isAssignableFrom(type)
-          && !IsSerializable.class.isAssignableFrom(type)) {
-        throw new SerializationException(type.getName()
-            + " is not a serializable type");
-      }
-    }
-
-    while (type != manualType) {
-      Field[] serializableFields = clientOracle.getOperableFields(type);
-      for (Field declField : serializableFields) {
-        assert (declField != null);
-
-        Accessor accessor = CommandSerializationUtil.getAccessor(declField.getType());
-        ValueCommand valueCommand;
-        Object fieldValue = accessor.get(value, declField);
-        if (fieldValue == null) {
-          valueCommand = NullValueCommand.INSTANCE;
-        } else {
-          Class<? extends Object> fieldType = declField.getType().isPrimitive()
-              ? declField.getType() : fieldValue.getClass();
-          valueCommand = makeValue(fieldType, fieldValue);
-        }
-
-        ((HasSetters) ins).set(declField.getDeclaringClass(),
-            declField.getName(), valueCommand);
-      }
-      type = type.getSuperclass();
-    }
-    return ins;
-  }
-
-  private InvokeCustomFieldSerializerCommand serializeWithCustomSerializer(
-      Class<?> customSerializer, Object instance, Class<?> instanceClass,
-      Class<?> manuallySerializedType) throws SerializationException {
-    assert !instanceClass.isArray();
-
-    Exception ex;
-    try {
-      /*
-       * NB: Class.getMethod() wants exact formal types. It may be the case that
-       * the custom serializer uses looser type bounds in its method
-       * declarations.
-       */
-      for (Method method : customSerializer.getMethods()) {
-        if ("serialize".equals(method.getName())) {
-          assert Modifier.isStatic(method.getModifiers()) : "serialize method "
-              + "in type " + customSerializer.getName() + " must be static";
-
-          final InvokeCustomFieldSerializerCommand toReturn = new InvokeCustomFieldSerializerCommand(
-              instanceClass, customSerializer, manuallySerializedType);
-          identityMap.put(instance, toReturn);
-
-          /*
-           * Pass the current identityMap into the new writer to allow circular
-           * references through the graph emitted by the CFS.
-           */
-          CommandServerSerializationStreamWriter subWriter = new CommandServerSerializationStreamWriter(
-              clientOracle, new HasValuesCommandSink(toReturn), identityMap);
-          method.invoke(null, subWriter, instance);
-
-          return toReturn;
-        }
-      }
-
-      throw new NoSuchMethodException(
-          "Could not find serialize method in custom serializer "
-              + customSerializer.getName());
-
-    } catch (SecurityException e) {
-      ex = e;
-    } catch (NoSuchMethodException e) {
-      ex = e;
-    } catch (IllegalArgumentException e) {
-      ex = e;
-    } catch (IllegalAccessException e) {
-      ex = e;
-    } catch (InvocationTargetException e) {
-      ex = e;
-    }
-
-    throw new SerializationException(ex);
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/server/DelegatingClientOracle.java b/user/src/com/google/gwt/rpc/server/DelegatingClientOracle.java
deleted file mode 100644
index 707048c..0000000
--- a/user/src/com/google/gwt/rpc/server/DelegatingClientOracle.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.server;
-
-import com.google.gwt.rpc.client.ast.CommandSink;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.lang.reflect.Field;
-
-/**
- * A delegate-pattern ClientOracle that can be used to introduce custom
- * behavior.
- */
-public class DelegatingClientOracle extends ClientOracle {
-
-  private final ClientOracle delegate;
-
-  public DelegatingClientOracle(ClientOracle delegate) {
-    this.delegate = delegate;
-  }
-
-  @Override
-  public CommandSink createCommandSink(OutputStream out) throws IOException {
-    return delegate.createCommandSink(out);
-  }
-
-  @Override
-  public String createUnusedIdent(String ident) {
-    return delegate.createUnusedIdent(ident);
-  }
-
-  @Override
-  public CastableTypeData getCastableTypeData(Class<?> clazz) {
-    return delegate.getCastableTypeData(clazz);
-  }
-
-  @Override
-  public String getFieldId(Class<?> clazz, String fieldName) {
-    return delegate.getFieldId(clazz, fieldName);
-  }
-
-  @Override
-  public String getFieldId(Enum<?> value) {
-    return delegate.getFieldId(value);
-  }
-
-  @Override
-  public String getFieldId(String className, String fieldName) {
-    return delegate.getFieldId(className, fieldName);
-  }
-
-  @Override
-  public Pair<Class<?>, String> getFieldName(Class<?> clazz, String fieldId) {
-    return delegate.getFieldName(clazz, fieldId);
-  }
-
-  @Override
-  public String getMethodId(Class<?> clazz, String methodName, Class<?>... args) {
-    return delegate.getMethodId(clazz, methodName, args);
-  }
-
-  @Override
-  public String getMethodId(String className, String methodName,
-      String... jsniArgTypes) {
-    return delegate.getMethodId(className, methodName, jsniArgTypes);
-  }
-
-  @Override
-  public Field[] getOperableFields(Class<?> clazz) {
-    return delegate.getOperableFields(clazz);
-  }
-
-  @Override
-  public String getRuntimeTypeId(Class<?> clazz) {
-    return delegate.getRuntimeTypeId(clazz);
-  }
-
-  @Override
-  public String getJsSymbolName(Class<?> clazz) {
-    return delegate.getJsSymbolName(clazz);
-  }
-
-  @Override
-  public String getTypeName(String seedName) {
-    return delegate.getTypeName(seedName);
-  }
-
-  @Override
-  public boolean isScript() {
-    return delegate.isScript();
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/server/HostedModeClientOracle.java b/user/src/com/google/gwt/rpc/server/HostedModeClientOracle.java
deleted file mode 100644
index 10c90e2..0000000
--- a/user/src/com/google/gwt/rpc/server/HostedModeClientOracle.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.server;
-
-import com.google.gwt.rpc.client.ast.CommandSink;
-import com.google.gwt.rpc.client.impl.SimplePayloadSink;
-import com.google.gwt.user.client.rpc.SerializationException;
-import com.google.gwt.user.server.rpc.impl.SerializabilityUtil;
-
-import java.io.BufferedWriter;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.lang.reflect.Field;
-
-/**
- * A ClientOracle that is used for hosted-mode clients. This type only
- * implements a limited subset of the ClientOracle functionality.
- */
-public final class HostedModeClientOracle extends ClientOracle {
-
-  @Override
-  public CommandSink createCommandSink(OutputStream out) throws IOException {
-    final BufferedWriter buffer = new BufferedWriter(new OutputStreamWriter(
-        out, "UTF-8"));
-
-    return new SimplePayloadSink(buffer) {
-      @Override
-      public void finish() throws SerializationException {
-        super.finish();
-        try {
-          buffer.flush();
-        } catch (IOException e) {
-          throw new SerializationException("Could not flush buffer", e);
-        }
-      }
-    };
-  }
-
-  /**
-   * Unimplemented.
-   */
-  @Override
-  public String createUnusedIdent(String ident) {
-    return unimplemented();
-  }
-
-  @Override
-  public CastableTypeData getCastableTypeData(Class<?> clazz) {
-    return unimplemented();
-  }
-
-  /**
-   * Unimplemented.
-   */
-  @Override
-  public String getFieldId(Class<?> clazz, String fieldName) {
-    return unimplemented();
-  }
-
-  /**
-   * Unimplemented.
-   */
-  @Override
-  public String getFieldId(Enum<?> value) {
-    return unimplemented();
-  }
-
-  /**
-   * Unimplemented.
-   */
-  @Override
-  public String getFieldId(String className, String fieldName) {
-    return unimplemented();
-  }
-
-  @Override
-  public Pair<Class<?>, String> getFieldName(Class<?> clazz, String fieldId) {
-    while (clazz != null) {
-      try {
-        clazz.getDeclaredField(fieldId);
-        return new Pair<Class<?>, String>(clazz, fieldId);
-      } catch (SecurityException e) {
-        // Fall through
-      } catch (NoSuchFieldException e) {
-        // Fall through
-      }
-      clazz = clazz.getSuperclass();
-    }
-    return null;
-  }
-
-  /**
-   * Unimplemented.
-   */
-  @Override
-  public String getMethodId(Class<?> clazz, String methodName, Class<?>... args) {
-    return unimplemented();
-  }
-
-  /**
-   * Unimplemented.
-   */
-  @Override
-  public String getMethodId(String className, String methodName,
-      String... jsniArgTypes) {
-    return unimplemented();
-  }
-
-  /**
-   * Falls back to reflectively analyzing the provided class.
-   */
-  @Override
-  public Field[] getOperableFields(Class<?> clazz) {
-    return SerializabilityUtil.applyFieldSerializationPolicy(clazz);
-  }
-
-  /**
-   * Unimplemented.
-   */
-  @Override
-  public String getRuntimeTypeId(Class<?> clazz) {
-    return unimplemented();
-  }
-
-  /**
-   * Unimplemented.
-   */
-  @Override
-  public String getJsSymbolName(Class<?> clazz) {
-    return unimplemented();
-  }
-
-  /**
-   * Unimplemented.
-   */
-  @Override
-  public String getTypeName(String seedName) {
-    return seedName;
-  }
-
-  /**
-   * Unimplemented.
-   */
-  @Override
-  public boolean isScript() {
-    return false;
-  }
-
-  private <T> T unimplemented() {
-    throw new RuntimeException("Not supported in Development Mode");
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/server/RPC.java b/user/src/com/google/gwt/rpc/server/RPC.java
deleted file mode 100644
index dc1abc4..0000000
--- a/user/src/com/google/gwt/rpc/server/RPC.java
+++ /dev/null
@@ -1,477 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.server;
-
-import com.google.gwt.rpc.client.ast.CommandSink;
-import com.google.gwt.rpc.client.ast.HasValues;
-import com.google.gwt.rpc.client.ast.ReturnCommand;
-import com.google.gwt.rpc.client.ast.RpcCommand;
-import com.google.gwt.rpc.client.ast.ThrowCommand;
-import com.google.gwt.rpc.client.impl.HasValuesCommandSink;
-import com.google.gwt.rpc.client.impl.RemoteException;
-import com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException;
-import com.google.gwt.user.client.rpc.RemoteService;
-import com.google.gwt.user.client.rpc.SerializationException;
-import com.google.gwt.user.server.rpc.RPCRequest;
-import com.google.gwt.user.server.rpc.RPCServletUtils;
-import com.google.gwt.user.server.rpc.UnexpectedException;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * EXPERIMENTAL and subject to change. Do not use this in production code.
- * <p>
- * Utility class for integrating with the RPC system.
- */
-public class RPC {
-
-  private static final HashMap<String, Class<?>> TYPE_NAMES = new HashMap<String, Class<?>>();
-
-  /**
-   * Static map of classes to sets of interfaces (e.g. classes). Optimizes
-   * lookup of interfaces for security.
-   */
-  private static final Map<Class<?>, Set<String>> serviceToImplementedInterfacesMap = new HashMap<Class<?>, Set<String>>();
-
-  static {
-    // The space is needed to prevent name collisions
-    TYPE_NAMES.put(" Z", boolean.class);
-    TYPE_NAMES.put(" B", byte.class);
-    TYPE_NAMES.put(" C", char.class);
-    TYPE_NAMES.put(" D", double.class);
-    TYPE_NAMES.put(" F", float.class);
-    TYPE_NAMES.put(" I", int.class);
-    TYPE_NAMES.put(" J", long.class);
-    TYPE_NAMES.put(" S", short.class);
-  }
-
-  public static RPCRequest decodeRequest(String encodedRequest, Class<?> type,
-      ClientOracle clientOracle) throws RemoteException {
-    if (encodedRequest == null) {
-      throw new NullPointerException("encodedRequest cannot be null");
-    }
-
-    if (encodedRequest.length() == 0) {
-      throw new IllegalArgumentException("encodedRequest cannot be empty");
-    }
-
-    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-
-    try {
-      SimplePayloadDecoder decoder;
-      try {
-        decoder = new SimplePayloadDecoder(clientOracle, encodedRequest);
-      } catch (ClassNotFoundException e) {
-        throw new IncompatibleRemoteServiceException(
-            "Client does not have a type sent by the server", e);
-      }
-      CommandServerSerializationStreamReader streamReader = new CommandServerSerializationStreamReader();
-      if (decoder.getThrownValue() != null) {
-        streamReader.prepareToRead(Collections.singletonList(decoder.getThrownValue()));
-        try {
-          throw new RemoteException((Throwable) streamReader.readObject());
-        } catch (ClassCastException e) {
-          throw new SerializationException(
-              "The remote end threw something other than a Throwable", e);
-        } catch (SerializationException e) {
-          throw new IncompatibleRemoteServiceException(
-              "The remote end threw an exception which could not be deserialized",
-              e);
-        }
-      } else {
-        streamReader.prepareToRead(decoder.getValues());
-      }
-
-      // Read the name of the RemoteService interface
-      String serviceIntfName = streamReader.readString();
-
-      if (type != null) {
-        if (!implementsInterface(type, serviceIntfName)) {
-          // The service does not implement the requested interface
-          throw new IncompatibleRemoteServiceException(
-              "Blocked attempt to access interface '" + serviceIntfName
-                  + "', which is not implemented by '" + printTypeName(type)
-                  + "'; this is either misconfiguration or a hack attempt");
-        }
-      }
-
-      Class<?> serviceIntf;
-      try {
-        serviceIntf = getClassFromSerializedName(null, serviceIntfName,
-            classLoader);
-        if (!RemoteService.class.isAssignableFrom(serviceIntf)) {
-          // The requested interface is not a RpcService interface
-          throw new IncompatibleRemoteServiceException(
-              "Blocked attempt to access interface '"
-                  + printTypeName(serviceIntf)
-                  + "', which doesn't extend RpcService; "
-                  + "this is either misconfiguration or a hack attempt");
-        }
-      } catch (ClassNotFoundException e) {
-        throw new IncompatibleRemoteServiceException(
-            "Could not locate requested interface '" + serviceIntfName
-                + "' in default classloader", e);
-      }
-
-      String serviceMethodName = streamReader.readString();
-
-      int paramCount = streamReader.readInt();
-      Class<?>[] parameterTypes = new Class[paramCount];
-
-      for (int i = 0; i < parameterTypes.length; i++) {
-        String paramClassName = streamReader.readString();
-
-        try {
-          parameterTypes[i] = getClassFromSerializedName(clientOracle,
-              paramClassName, classLoader);
-        } catch (ClassNotFoundException e) {
-          throw new IncompatibleRemoteServiceException("Parameter " + i
-              + " of is of an unknown type '" + paramClassName + "'", e);
-        }
-      }
-
-      try {
-        Method method = serviceIntf.getMethod(serviceMethodName, parameterTypes);
-
-        Object[] parameterValues = new Object[parameterTypes.length];
-        for (int i = 0; i < parameterValues.length; i++) {
-          Object o = CommandSerializationUtil.getAccessor(parameterTypes[i]).readNext(
-              streamReader);
-          parameterValues[i] = o;
-        }
-
-        return new RPCRequest(method, parameterValues, null, null, 0);
-
-      } catch (NoSuchMethodException e) {
-        throw new IncompatibleRemoteServiceException(
-            formatMethodNotFoundErrorMessage(serviceIntf, serviceMethodName,
-                parameterTypes));
-      }
-    } catch (SerializationException ex) {
-      throw new IncompatibleRemoteServiceException(ex.getMessage(), ex);
-    }
-  }
-
-  public static void invokeAndStreamResponse(Object target,
-      Method serviceMethod, Object[] args, ClientOracle clientOracle,
-      OutputStream stream) throws SerializationException {
-    if (serviceMethod == null) {
-      throw new NullPointerException("serviceMethod");
-    }
-
-    if (clientOracle == null) {
-      throw new NullPointerException("clientOracle");
-    }
-
-    CommandSink sink;
-    try {
-      sink = clientOracle.createCommandSink(stream);
-    } catch (IOException e) {
-      throw new SerializationException("Unable to initialize output", e);
-    }
-
-    try {
-      Object result = serviceMethod.invoke(target, args);
-      try {
-        streamResponse(clientOracle, result, sink, false);
-      } catch (SerializationException e) {
-        streamResponse(clientOracle, e, sink, true);
-      }
-
-    } catch (IllegalAccessException e) {
-      SecurityException securityException = new SecurityException(
-          formatIllegalAccessErrorMessage(target, serviceMethod));
-      securityException.initCause(e);
-      throw securityException;
-    } catch (IllegalArgumentException e) {
-      SecurityException securityException = new SecurityException(
-          formatIllegalArgumentErrorMessage(target, serviceMethod, args));
-      securityException.initCause(e);
-      throw securityException;
-    } catch (InvocationTargetException e) {
-      // Try to encode the caught exception
-      Throwable cause = e.getCause();
-
-      // Don't allow random RuntimeExceptions to be thrown back to the client
-      if (!RPCServletUtils.isExpectedException(serviceMethod, cause)) {
-        throw new UnexpectedException("Service method '"
-            + getSourceRepresentation(serviceMethod)
-            + "' threw an unexpected exception: " + cause.toString(), cause);
-      }
-
-      streamResponse(clientOracle, cause, sink, true);
-    }
-    sink.finish();
-  }
-
-  public static void streamResponseForFailure(ClientOracle clientOracle,
-      OutputStream out, Throwable payload) throws SerializationException {
-    CommandSink sink;
-    try {
-      sink = clientOracle.createCommandSink(out);
-    } catch (IOException e) {
-      throw new SerializationException("Unable to initialize output", e);
-    }
-    streamResponse(clientOracle, payload, sink, true);
-    sink.finish();
-  }
-
-  public static void streamResponseForSuccess(ClientOracle clientOracle,
-      OutputStream out, Object payload) throws SerializationException {
-    CommandSink sink;
-    try {
-      sink = clientOracle.createCommandSink(out);
-    } catch (IOException e) {
-      throw new SerializationException("Unable to initialize output", e);
-    }
-    streamResponse(clientOracle, payload, sink, false);
-    sink.finish();
-  }
-
-  private static String formatIllegalAccessErrorMessage(Object target,
-      Method serviceMethod) {
-    StringBuffer sb = new StringBuffer();
-    sb.append("Blocked attempt to access inaccessible method '");
-    sb.append(getSourceRepresentation(serviceMethod));
-    sb.append("'");
-
-    if (target != null) {
-      sb.append(" on target '");
-      sb.append(printTypeName(target.getClass()));
-      sb.append("'");
-    }
-
-    sb.append("; this is either misconfiguration or a hack attempt");
-
-    return sb.toString();
-  }
-
-  private static String formatIllegalArgumentErrorMessage(Object target,
-      Method serviceMethod, Object[] args) {
-    StringBuffer sb = new StringBuffer();
-    sb.append("Blocked attempt to invoke method '");
-    sb.append(getSourceRepresentation(serviceMethod));
-    sb.append("'");
-
-    if (target != null) {
-      sb.append(" on target '");
-      sb.append(printTypeName(target.getClass()));
-      sb.append("'");
-    }
-
-    sb.append(" with invalid arguments");
-
-    if (args != null && args.length > 0) {
-      sb.append(Arrays.asList(args));
-    }
-
-    return sb.toString();
-  }
-
-  private static String formatMethodNotFoundErrorMessage(Class<?> serviceIntf,
-      String serviceMethodName, Class<?>[] parameterTypes) {
-    StringBuffer sb = new StringBuffer();
-
-    sb.append("Could not locate requested method '");
-    sb.append(serviceMethodName);
-    sb.append("(");
-    for (int i = 0; i < parameterTypes.length; ++i) {
-      if (i > 0) {
-        sb.append(", ");
-      }
-      sb.append(printTypeName(parameterTypes[i]));
-    }
-    sb.append(")'");
-
-    sb.append(" in interface '");
-    sb.append(printTypeName(serviceIntf));
-    sb.append("'");
-
-    return sb.toString();
-  }
-
-  /**
-   * Returns the {@link Class} instance for the named class or primitive type.
-   * 
-   * @param serializedName the serialized name of a class or primitive type
-   * @param classLoader the classLoader used to load {@link Class}es
-   * @return Class instance for the given type name
-   * @throws ClassNotFoundException if the named type was not found
-   */
-  private static Class<?> getClassFromSerializedName(ClientOracle clientOracle,
-      String serializedName, ClassLoader classLoader)
-      throws ClassNotFoundException {
-    Class<?> value = TYPE_NAMES.get(serializedName);
-    if (value != null) {
-      return value;
-    }
-
-    // Interfaces don't exist in the client, so we use unobfuscated names
-    if (serializedName.charAt(0) == ' ') {
-      serializedName = serializedName.substring(1);
-    } else if (clientOracle != null) {
-      serializedName = clientOracle.getTypeName(serializedName);
-    }
-    assert serializedName != null;
-
-    return Class.forName(serializedName, false, classLoader);
-  }
-
-  /**
-   * Returns the source representation for a method signature.
-   * 
-   * @param method method to get the source signature for
-   * @return source representation for a method signature
-   */
-  private static String getSourceRepresentation(Method method) {
-    return method.toString().replace('$', '.');
-  }
-
-  /**
-   * Used to determine whether the specified interface name is implemented by
-   * the service class. This is done without loading the class (for security).
-   */
-  private static boolean implementsInterface(Class<?> service, String intfName) {
-    synchronized (serviceToImplementedInterfacesMap) {
-      // See if it's cached.
-      //
-      Set<String> interfaceSet = serviceToImplementedInterfacesMap.get(service);
-      if (interfaceSet != null) {
-        if (interfaceSet.contains(intfName)) {
-          return true;
-        }
-      } else {
-        interfaceSet = new HashSet<String>();
-        serviceToImplementedInterfacesMap.put(service, interfaceSet);
-      }
-
-      if (!service.isInterface()) {
-        while ((service != null) && !RpcServlet.class.equals(service)) {
-          Class<?>[] intfs = service.getInterfaces();
-          for (Class<?> intf : intfs) {
-            if (implementsInterfaceRecursive(intf, intfName)) {
-              interfaceSet.add(intfName);
-              return true;
-            }
-          }
-
-          // did not find the interface in this class so we look in the
-          // superclass
-          //
-          service = service.getSuperclass();
-        }
-      } else {
-        if (implementsInterfaceRecursive(service, intfName)) {
-          interfaceSet.add(intfName);
-          return true;
-        }
-      }
-
-      return false;
-    }
-  }
-
-  /**
-   * Recursive helper for implementsInterface().
-   */
-  private static boolean implementsInterfaceRecursive(Class<?> clazz,
-      String intfName) {
-    assert (clazz.isInterface());
-
-    if (clazz.getName().equals(intfName)) {
-      return true;
-    }
-
-    // search implemented interfaces
-    Class<?>[] intfs = clazz.getInterfaces();
-    for (Class<?> intf : intfs) {
-      if (implementsInterfaceRecursive(intf, intfName)) {
-        return true;
-      }
-    }
-
-    return false;
-  }
-
-  /**
-   * Straight copy from
-   * {@link com.google.gwt.dev.util.TypeInfo#getSourceRepresentation(Class)} to
-   * avoid runtime dependency on gwt-dev.
-   */
-  private static String printTypeName(Class<?> type) {
-    // Primitives
-    //
-    if (type.equals(Integer.TYPE)) {
-      return "int";
-    } else if (type.equals(Long.TYPE)) {
-      return "long";
-    } else if (type.equals(Short.TYPE)) {
-      return "short";
-    } else if (type.equals(Byte.TYPE)) {
-      return "byte";
-    } else if (type.equals(Character.TYPE)) {
-      return "char";
-    } else if (type.equals(Boolean.TYPE)) {
-      return "boolean";
-    } else if (type.equals(Float.TYPE)) {
-      return "float";
-    } else if (type.equals(Double.TYPE)) {
-      return "double";
-    }
-
-    // Arrays
-    //
-    if (type.isArray()) {
-      Class<?> componentType = type.getComponentType();
-      return printTypeName(componentType) + "[]";
-    }
-
-    // Everything else
-    //
-    return type.getName().replace('$', '.');
-  }
-
-  private static void streamResponse(ClientOracle clientOracle, Object payload,
-      CommandSink sink, boolean asThrow) throws SerializationException {
-    HasValues command;
-    if (asThrow) {
-      command = new ThrowCommand();
-      assert payload instanceof Throwable : "Trying to throw something other than a Throwable";
-      // payload = new RemoteException((Throwable) payload);
-    } else {
-      command = new ReturnCommand();
-    }
-
-    CommandServerSerializationStreamWriter out = new CommandServerSerializationStreamWriter(
-        clientOracle, new HasValuesCommandSink(command));
-
-    out.writeObject(payload);
-
-    sink.accept((RpcCommand) command);
-  }
-
-  private RPC() {
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/server/RpcServlet.java b/user/src/com/google/gwt/rpc/server/RpcServlet.java
deleted file mode 100644
index f7c5c0d..0000000
--- a/user/src/com/google/gwt/rpc/server/RpcServlet.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.server;
-
-import static com.google.gwt.user.client.rpc.RpcRequestBuilder.MODULE_BASE_HEADER;
-
-import com.google.gwt.rpc.client.impl.RemoteException;
-import com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException;
-import com.google.gwt.user.client.rpc.SerializationException;
-import com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet;
-import com.google.gwt.user.server.rpc.RPCRequest;
-import com.google.gwt.user.server.rpc.RPCServletUtils;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.lang.ref.SoftReference;
-import java.net.InetAddress;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.UnknownHostException;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.zip.GZIPOutputStream;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * EXPERIMENTAL and subject to change. Do not use this in production code.
- * <p>
- * The servlet base class for your RPC service implementations that
- * automatically deserializes incoming requests from the client and serializes
- * outgoing responses for client/server RPCs.
- */
-public class RpcServlet extends AbstractRemoteServiceServlet {
-
-  protected static final String CLIENT_ORACLE_EXTENSION = ".gwt.rpc";
-  private static final boolean DUMP_PAYLOAD = Boolean.getBoolean("gwt.rpc.dumpPayload");
-
-  private final Map<String, SoftReference<ClientOracle>> clientOracleCache = new ConcurrentHashMap<String, SoftReference<ClientOracle>>();
-
-  /**
-   * The implementation of the service.
-   */
-  private final Object delegate;
-
-  /**
-   * The default constructor used by service implementations that
-   * extend this class.  The servlet will delegate AJAX requests to
-   * the appropriate method in the subclass.
-   */
-  public RpcServlet() {
-    this.delegate = this;
-  }
-
-  /**
-   * The wrapping constructor used by service implementations that are
-   * separate from this class.  The servlet will delegate AJAX
-   * requests to the appropriate method in the given object.
-   */
-  public RpcServlet(Object delegate) {
-    this.delegate = delegate;
-  }
-
-  /**
-   * This method creates the ClientOracle that will provide data about the
-   * remote client. It delegates to
-   * {@link #findClientOracleData(String, String)} to obtain access to
-   * ClientOracle data emitted by the GWT compiler.
-   */
-  public ClientOracle getClientOracle() throws SerializationException {
-    String permutationStrongName = getPermutationStrongName();
-    if (permutationStrongName == null) {
-      throw new SecurityException(
-          "Blocked request without GWT permutation header (XSRF attack?)");
-    }
-    String basePath = getRequestModuleBasePath();
-    if (basePath == null) {
-      throw new SecurityException(
-          "Blocked request without GWT base path header (XSRF attack?)");
-    }
-
-    ClientOracle toReturn;
-
-    // Fast path if the ClientOracle is already cached.
-    if (clientOracleCache.containsKey(permutationStrongName)) {
-      toReturn = clientOracleCache.get(permutationStrongName).get();
-      if (toReturn != null) {
-        return toReturn;
-      }
-    }
-
-    /* Synchronize to make sure expensive calls are executed only once.
-       Double checked locking idiom works here because of volatiles in
-       ConcurrentHashMap.*/
-    synchronized (clientOracleCache) {
-      if (clientOracleCache.containsKey(permutationStrongName)) {
-        toReturn = clientOracleCache.get(permutationStrongName).get();
-        if (toReturn != null) {
-          return toReturn;
-        }
-      }
-
-      if ("HostedMode".equals(permutationStrongName)) {
-        if (!allowHostedModeConnections()) {
-          throw new SecurityException("Blocked Development Mode request");
-        }
-        toReturn = new HostedModeClientOracle();
-      } else {
-        InputStream in = findClientOracleData(basePath, permutationStrongName);
-
-        try {
-          toReturn = WebModeClientOracle.load(in);
-        } catch (IOException e) {
-          throw new SerializationException(
-              "Could not load serialization policy for permutation "
-                  + permutationStrongName, e);
-        }
-      }
-      clientOracleCache.put(permutationStrongName,
-          new SoftReference<ClientOracle>(toReturn));
-    }
-
-    return toReturn;
-  }
-
-  /**
-   * Process a call originating from the given request. Uses the
-   * {@link RPC#invokeAndStreamResponse(Object, java.lang.reflect.Method, Object[], ClientOracle, OutputStream)}
-   * method to do the actual work.
-   * <p>
-   * Subclasses may optionally override this method to handle the payload in any
-   * way they desire (by routing the request to a framework component, for
-   * instance). The {@link HttpServletRequest} and {@link HttpServletResponse}
-   * can be accessed via the {@link #getThreadLocalRequest()} and
-   * {@link #getThreadLocalResponse()} methods.
-   * </p>
-   * This is public so that it can be unit tested easily without HTTP.
-   * 
-   * @param clientOracle the ClientOracle that will be used to interpret the
-   *          request
-   * @param payload the UTF-8 request payload
-   * @param stream the OutputStream that will receive the encoded response
-   * @throws SerializationException if we cannot serialize the response
-   */
-  public void processCall(ClientOracle clientOracle, String payload,
-      OutputStream stream) throws SerializationException {
-    assert clientOracle != null : "clientOracle";
-    assert payload != null : "payload";
-    assert stream != null : "stream";
-
-    try {
-      RPCRequest rpcRequest = RPC.decodeRequest(payload, delegate.getClass(),
-          clientOracle);
-      onAfterRequestDeserialized(rpcRequest);
-      RPC.invokeAndStreamResponse(delegate, rpcRequest.getMethod(),
-          rpcRequest.getParameters(), clientOracle, stream);
-    } catch (RemoteException ex) {
-      throw new SerializationException("An exception was sent from the client",
-          ex.getCause());
-    } catch (IncompatibleRemoteServiceException ex) {
-      log(
-          "An IncompatibleRemoteServiceException was thrown while processing this call.",
-          ex);
-      RPC.streamResponseForFailure(clientOracle, stream, ex);
-    }
-  }
-
-  /**
-   * Standard HttpServlet method: handle the POST.
-   * 
-   * This doPost method swallows ALL exceptions, logs them in the
-   * ServletContext, and returns a GENERIC_FAILURE_MSG response with status code
-   * 500.
-   * 
-   * @throws IOException
-   * @throws ServletException
-   * @throws SerializationException
-   */
-  @Override
-  public final void processPost(HttpServletRequest request,
-      HttpServletResponse response) throws ServletException, IOException,
-      SerializationException {
-
-    /*
-     * Get the ClientOracle before doing anything else, so that if ClientOracle
-     * cannot be loaded, we haven't opened the response's OutputStream.
-     */
-    ClientOracle clientOracle = getClientOracle();
-
-    // Read the request fully.
-    String requestPayload = readContent(request);
-    if (DUMP_PAYLOAD) {
-      System.out.println(requestPayload);
-    }
-
-    response.setContentType("application/json");
-    response.setCharacterEncoding("UTF-8");
-
-    // Configure the OutputStream based on configuration and capabilities
-    boolean canCompress = RPCServletUtils.acceptsGzipEncoding(request)
-        && shouldCompressResponse(request, response);
-
-    OutputStream out;
-    if (DUMP_PAYLOAD) {
-      out = new ByteArrayOutputStream();
-
-    } else if (canCompress) {
-      RPCServletUtils.setGzipEncodingHeader(response);
-      out = new GZIPOutputStream(response.getOutputStream());
-
-    } else {
-      out = response.getOutputStream();
-    }
-
-    // Invoke the core dispatching logic, which returns the serialized result.
-    processCall(clientOracle, requestPayload, out);
-
-    if (DUMP_PAYLOAD) {
-      byte[] bytes = ((ByteArrayOutputStream) out).toByteArray();
-      System.out.println(new String(bytes, "UTF-8"));
-      response.getOutputStream().write(bytes);
-    } else if (canCompress) {
-      /*
-       * We want to write the end of the gzip data, but not close the underlying
-       * OutputStream in case there are servlet filters that want to write
-       * headers after processPost().
-       */
-      ((GZIPOutputStream) out).finish();
-    }
-  }
-
-  /**
-   * Indicates whether or not an RPC request from a Development Mode client
-   * should be serviced. Requests from Development Mode clients will expose
-   * unobfuscated identifiers in the payload. It is intended that developers
-   * override this method to restrict access based on installation-specific
-   * logic (such as a range of IP addresses, checking for certain cookies, etc.)
-   * <p>
-   * The default implementation allows hosted-mode connections from the local
-   * host, loopback addresses (127.*), site local (RFC 1918), link local
-   * (169.254/16) addresses, and their IPv6 equivalents.
-   *
-   * @return <code>true</code> if a Development Mode connection should be
-   *         allowed
-   * @see #getThreadLocalRequest()
-   * @see InetAddress
-   */
-  protected boolean allowHostedModeConnections() {
-    return isRequestFromLocalAddress();
-  }
-
-  /**
-   * Override this method to control access to permutation-specific data. For
-   * instance, the permutation-specific data may be stored in a database in
-   * order to support older clients.
-   * <p>
-   * The default implementation attempts to load the file from the
-   * ServletContext as
-   * 
-   * <code>requestModuleBasePath + permutationStrongName + CLIENT_ORACLE_EXTENSION</code>
-   * 
-   * @param requestModuleBasePath the module's base path, modulo protocol and
-   *          host, as reported by {@link #getRequestModuleBasePath()}
-   * @param permutationStrongName the module's strong name as reported by
-   *          {@link #getPermutationStrongName()}
-   */
-  protected InputStream findClientOracleData(String requestModuleBasePath,
-      String permutationStrongName) throws SerializationException {
-    String resourcePath = requestModuleBasePath + permutationStrongName
-        + CLIENT_ORACLE_EXTENSION;
-    InputStream in = getServletContext().getResourceAsStream(resourcePath);
-    if (in == null) {
-      throw new SerializationException(
-          "Could not find ClientOracle data for permutation "
-              + permutationStrongName);
-    }
-    return in;
-  }
-
-  /**
-   * Extract the module's base path from the current request.
-   * 
-   * @return the module's base path, modulo protocol and host, as reported by
-   *         {@link com.google.gwt.core.client.GWT#getModuleBaseURL()} or
-   *         <code>null</code> if the request did not contain the
-   *         {@value com.google.gwt.user.client.rpc.RpcRequestBuilder#MODULE_BASE_HEADER} header
-   */
-  protected final String getRequestModuleBasePath() {
-    try {
-      String header = getThreadLocalRequest().getHeader(MODULE_BASE_HEADER);
-      if (header == null) {
-        return null;
-      }
-      String path = new URL(header).getPath();
-      String contextPath = getThreadLocalRequest().getContextPath();
-      if (!path.startsWith(contextPath)) {
-        return null;
-      }
-      return path.substring(contextPath.length());
-    } catch (MalformedURLException e) {
-      return null;
-    }
-  }
-
-  /**
-   * Determines whether the response to a given servlet request should or should
-   * not be GZIP compressed. This method is only called in cases where the
-   * requester accepts GZIP encoding.
-   * <p>
-   * This implementation currently returns <code>true</code> if the request
-   * originates from a non-local address. Subclasses can override this logic.
-   * </p>
-   * 
-   * @param request the request being served
-   * @param response the response that will be written into
-   * @return <code>true</code> if responsePayload should be GZIP compressed,
-   *         otherwise <code>false</code>.
-   */
-  protected boolean shouldCompressResponse(HttpServletRequest request,
-      HttpServletResponse response) {
-    return !isRequestFromLocalAddress();
-  }
-
-  /**
-   * Utility function to determine if the thread-local request originates from a
-   * local address.
-   */
-  private boolean isRequestFromLocalAddress() {
-    try {
-      InetAddress addr = InetAddress.getByName(getThreadLocalRequest().getRemoteAddr());
-
-      return InetAddress.getLocalHost().equals(addr)
-          || addr.isLoopbackAddress() || addr.isSiteLocalAddress()
-          || addr.isLinkLocalAddress();
-    } catch (UnknownHostException e) {
-      return false;
-    }
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/server/SimplePayloadDecoder.java b/user/src/com/google/gwt/rpc/server/SimplePayloadDecoder.java
deleted file mode 100644
index a9fd42d..0000000
--- a/user/src/com/google/gwt/rpc/server/SimplePayloadDecoder.java
+++ /dev/null
@@ -1,507 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.server;
-
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.ARRAY_TYPE;
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.BACKREF_TYPE;
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.BOOLEAN_TYPE;
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.BYTE_TYPE;
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.CHAR_TYPE;
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.DOUBLE_TYPE;
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.ENUM_TYPE;
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.FLOAT_TYPE;
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.INT_TYPE;
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.INVOKE_TYPE;
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.LONG_TYPE;
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.NL_CHAR;
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.OBJECT_TYPE;
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.RETURN_TYPE;
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.RPC_SEPARATOR_CHAR;
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.SHORT_TYPE;
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.STRING_TYPE;
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.THROW_TYPE;
-import static com.google.gwt.rpc.client.impl.SimplePayloadSink.VOID_TYPE;
-
-import com.google.gwt.rpc.client.ast.ArrayValueCommand;
-import com.google.gwt.rpc.client.ast.BooleanValueCommand;
-import com.google.gwt.rpc.client.ast.ByteValueCommand;
-import com.google.gwt.rpc.client.ast.CharValueCommand;
-import com.google.gwt.rpc.client.ast.DoubleValueCommand;
-import com.google.gwt.rpc.client.ast.EnumValueCommand;
-import com.google.gwt.rpc.client.ast.FloatValueCommand;
-import com.google.gwt.rpc.client.ast.HasSetters;
-import com.google.gwt.rpc.client.ast.IdentityValueCommand;
-import com.google.gwt.rpc.client.ast.InstantiateCommand;
-import com.google.gwt.rpc.client.ast.IntValueCommand;
-import com.google.gwt.rpc.client.ast.InvokeCustomFieldSerializerCommand;
-import com.google.gwt.rpc.client.ast.LongValueCommand;
-import com.google.gwt.rpc.client.ast.NullValueCommand;
-import com.google.gwt.rpc.client.ast.ReturnCommand;
-import com.google.gwt.rpc.client.ast.RpcCommand;
-import com.google.gwt.rpc.client.ast.ScalarValueCommand;
-import com.google.gwt.rpc.client.ast.ShortValueCommand;
-import com.google.gwt.rpc.client.ast.StringValueCommand;
-import com.google.gwt.rpc.client.ast.ValueCommand;
-import com.google.gwt.user.server.rpc.impl.SerializabilityUtil;
-
-import java.lang.reflect.Array;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
-
-/**
- * Decodes the simple payload.
- */
-public class SimplePayloadDecoder {
-  private static final String OBFUSCATED_CLASS_PREFIX = "Class$ ";
-  private static final Map<String, Class<?>> PRIMITIVE_TYPES = new HashMap<String, Class<?>>();
-
-  static {
-    // Obfuscated when class metadata is disabled
-    PRIMITIVE_TYPES.put(OBFUSCATED_CLASS_PREFIX + BOOLEAN_TYPE, boolean.class);
-    PRIMITIVE_TYPES.put(OBFUSCATED_CLASS_PREFIX + BYTE_TYPE, byte.class);
-    PRIMITIVE_TYPES.put(OBFUSCATED_CLASS_PREFIX + CHAR_TYPE, char.class);
-    PRIMITIVE_TYPES.put(OBFUSCATED_CLASS_PREFIX + DOUBLE_TYPE, double.class);
-    PRIMITIVE_TYPES.put(OBFUSCATED_CLASS_PREFIX + FLOAT_TYPE, float.class);
-    PRIMITIVE_TYPES.put(OBFUSCATED_CLASS_PREFIX + INT_TYPE, int.class);
-    PRIMITIVE_TYPES.put(OBFUSCATED_CLASS_PREFIX + LONG_TYPE, long.class);
-    PRIMITIVE_TYPES.put(OBFUSCATED_CLASS_PREFIX + SHORT_TYPE, short.class);
-    PRIMITIVE_TYPES.put(OBFUSCATED_CLASS_PREFIX + VOID_TYPE, void.class);
-
-    // Regular
-    PRIMITIVE_TYPES.put(boolean.class.getName(), boolean.class);
-    PRIMITIVE_TYPES.put(byte.class.getName(), byte.class);
-    PRIMITIVE_TYPES.put(char.class.getName(), char.class);
-    PRIMITIVE_TYPES.put(double.class.getName(), double.class);
-    PRIMITIVE_TYPES.put(float.class.getName(), float.class);
-    PRIMITIVE_TYPES.put(int.class.getName(), int.class);
-    PRIMITIVE_TYPES.put(long.class.getName(), long.class);
-    PRIMITIVE_TYPES.put(short.class.getName(), short.class);
-    PRIMITIVE_TYPES.put(void.class.getName(), void.class);
-  }
-
-  private final Map<Integer, ValueCommand> backRefs = new HashMap<Integer, ValueCommand>();
-  private final Map<String, Class<?>> classCache = new HashMap<String, Class<?>>(
-      PRIMITIVE_TYPES);
-  private final ClientOracle clientOracle;
-  private final Stack<RpcCommand> commands = new Stack<RpcCommand>();
-  private int idx;
-  private final CharSequence payload;
-  private ReturnCommand toReturn;
-  private ValueCommand toThrow;
-
-  /**
-   * Construct a new SimplePayloadDecoder. This will consume the entire payload
-   * which will be made available through {@link #getValues}. If the payload
-   * stream contains an embedded exception, processing will end early and the
-   * Throwable will be available via {@link #getThrownValue()}.
-   * 
-   * @throws ClassNotFoundException
-   */
-  public SimplePayloadDecoder(ClientOracle clientOracle, CharSequence payload)
-      throws ClassNotFoundException {
-    this.clientOracle = clientOracle;
-    this.payload = payload;
-    while (toReturn == null && idx < payload.length()) {
-      decodeCommand();
-
-      // We hit an error in the stream; stop now
-      if (toThrow != null) {
-        return;
-      }
-    }
-  }
-
-  /**
-   * Returns the thrown value, if any.
-   */
-  public ValueCommand getThrownValue() {
-    return toThrow;
-  }
-
-  /**
-   * Returns the values encoded in the payload.
-   */
-  public List<ValueCommand> getValues() {
-    return toReturn == null ? Collections.<ValueCommand> emptyList()
-        : toReturn.getValues();
-  }
-
-  private void decodeCommand() throws ClassNotFoundException {
-    char command = next();
-    if (command == NL_CHAR) {
-      // Pretty mode payload
-      command = next();
-    }
-    String token = token();
-    switch (command) {
-      case BOOLEAN_TYPE: {
-        push(new BooleanValueCommand(token.equals("1")));
-        break;
-      }
-      case BYTE_TYPE: {
-        push(new ByteValueCommand(Byte.valueOf(token)));
-        break;
-      }
-      case CHAR_TYPE: {
-        push(new CharValueCommand(Character.valueOf((char) Integer.valueOf(
-            token).intValue())));
-        break;
-      }
-      case DOUBLE_TYPE: {
-        push(new DoubleValueCommand(Double.valueOf(token)));
-        break;
-      }
-      case FLOAT_TYPE: {
-        push(new FloatValueCommand(Float.valueOf(token)));
-        break;
-      }
-      case INT_TYPE: {
-        push(new IntValueCommand(Integer.valueOf(token)));
-        break;
-      }
-      case LONG_TYPE: {
-        push(new LongValueCommand(Long.valueOf(token)));
-        break;
-      }
-      case VOID_TYPE: {
-        push(NullValueCommand.INSTANCE);
-        break;
-      }
-      case SHORT_TYPE: {
-        push(new ShortValueCommand(Short.valueOf(token)));
-        break;
-      }
-      case STRING_TYPE: {
-        // "4~abcd
-        int length = Integer.valueOf(token);
-        String value = next(length);
-        if (next() != RPC_SEPARATOR_CHAR) {
-          throw new RuntimeException("Overran string");
-        }
-        push(new StringValueCommand(value));
-        break;
-      }
-      case ENUM_TYPE: {
-        // ETypeSeedName~IOrdinal~
-        EnumValueCommand x = new EnumValueCommand();
-        push(x);
-        
-        // use ordinal (and not name), since name might have been obfuscated
-        int ordinal = readCommand(IntValueCommand.class).getValue();
-
-        @SuppressWarnings("rawtypes")
-        Class<? extends Enum> clazz = findClass(token).asSubclass(Enum.class);
-        
-        /*
-         * TODO: Note this approach could be prone to subtle corruption or
-         * an ArrayOutOfBoundsException if the client and server have drifted.
-         */
-        Enum<?> enumConstants[] = clazz.getEnumConstants();
-        x.setValue(enumConstants[ordinal]);
-        break;
-      }
-      case ARRAY_TYPE: {
-        // Encoded as (leafType, dimensions, length, .... )
-        Class<?> leaf = findClass(token);
-
-        Integer numDims = readCommand(IntValueCommand.class).getValue();
-        Class<?> clazz;
-        if (numDims > 1) {
-          int[] dims = new int[numDims - 1];
-          clazz = Array.newInstance(leaf, dims).getClass();
-        } else {
-          clazz = leaf;
-        }
-
-        ArrayValueCommand x = new ArrayValueCommand(clazz);
-        push(x);
-        int length = readCommand(IntValueCommand.class).getValue();
-        for (int i = 0; i < length; i++) {
-          x.add(readCommand(ValueCommand.class));
-        }
-        break;
-      }
-      case OBJECT_TYPE: {
-        // @TypeSeedName~3~... N-many setters ...
-        Class<?> clazz = findClass(token);
-        InstantiateCommand x = new InstantiateCommand(clazz);
-        push(x);
-        readSetters(clazz, x);
-        break;
-      }
-      case INVOKE_TYPE: {
-        // !TypeSeedName~Number of objects written by CFS~...CFS objects...~
-        // Number of extra fields~...N-many setters...
-        Class<?> clazz = findClass(token);
-        Class<?> serializerClass = null;
-
-        // The custom serializer type might be for a supertype
-        Class<?> manualType = clazz;
-        while (manualType != null) {
-          serializerClass = SerializabilityUtil.hasCustomFieldSerializer(manualType);
-          if (serializerClass != null) {
-            break;
-          }
-          manualType = manualType.getSuperclass();
-        }
-
-        InvokeCustomFieldSerializerCommand x = new InvokeCustomFieldSerializerCommand(
-            clazz, serializerClass, manualType);
-        push(x);
-
-        readFields(x);
-        readSetters(clazz, x);
-        break;
-      }
-      case RETURN_TYPE: {
-        // R4~...values...
-        toReturn = new ReturnCommand();
-        int toRead = Integer.valueOf(token);
-        for (int i = 0; i < toRead; i++) {
-          toReturn.addValue(readCommand(ValueCommand.class));
-        }
-        break;
-      }
-      case THROW_TYPE: {
-        // T...value...
-        toThrow = readCommand(ValueCommand.class);
-        break;
-      }
-      case BACKREF_TYPE: {
-        // @backrefNumber~
-        ValueCommand x = backRefs.get(Integer.valueOf(token));
-        assert x != null : "Could not find backref";
-        commands.push(x);
-        break;
-      }
-      case RPC_SEPARATOR_CHAR: {
-        /*
-         * Not strictly necessary, but it makes an off-by-one easier to
-         * distinguish.
-         */
-        throw new RuntimeException("Segmentation overrun at " + idx);
-      }
-      default:
-        throw new RuntimeException("Unknown command " + command);
-    }
-  }
-
-  /**
-   * Uses the ClientOracle to decode a type name.
-   */
-  private Class<?> findClass(String token) throws ClassNotFoundException {
-    /*
-     * NB: This is the only method in SimplePayloadDecoder which would require
-     * any real adaptation to be made to run in Production Mode.
-     */
-
-    Class<?> clazz = classCache.get(token);
-    if (clazz != null) {
-      return clazz;
-    }
-
-    String className = clientOracle.getTypeName(token);
-    if (className == null) {
-      // Probably a regular class name
-      className = token;
-    }
-
-    if (className.contains("[]")) {
-      // Array types are annoying to construct
-      int firstIndex = -1;
-      int j = -1;
-      int dims = 0;
-      while ((j = className.indexOf("[", j + 1)) != -1) {
-        if (dims++ == 0) {
-          firstIndex = j;
-        }
-      }
-      Class<?> componentType = findClass(className.substring(0, firstIndex));
-      assert componentType != null : "Could not determine component type with "
-          + className.substring(0, firstIndex);
-      clazz = Array.newInstance(componentType, new int[dims]).getClass();
-    } else {
-      // Ensure that we use the bridge classloader in CCL
-      ClassLoader myCCL = getClass().getClassLoader();
-      clazz = Class.forName(className, false, myCCL);
-    }
-    classCache.put(token, clazz);
-    return clazz;
-  }
-
-  /**
-   * Reads the next character in the input, possibly evaluating escape
-   * sequences.
-   */
-  private char next() {
-    char c = payload.charAt(idx++);
-
-    if (c == '\\') {
-      switch (payload.charAt(idx++)) {
-        case '0':
-          c = '\0';
-          break;
-        case '!':
-          // Compatibility since we're using the legacy escaping code
-          c = '|';
-          break;
-        case 'b':
-          c = '\b';
-          break;
-        case 't':
-          c = '\t';
-          break;
-        case 'n':
-          c = '\n';
-          break;
-        case 'f':
-          c = '\f';
-          break;
-        case 'r':
-          c = '\r';
-          break;
-        case '\\':
-          c = '\\';
-          break;
-        case '"':
-          c = '"';
-          break;
-        case 'u':
-          c = (char) Integer.parseInt(
-              payload.subSequence(idx, idx += 4).toString(), 16);
-          break;
-        case 'x':
-          c = (char) Integer.parseInt(
-              payload.subSequence(idx, idx += 2).toString(), 16);
-          break;
-        default:
-          throw new RuntimeException("Unhandled escape " + payload.charAt(idx));
-      }
-    }
-    return c;
-  }
-
-  /**
-   * Reads <code>count</code> many characters and returns them as a string.
-   */
-  private String next(int count) {
-    StringBuilder sb = new StringBuilder();
-    while (count-- > 0) {
-      sb.append(next());
-    }
-    return sb.toString();
-  }
-
-  /**
-   * Retains the object value and establishes a backreference.
-   */
-  private void push(IdentityValueCommand x) {
-    commands.push(x);
-    backRefs.put(backRefs.size(), x);
-  }
-
-  /**
-   * Retains the scalar value, but does not establish a backreference.
-   */
-  private void push(ScalarValueCommand x) {
-    commands.push(x);
-  }
-
-  /**
-   * Retains the string value and establishes a backreference.
-   */
-  private void push(StringValueCommand x) {
-    commands.push(x);
-    backRefs.put(backRefs.size(), x);
-  }
-
-  /**
-   * Read one command from the stream.
-   * 
-   * @param <T> the expected type of RpcCommand to read
-   * @param clazz the expected type of RpcCommand to read
-   * @throws ClassCastException if a command was successfully read, but could
-   *           not be assigned to <code>clazz</code>
-   */
-  private <T extends RpcCommand> T readCommand(Class<T> clazz)
-      throws ClassNotFoundException {
-    decodeCommand();
-    RpcCommand value = commands.pop();
-    assert clazz.isInstance(value) : "Cannot assign a "
-        + value.getClass().getName() + " to " + clazz.getName();
-    return clazz.cast(value);
-  }
-
-  /**
-   * Format is (int, value...).
-   */
-  private void readFields(InvokeCustomFieldSerializerCommand x)
-      throws ClassNotFoundException {
-    int length = readCommand(IntValueCommand.class).getValue();
-    for (int i = 0; i < length; i++) {
-      x.addValue(readCommand(ValueCommand.class));
-    }
-  }
-
-  /**
-   * Format is (fieldDeclClassName, fieldId, value). fieldDeclClassName may be
-   * null.
-   */
-  private void readSetter(Class<?> clazz, HasSetters x)
-      throws ClassNotFoundException {
-    // Only used by Development Mode to handle shadowing
-    if (!clientOracle.isScript()) {
-      String fieldDeclClassName = readCommand(StringValueCommand.class).getValue();
-      if (fieldDeclClassName != null) {
-        clazz = findClass(fieldDeclClassName);
-      }
-    }
-    String fieldId = readCommand(StringValueCommand.class).getValue();
-
-    Pair<Class<?>, String> data = clientOracle.getFieldName(clazz, fieldId);
-    Class<?> fieldDeclClass = data.getA();
-    String fieldName = data.getB();
-    ValueCommand value = readCommand(ValueCommand.class);
-    x.set(fieldDeclClass, fieldName, value);
-  }
-
-  /**
-   * Format is (int, setter...).
-   */
-  private void readSetters(Class<?> clazz, HasSetters x)
-      throws ClassNotFoundException {
-    int length = readCommand(IntValueCommand.class).getValue();
-    for (int i = 0; i < length; i++) {
-      readSetter(clazz, x);
-    }
-  }
-
-  /**
-   * Read through the next separator character.
-   */
-  private String token() {
-    StringBuilder sb = new StringBuilder();
-    char n = next();
-    while (n != RPC_SEPARATOR_CHAR) {
-      sb.append(n);
-      n = next();
-    }
-    return sb.toString();
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/server/WebModeClientOracle.java b/user/src/com/google/gwt/rpc/server/WebModeClientOracle.java
deleted file mode 100644
index 4e30fd7..0000000
--- a/user/src/com/google/gwt/rpc/server/WebModeClientOracle.java
+++ /dev/null
@@ -1,474 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.server;
-
-import com.google.gwt.rpc.client.ast.CommandSink;
-import com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.OutputStream;
-import java.io.Serializable;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.IdentityHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-
-/**
- * Encapsulates data about the structure of the client code.
- */
-public final class WebModeClientOracle extends ClientOracle implements
-    Serializable {
-  /*
-   * TODO: Don't use Java serialization.
-   */
-
-  /**
-   * A Builder object to create ClientOracles.
-   */
-  public static class Builder {
-    private WebModeClientOracle oracle = new WebModeClientOracle();
-
-    public void add(String jsIdent, String jsniIdent, String className,
-        String memberName, String runtimeTypeId, CastableTypeData castableTypeData) {
-
-      oracle.idents.add(jsIdent);
-      ClassData data = oracle.getClassData(className);
-
-      /*
-       * Don't overwrite castableTypeData and runtimeTypeId if already set.
-       * There are many versions of symbols for a given className,
-       * corresponding to the type of member fields, etc.,
-       * which don't have the runtimeTypeId or castableTypeData initialized.  Only
-       * the symbol data for the class itself has this info.
-       */
-      if (data.castableTypeData == null) {
-        data.runtimeTypeId = runtimeTypeId;
-        data.castableTypeData = castableTypeData;
-      }
-
-      if (jsniIdent == null || jsniIdent.length() == 0) {
-        data.typeName = className;
-        data.jsSymbolName = jsIdent;
-        oracle.seedNamesToClassData.put(jsIdent, data);
-        // Class.getName() with metadata disabled is "Class$S<seedId>"
-        oracle.seedIdsToClassData.put("S" + runtimeTypeId, data);
-        data.runtimeTypeId = runtimeTypeId;
-      } else {
-        if (jsniIdent.contains("(")) {
-          jsniIdent = jsniIdent.substring(jsniIdent.indexOf("::") + 2,
-              jsniIdent.indexOf(')') + 1);
-          data.methodJsniNamesToIdents.put(jsniIdent, jsIdent);
-        } else {
-          data.fieldIdentsToNames.put(jsIdent, memberName);
-          data.fieldNamesToIdents.put(memberName, jsIdent);
-        }
-      }
-    }
-
-    public WebModeClientOracle getOracle() {
-      WebModeClientOracle toReturn = oracle;
-      oracle = null;
-      return toReturn;
-    }
-
-    public void setSerializableFields(String className, List<String> fieldNames) {
-      ClassData data = oracle.getClassData(className);
-      assert data.serializableFields == null
-          || fieldNames.containsAll(data.serializableFields);
-      if (fieldNames.size() == 1) {
-        data.serializableFields = Collections.singletonList(fieldNames.get(0));
-      } else {
-        data.serializableFields = new ArrayList<String>(fieldNames);
-        Collections.sort(data.serializableFields);
-      }
-    }
-  }
-
-  /**
-   * A pair with extra data.
-   */
-  public static class Triple<A, B, C> extends Pair<A, B> {
-    private final C[] c;
-
-    public Triple(A a, B b, C... c) {
-      super(a, b);
-      this.c = c;
-    }
-
-    public C[] getC() {
-      return c;
-    }
-  }
-
-  private static class ClassData implements Serializable {
-    private static final long serialVersionUID = 6L;
-
-    public CastableTypeData castableTypeData;
-    public final Map<String, String> fieldIdentsToNames = new HashMap<String, String>();
-    public final Map<String, String> fieldNamesToIdents = new HashMap<String, String>();
-    public final Map<String, String> methodJsniNamesToIdents = new HashMap<String, String>();
-    public String runtimeTypeId;
-    public String jsSymbolName;
-    public List<String> serializableFields = Collections.emptyList();
-    public String typeName;
-  }
-
-  /**
-   * Defined to prevent simple changes from invalidating stored data.
-   *
-   * TODO: Use something other than Java serialization to store this type's
-   * data.
-   */
-  private static final long serialVersionUID = 3L;
-
-  /**
-   * Recreate a WebModeClientOracle based on the contents previously emitted by
-   * {@link #store}. The underlying format should be considered opaque.
-   */
-  public static WebModeClientOracle load(InputStream stream) throws IOException {
-    try {
-      stream = new GZIPInputStream(stream);
-      return readStreamAsObject(stream, WebModeClientOracle.class);
-    } catch (ClassNotFoundException e) {
-      throw new RuntimeException("Should never reach this", e);
-    }
-  }
-
-  static String jsniName(Class<?> clazz) {
-    if (clazz.isPrimitive()) {
-      if (clazz.equals(boolean.class)) {
-        return "Z";
-      } else if (clazz.equals(byte.class)) {
-        return "B";
-      } else if (clazz.equals(char.class)) {
-        return "C";
-      } else if (clazz.equals(short.class)) {
-        return "S";
-      } else if (clazz.equals(int.class)) {
-        return "I";
-      } else if (clazz.equals(long.class)) {
-        return "J";
-      } else if (clazz.equals(float.class)) {
-        return "F";
-      } else if (clazz.equals(double.class)) {
-        return "D";
-      }
-      throw new RuntimeException("Unhandled primitive type " + clazz.getName());
-    } else if (clazz.isArray()) {
-      return "[" + jsniName(clazz.getComponentType());
-    } else {
-      return "L" + clazz.getName().replace('.', '/') + ";";
-    }
-  }
-
-  /**
-   * Copied from dev.Utility class which is not part of servlet.jar.
-   */
-  private static <T> T readStreamAsObject(InputStream inputStream, Class<T> type)
-      throws ClassNotFoundException {
-    ObjectInputStream objectInputStream = null;
-    try {
-      objectInputStream = new ObjectInputStream(inputStream);
-      return type.cast(objectInputStream.readObject());
-    } catch (IOException e) {
-      return null;
-    } finally {
-      try {
-        objectInputStream.close();
-      } catch (IOException e) {
-        // Ignore
-      }
-    }
-  }
-
-  /**
-   * Serializes an object and writes it to a stream. Copied from Util to avoid
-   * dependecy on gwt-dev.
-   */
-  private static void writeObjectToStream(OutputStream stream,
-      Object... objects) throws IOException {
-    ObjectOutputStream objectStream = new ObjectOutputStream(stream);
-    for (Object object : objects) {
-      objectStream.writeObject(object);
-    }
-    objectStream.flush();
-  }
-
-  /**
-   * A map of class names to ClassData elements.
-   */
-  private final Map<String, ClassData> classData = new HashMap<String, ClassData>();
-
-  private final Set<String> idents = new HashSet<String>();
-
-  private final Map<String, ClassData> seedNamesToClassData = new HashMap<String, ClassData>();
-  private final Map<String, ClassData> seedIdsToClassData = new HashMap<String, ClassData>();
-
-  private transient Map<Class<?>, Field[]> operableFieldMap = new IdentityHashMap<Class<?>, Field[]>();
-
-  /**
-   * Instances of WebModeClientOracle are created either through the
-   * {@link Builder} class or via the {@link #load} method.
-   */
-  protected WebModeClientOracle() {
-  }
-
-  @Override
-  public CommandSink createCommandSink(OutputStream out) throws IOException {
-    return new WebModePayloadSink(this, out);
-  }
-
-  @Override
-  public String createUnusedIdent(String ident) {
-    while (idents.contains(ident)) {
-      ident += "$";
-    }
-    return ident;
-  }
-
-  @Override
-  public CastableTypeData getCastableTypeData(Class<?> clazz) {
-    while (clazz != null) {
-      CastableTypeData toReturn = getCastableTypeData(canonicalName(clazz));
-      if (toReturn != null) {
-        return toReturn;
-      }
-      clazz = clazz.getSuperclass();
-    }
-    return null;
-  }
-
-  @Override
-  public String getFieldId(Class<?> clazz, String fieldName) {
-    while (clazz != null) {
-      String className = clazz.getName();
-      ClassData data = getClassData(className);
-      if (data.fieldNamesToIdents.containsKey(fieldName)) {
-        return data.fieldNamesToIdents.get(fieldName);
-      }
-      clazz = clazz.getSuperclass();
-    }
-    return null;
-  }
-
-  @Override
-  public String getFieldId(Enum<?> value) {
-    return getFieldId(value.getDeclaringClass(), value.name());
-  }
-
-  @Override
-  public String getFieldId(String className, String fieldName) {
-    ClassData data = getClassData(className);
-    return data.fieldNamesToIdents.get(fieldName);
-  }
-
-  @Override
-  public Pair<Class<?>, String> getFieldName(Class<?> clazz, String fieldId) {
-    while (clazz != null) {
-      ClassData data = getClassData(clazz.getName());
-      String fieldName = data.fieldIdentsToNames.get(fieldId);
-      if (fieldName == null) {
-        clazz = clazz.getSuperclass();
-      } else {
-        return new Pair<Class<?>, String>(clazz, fieldName);
-      }
-    }
-    return null;
-  }
-
-  /**
-   * This will search superclasses.
-   */
-  @Override
-  public String getMethodId(Class<?> clazz, String methodName, Class<?>... args) {
-    while (clazz != null) {
-      String toReturn = getMethodId(clazz.getName(), methodName, args);
-      if (toReturn != null) {
-        return toReturn;
-      }
-      clazz = clazz.getSuperclass();
-    }
-    return null;
-  }
-
-  @Override
-  public String getMethodId(String className, String methodName,
-      String... jsniArgTypes) {
-    StringBuilder sb = new StringBuilder();
-    sb.append(methodName);
-    sb.append("(");
-    for (String jsniArg : jsniArgTypes) {
-      sb.append(jsniArg);
-    }
-    sb.append(")");
-
-    ClassData data = getClassData(className);
-    String jsIdent = data.methodJsniNamesToIdents.get(sb.toString());
-    return jsIdent;
-  }
-
-  @Override
-  public Field[] getOperableFields(Class<?> clazz) {
-    Field[] toReturn;
-    synchronized (operableFieldMap) {
-      toReturn = operableFieldMap.get(clazz);
-    }
-    if (toReturn != null) {
-      return toReturn;
-    }
-
-    ClassData data = getClassData(clazz.getName());
-    toReturn = new Field[data.serializableFields.size()];
-    for (int i = 0; i < toReturn.length; i++) {
-      String fieldName = data.serializableFields.get(i);
-      try {
-        toReturn[i] = clazz.getDeclaredField(fieldName);
-      } catch (SecurityException e) {
-        throw new IncompatibleRemoteServiceException("Cannot access field "
-            + fieldName, e);
-      } catch (NoSuchFieldException e) {
-        throw new IncompatibleRemoteServiceException("No field " + fieldName, e);
-      }
-    }
-
-    synchronized (operableFieldMap) {
-      operableFieldMap.put(clazz, toReturn);
-    }
-    return toReturn;
-  }
-
-  @Override
-  public String getRuntimeTypeId(Class<?> clazz) {
-    while (clazz != null) {
-      String toReturn = getRuntimeTypeId(canonicalName(clazz));
-      if (toReturn != null) {
-        return toReturn;
-      }
-      clazz = clazz.getSuperclass();
-    }
-    return null;
-  }
-
-  @Override
-  public String getJsSymbolName(Class<?> clazz) {
-    ClassData data = getClassData(clazz.getName());
-    return data.jsSymbolName;
-  }
-
-  @Override
-  public String getTypeName(String seedName) {
-    // TODO: Decide how to handle the no-metadata case
-    ClassData data = null;
-    if (seedName.startsWith("Class$")) {
-      seedName = seedName.substring(6);
-      data = seedIdsToClassData.get(seedName);
-    }
-
-    if (data == null) {
-      data = seedNamesToClassData.get(seedName);
-    }
-    return data == null ? null : data.typeName;
-  }
-
-  @Override
-  public boolean isScript() {
-    return true;
-  }
-
-  /**
-   * Write the state of the WebModeClientOracle into an OutputStream. The
-   * underlying format should be considered opaque.
-   */
-  public void store(OutputStream stream) throws IOException {
-    stream = new GZIPOutputStream(stream);
-    writeObjectToStream(stream, this);
-    stream.close();
-  }
-
-  private String canonicalName(Class<?> clazz) {
-    if (clazz.isArray()) {
-      Class<?> leafType = clazz;
-      do {
-        leafType = leafType.getComponentType();
-      } while (leafType.isArray());
-
-      Class<?> enclosing = leafType.getEnclosingClass();
-      if (enclosing != null) {
-        // com.foo.Enclosing$Name[]
-        return canonicalName(enclosing) + "$" + clazz.getSimpleName();
-      } else if (leafType.getPackage() == null) {
-        // Name0[
-        return clazz.getSimpleName();
-      } else {
-        // com.foo.Name[]
-        return leafType.getPackage().getName() + "." + clazz.getSimpleName();
-      }
-    } else {
-      return clazz.getName();
-    }
-  }
-
-  private CastableTypeData getCastableTypeData(String className) {
-    ClassData data = getClassData(className);
-    return data.castableTypeData;
-  }
-
-  private ClassData getClassData(String className) {
-    ClassData toReturn = classData.get(className);
-    if (toReturn == null) {
-      toReturn = new ClassData();
-      classData.put(className, toReturn);
-    }
-    return toReturn;
-  }
-
-  /**
-   * This will not search superclasses and is used to access magic GWT types
-   * like Array.
-   */
-  private String getMethodId(String className, String methodName,
-      Class<?>... args) {
-    String[] jsniArgTypes = new String[args.length];
-    for (int i = 0, j = args.length; i < j; i++) {
-      jsniArgTypes[i] = jsniName(args[i]);
-    }
-    return getMethodId(className, methodName, jsniArgTypes);
-  }
-
-  private String getRuntimeTypeId(String className) {
-    ClassData data = getClassData(className);
-    return data.runtimeTypeId;
-  }
-
-  /**
-   * Reinitialize the <code>operableFieldMap</code> field when the
-   * WebModeClientOracle is reloaded.
-   */
-  private Object readResolve() {
-    operableFieldMap = new HashMap<Class<?>, Field[]>();
-    return this;
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/server/WebModePayloadSink.java b/user/src/com/google/gwt/rpc/server/WebModePayloadSink.java
deleted file mode 100644
index 2080855..0000000
--- a/user/src/com/google/gwt/rpc/server/WebModePayloadSink.java
+++ /dev/null
@@ -1,956 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.server;
-
-import static com.google.gwt.rpc.client.impl.CommandClientSerializationStreamReader.BACKREF_IDENT;
-
-import com.google.gwt.rpc.client.ast.ArrayValueCommand;
-import com.google.gwt.rpc.client.ast.BooleanValueCommand;
-import com.google.gwt.rpc.client.ast.ByteValueCommand;
-import com.google.gwt.rpc.client.ast.CharValueCommand;
-import com.google.gwt.rpc.client.ast.CommandSink;
-import com.google.gwt.rpc.client.ast.DoubleValueCommand;
-import com.google.gwt.rpc.client.ast.EnumValueCommand;
-import com.google.gwt.rpc.client.ast.FloatValueCommand;
-import com.google.gwt.rpc.client.ast.InstantiateCommand;
-import com.google.gwt.rpc.client.ast.IntValueCommand;
-import com.google.gwt.rpc.client.ast.InvokeCustomFieldSerializerCommand;
-import com.google.gwt.rpc.client.ast.LongValueCommand;
-import com.google.gwt.rpc.client.ast.NullValueCommand;
-import com.google.gwt.rpc.client.ast.ReturnCommand;
-import com.google.gwt.rpc.client.ast.RpcCommand;
-import com.google.gwt.rpc.client.ast.RpcCommandVisitor;
-import com.google.gwt.rpc.client.ast.SetCommand;
-import com.google.gwt.rpc.client.ast.ShortValueCommand;
-import com.google.gwt.rpc.client.ast.StringValueCommand;
-import com.google.gwt.rpc.client.ast.ThrowCommand;
-import com.google.gwt.rpc.client.ast.ValueCommand;
-import com.google.gwt.rpc.client.impl.CommandClientSerializationStreamReader;
-import com.google.gwt.rpc.client.impl.EscapeUtil;
-import com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException;
-import com.google.gwt.user.client.rpc.SerializationException;
-import com.google.gwt.user.client.rpc.SerializationStreamReader;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-import java.lang.reflect.Array;
-import java.nio.BufferOverflowException;
-import java.nio.ByteBuffer;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.IdentityHashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.Stack;
-import java.util.logging.Logger;
-
-/**
- * A CommandSink that will generate a web-mode payload.
- *
- * ONE-SHOT EVAL (no incremental evaluation, must call finish())
- */
-public class WebModePayloadSink extends CommandSink {
-
-  private class BackRefAssigner extends RpcCommandVisitor {
-    private final Set<ValueCommand> seenOnce = new HashSet<ValueCommand>();
-
-    @Override
-    public void endVisit(InvokeCustomFieldSerializerCommand x, Context ctx) {
-      // We always need a backref for custom serializers
-      makeBackRef(x);
-    }
-
-    @Override
-    public void endVisit(LongValueCommand x, Context ctx) {
-      process(x);
-    }
-
-    @Override
-    public void endVisit(StringValueCommand x, Context ctx) {
-      process(x);
-    }
-
-    @Override
-    public boolean visit(ArrayValueCommand x, Context ctx) {
-      return process(x);
-    }
-
-    @Override
-    public boolean visit(InstantiateCommand x, Context ctx) {
-      return process(x);
-    }
-
-    private boolean process(ValueCommand x) {
-      if (!seenOnce.add(x)) {
-        makeBackRef(x);
-        return false;
-      }
-      return true;
-    }
-  }
-  private class PayloadVisitor extends RpcCommandVisitor {
-    private final Map<Class<?>, byte[]> constructorFunctions = new IdentityHashMap<Class<?>, byte[]>();
-    private final Map<RpcCommand, ByteBuffer> commandBuffers = new IdentityHashMap<RpcCommand, ByteBuffer>();
-    private ByteBuffer currentBuffer;
-    private final Stack<RpcCommand> stack = new Stack<RpcCommand>();
-    private final Set<RpcCommand> started = new HashSet<RpcCommand>();
-
-    @Override
-    public void endVisit(BooleanValueCommand x, Context ctx) {
-      if (x.getValue()) {
-        one();
-      } else {
-        zero();
-      }
-    }
-
-    @Override
-    public void endVisit(ByteValueCommand x, Context ctx) {
-      push(String.valueOf(x.getValue()));
-    }
-
-    @Override
-    public void endVisit(CharValueCommand x, Context ctx) {
-      push(String.valueOf((int) x.getValue()));
-    }
-
-    @Override
-    public void endVisit(DoubleValueCommand x, Context ctx) {
-      push(String.valueOf(x.getValue()));
-    }
-
-    @Override
-    public void endVisit(EnumValueCommand x, Context ctx) {
-      String fieldName = clientOracle.getFieldId(x.getValue());
-      if (fieldName == null) {
-        throw new IncompatibleRemoteServiceException(
-            "The client cannot accept " + x.getValue().name());
-      }
-      String clinitName = clientOracle.getMethodId(
-          x.getValue().getDeclaringClass(), "$clinit");
-      assert clinitName != null;
-
-      // (clinit(), A)
-      lparen();
-      push(clinitName);
-      lparen();
-      rparen();
-      comma();
-      push(fieldName);
-      rparen();
-    }
-
-    @Override
-    public void endVisit(FloatValueCommand x, Context ctx) {
-      push(String.valueOf((double) x.getValue()));
-    }
-
-    @Override
-    public void endVisit(IntValueCommand x, Context ctx) {
-      push(String.valueOf(x.getValue()));
-    }
-
-    @Override
-    public void endVisit(LongValueCommand x, Context ctx) {
-      // TODO (rice): use backwards-compatible wire format?
-      long fieldValue = x.getValue();
-
-      /*
-       * Client code represents longs internally as an Object with numeric
-       * properties l, m, and h. In order to make serialization of longs faster,
-       * we'll send the component parts so that the value can be directly
-       * reconstituted on the client.
-       */
-      int l = (int) (fieldValue & 0x3fffff);
-      int m = (int) ((fieldValue >> 22) & 0x3fffff);
-      int h = (int) ((fieldValue >> 44) & 0xfffff);
-      // CHECKSTYLE_OFF
-      push("{l:" + l + ",m:" + m + ",h:" + h + "}");
-      // CHECKSTYLE_ON
-    }
-
-    @Override
-    public void endVisit(NullValueCommand x, Context ctx) {
-      _null();
-    }
-
-    @Override
-    public void endVisit(ShortValueCommand x, Context ctx) {
-      push(String.valueOf(x.getValue()));
-    }
-
-    @Override
-    public void endVisit(StringValueCommand x, Context ctx) {
-      if (hasBackRef(x)) {
-        if (!isStarted(x)) {
-          String escaped = EscapeUtil.escape(x.getValue());
-          push(begin(x));
-          eq();
-          quote();
-          push(escaped);
-          quote();
-          commit(x, false);
-        } else {
-          push(makeBackRef(x));
-        }
-      } else {
-        String escaped = EscapeUtil.escape(x.getValue());
-        quote();
-        push(escaped);
-        quote();
-      }
-    }
-
-    @Override
-    public boolean visit(ArrayValueCommand x, Context ctx) {
-      boolean hasBackRef = hasBackRef(x);
-      if (hasBackRef && isStarted(x)) {
-        push(makeBackRef(x));
-        return false;
-      }
-
-      // constructorFunction(x = [value,value,value])
-      byte[] currentBackRef = begin(x);
-      push(constructorFunction(x));
-      lparen();
-      if (hasBackRef) {
-        push(currentBackRef);
-        eq();
-      }
-      lbracket();
-      for (Iterator<ValueCommand> it = x.getComponentValues().iterator(); it.hasNext();) {
-        accept(it.next());
-        if (it.hasNext()) {
-          comma();
-        }
-      }
-      rbracket();
-      rparen();
-      commit(x, false);
-      if (!hasBackRef) {
-        forget(x);
-      }
-      return false;
-    }
-
-    @Override
-    public boolean visit(InstantiateCommand x, Context ctx) {
-      boolean hasBackRef = hasBackRef(x);
-      if (hasBackRef && isStarted(x)) {
-        push(makeBackRef(x));
-        return false;
-      }
-
-      byte[] currentBackRef = begin(x);
-      byte[] constructorFunction = constructorFunction(x);
-
-      String getSeedFunc = clientOracle.getMethodId("java.lang.Class",
-          "getSeedFunction", "Ljava/lang/Class;");
-      String classLitId = clientOracle.getFieldId(
-               "com.google.gwt.lang.ClassLiteralHolder",
-               getJavahSignatureName(x.getTargetClass()) + "_classLit");
-           assert classLitId != null : "No class literal for "
-               + x.getTargetClass().getName();
-
-      /*
-       * If we need to maintain a backreference to the object, it's established
-       * in the first argument instead of using the return value of the
-       * constructorFunction. This is done in case one of the fields should
-       * require a reference to the object that is currently being constructed.
-       */
-      // constructorFunctionFoo(x = new (classLit.getSeedFunction()), field1, field2)
-      push(constructorFunction);
-      lparen();
-      if (hasBackRef) {
-        push(currentBackRef);
-        eq();
-      }
-      _new();
-      lparen();
-      push(getSeedFunc);
-      lparen();
-      push(classLitId);
-      rparen();
-      rparen();
-      for (SetCommand setter : x.getSetters()) {
-        comma();
-        accept(setter.getValue());
-      }
-      rparen();
-
-      commit(x, false);
-      if (!hasBackRef) {
-        forget(x);
-      }
-      return false;
-    }
-
-    @Override
-    public boolean visit(InvokeCustomFieldSerializerCommand x, Context ctx) {
-      if (isStarted(x)) {
-        push(makeBackRef(x));
-        return false;
-      }
-
-      // ( backref = instantiate(), deserialize(), setter, ..., backref )
-      byte[] currentBackRef = begin(x);
-
-      lparen();
-
-      InstantiateCommand makeReader = new InstantiateCommand(
-          CommandClientSerializationStreamReader.class);
-      /*
-       * Ensure that the reader will stick around for both instantiate and
-       * deserialize calls.
-       */
-      makeBackRef(makeReader);
-
-      ArrayValueCommand payload = new ArrayValueCommand(Object.class);
-      for (ValueCommand value : x.getValues()) {
-        payload.add(value);
-      }
-      makeReader.set(CommandClientSerializationStreamReader.class, "payload",
-          payload);
-
-      String instantiateIdent = clientOracle.getMethodId(
-          x.getSerializerClass(), "instantiate",
-          SerializationStreamReader.class);
-
-      // x = new Foo,
-      // x = instantiate(reader),
-      push(currentBackRef);
-      eq();
-      if (instantiateIdent == null) {
-        // No instantiate method, we'll have to invoke the constructor
-
-        // new Foo()
-        String constructorMethodName;
-        if (x.getTargetClass().getEnclosingClass() == null) {
-          constructorMethodName = x.getTargetClass().getSimpleName();
-        } else {
-          String name = x.getTargetClass().getName();
-          constructorMethodName = name.substring(name.lastIndexOf('.') + 1);
-        }
-
-        String constructorIdent = clientOracle.getMethodId(x.getTargetClass(),
-            constructorMethodName);
-        assert constructorIdent != null : "constructorIdent "
-            + constructorMethodName;
-
-        // new constructor,
-        _new();
-        push(constructorIdent);
-        comma();
-      } else {
-        // instantiate(reader),
-        push(instantiateIdent);
-        lparen();
-        accept(makeReader);
-        rparen();
-        comma();
-      }
-
-      // Call the deserialize method if it exists
-      String deserializeIdent = clientOracle.getMethodId(
-          x.getSerializerClass(), "deserialize",
-          SerializationStreamReader.class, x.getManuallySerializedType());
-      if (deserializeIdent != null) {
-        // deserialize(reader, obj),
-        push(deserializeIdent);
-        lparen();
-        accept(makeReader);
-        comma();
-        push(currentBackRef);
-        rparen();
-        comma();
-      }
-
-      // If there are extra fields, set them
-      for (SetCommand setter : x.getSetters()) {
-        accept(setter);
-        comma();
-      }
-
-      push(currentBackRef);
-      rparen();
-      commit(x, false);
-      forget(makeReader);
-
-      return false;
-    }
-
-    @Override
-    public boolean visit(ReturnCommand x, Context ctx) {
-      int size = x.getValues().size();
-
-      begin(x);
-      _return();
-
-      // return [a,b,c];
-      lbracket();
-      for (int i = 0; i < size; i++) {
-        accept(x.getValues().get(i));
-        if (i < size - 1) {
-          comma();
-        }
-      }
-      rbracket();
-
-      semi();
-      commit(x);
-
-      return false;
-    }
-
-    @Override
-    public boolean visit(SetCommand x, Context ctx) {
-      String fieldName = clientOracle.getFieldId(x.getFieldDeclClass(),
-          x.getField());
-
-      if (fieldName == null) {
-        // TODO: What does it mean if the client doesn't have a field?
-        throw new IncompatibleRemoteServiceException(
-            "The client does not have field " + x.getField() + " in type "
-                + x.getFieldDeclClass().getName());
-      }
-
-      // i[3].foo = bar
-      push(makeBackRef((ValueCommand) stack.peek()));
-      dot();
-      push(fieldName);
-      eq();
-      accept(x.getValue());
-
-      return false;
-    }
-
-    /**
-     * In order to improve robustness of the payload, we perform the throw from
-     * within a function.
-     */
-    @Override
-    public boolean visit(ThrowCommand x, Context ctx) {
-      // throw foo;
-      begin(x);
-      _throw();
-
-      assert x.getValues().size() == 1;
-      accept(x.getValues());
-
-      semi();
-      commit(x);
-
-      return false;
-    }
-
-    // CHECKSTYLE_OFF
-
-    private void _new() {
-      push(NEW_BYTES);
-    }
-
-    private void _null() {
-      push(NULL_BYTES);
-    }
-
-    private void _return() {
-      push(RETURN_BYTES);
-    }
-
-    private void _throw() {
-      push(THROW_BYTES);
-    }
-
-    // CHECKSTYLE_ON
-
-    private void begin(RpcCommand x) {
-      assert !commandBuffers.containsKey(x) : "ValueCommand already active";
-
-      started.add(x);
-      stack.push(x);
-      currentBuffer = ByteBuffer.allocate(DEFAULT_BUFFER_SIZE);
-      commandBuffers.put(x, currentBuffer);
-    }
-
-    private byte[] begin(ValueCommand x) {
-      begin((RpcCommand) x);
-      return makeBackRef(x);
-    }
-
-    private void comma() {
-      push(COMMA_BYTES);
-      spaceOpt();
-    }
-
-    private void commit(RpcCommand x) {
-      commit(x, true);
-    }
-
-    private void commit(RpcCommand x, boolean send) {
-      if (stack.pop() != x) {
-        throw new IllegalStateException("Did not pop expected command");
-      }
-
-      // Don't need to retain any internal data
-      x.clear();
-
-      ByteBuffer sb = commandBuffers.remove(x);
-      assert sb != null : "No ByteBuffer for " + x;
-
-      if (!stack.isEmpty()) {
-        currentBuffer = commandBuffers.get(stack.peek());
-        assert currentBuffer != null : "Could not restore currentBuilder";
-      } else {
-        currentBuffer = null;
-      }
-
-      sb.limit(sb.position()).rewind();
-
-      if (send) {
-        try {
-          send(sb);
-        } catch (SerializationException e) {
-          halt(e);
-        }
-      } else {
-        push(sb);
-      }
-    }
-
-    private byte[] constructorFunction(ArrayValueCommand x) {
-      Class<?> targetClass = Array.newInstance(x.getComponentType(), 0).getClass();
-      byte[] functionName = constructorFunctions.get(targetClass);
-      if (functionName != null) {
-        return functionName;
-      }
-
-      String initValuesId = clientOracle.getMethodId(
-          "com.google.gwt.lang.Array", "initValues", "Ljava/lang/Class;",
-          "Lcom/google/gwt/core/client/JavaScriptObject;", "I",
-          "Lcom/google/gwt/lang/Array;");
-      assert initValuesId != null : "Could not find initValues";
-
-      String classLitId = clientOracle.getFieldId(
-          "com.google.gwt.lang.ClassLiteralHolder",
-          getJavahSignatureName(x.getComponentType()) + "_classLit");
-      assert classLitId != null : "No class literal for "
-          + x.getComponentType().getName();
-
-      functionName = getBytes(clientOracle.createUnusedIdent(classLitId));
-      constructorFunctions.put(targetClass, functionName);
-
-      /*
-       * Set the castableTypeData and queryIds to exact values,
-       * or fall back to acting like a plain Object[] array.
-       */
-      CastableTypeData castableTypeData = clientOracle.getCastableTypeData(targetClass);
-      if (castableTypeData == null) {
-        castableTypeData = clientOracle.getCastableTypeData(Object[].class);
-      }
-
-      String runtimeTypeId = clientOracle.getRuntimeTypeId(x.getComponentType());
-      if (runtimeTypeId == null) {
-        runtimeTypeId = clientOracle.getRuntimeTypeId(Object.class);
-      }
-
-      byte[] ident = getBytes("_0");
-
-      // function foo(_0) {return initValues(classLit, castableTypeData, runtimeTypeId, _0)}
-      function();
-      push(functionName);
-      lparen();
-      push(ident);
-      rparen();
-      lbrace();
-      _return();
-      push(initValuesId);
-      lparen();
-      push(classLitId);
-      comma();
-      push(castableTypeData.toJs());
-      comma();
-      push(String.valueOf(runtimeTypeId));
-      comma();
-      push(ident);
-      rparen();
-      rbrace();
-
-      flush(x);
-
-      return functionName;
-    }
-
-    private byte[] constructorFunction(InstantiateCommand x) {
-      Class<?> targetClass = x.getTargetClass();
-      byte[] functionName = constructorFunctions.get(targetClass);
-      if (functionName != null) {
-        return functionName;
-      }
-
-      String seedName = clientOracle.getJsSymbolName(targetClass);
-      assert seedName != null : "TypeOverride failed to rescue "
-          + targetClass.getName();
-      functionName = getBytes(clientOracle.createUnusedIdent(seedName));
-      constructorFunctions.put(targetClass, functionName);
-      byte[][] idents = new byte[x.getSetters().size() + 1][];
-      for (int i = 0, j = idents.length; i < j; i++) {
-        idents[i] = getBytes("_" + i);
-      }
-
-      // function foo(_0, _1, _2) {_0.a = _1; _0.b=_2; return _0}
-      function();
-      push(functionName);
-      lparen();
-      for (int i = 0, j = idents.length; i < j; i++) {
-        push(idents[i]);
-        if (i < j - 1) {
-          comma();
-        }
-      }
-      rparen();
-      lbrace();
-      newlineOpt();
-      for (int i = 1, j = idents.length; i < j; i++) {
-        SetCommand setter = x.getSetters().get(i - 1);
-        String fieldIdent = clientOracle.getFieldId(setter.getFieldDeclClass(),
-            setter.getField());
-
-        if (fieldIdent != null) {
-          // _0.foo = bar;
-          spaceOpt();
-          push(idents[0]);
-          dot();
-          push(fieldIdent);
-          eq();
-          push(idents[i]);
-          semi();
-        } else {
-          String fieldName = setter.getFieldDeclClass().getName()
-              + "." + setter.getField();
-          if (!skippedFields.contains(fieldName)) {
-            skippedFields.add(fieldName);
-            log.warning("Skipped sending the field " + fieldName + " because "
-                + "it's unused in the client. It should either be changed to "
-                + "transient or removed.");
-          }
-        }
-      }
-      spaceOpt();
-      _return();
-      push(idents[0]);
-      rbrace();
-      newlineOpt();
-
-      flush(x);
-
-      return functionName;
-    }
-
-    private void dot() {
-      push(DOT_BYTES);
-    }
-
-    private void eq() {
-      spaceOpt();
-      push(EQ_BYTES);
-      spaceOpt();
-    }
-
-    /**
-     * Cause an immediate write of accumulated output for a command. This is
-     * used primarily for writing object allocations
-     */
-    private void flush(RpcCommand x) {
-      ByteBuffer sb = commandBuffers.get(x);
-      if (sb == null || sb.position() == 0) {
-        return;
-      }
-
-      sb.limit(sb.position()).rewind();
-      try {
-        send(sb);
-      } catch (SerializationException e) {
-        halt(e);
-      }
-      sb.clear();
-    }
-
-    private void function() {
-      newlineOpt();
-      push(FUNCTION_BYTES);
-    }
-
-    /**
-     * Keep in sync with JReferenceType implementations.
-     */
-    private String getJavahSignatureName(Class<?> clazz) {
-      if (clazz.isArray()) {
-        Class<?> leafType = clazz;
-        int dims = 0;
-        do {
-          dims++;
-          leafType = leafType.getComponentType();
-        } while (leafType.getComponentType() != null);
-        assert dims > 0;
-        // leafType cannot be null here
-
-        String s = getJavahSignatureName(leafType);
-        for (int i = 0; i < dims; ++i) {
-          s = "_3" + s;
-        }
-        return s;
-      } else if (clazz.isPrimitive()) {
-        return WebModeClientOracle.jsniName(clazz);
-      } else {
-        String name = clazz.getName();
-        return "L" + name.replaceAll("_", "_1").replace('.', '_') + "_2";
-      }
-    }
-
-    private boolean isStarted(RpcCommand x) {
-      return started.contains(x);
-    }
-
-    private void lbrace() {
-      push(LBRACE_BYTES);
-    }
-
-    private void lbracket() {
-      push(LBRACKET_BYTES);
-    }
-
-    private void lparen() {
-      push(LPAREN_BYTES);
-    }
-
-    private void newlineOpt() {
-      pushOpt(NEWLINE_BYTES);
-    }
-
-    private void one() {
-      push(ONE_BYTES);
-    }
-
-    /**
-     * Add data to the current command's serialization output.
-     */
-    private void push(byte[] bytes) {
-      assert currentBuffer != null : "Must call begin(RpcCommand) first";
-      try {
-        currentBuffer.put(bytes);
-      } catch (BufferOverflowException e) {
-        reallocateCurrentBuffer(bytes.length);
-        currentBuffer.put(bytes);
-      }
-    }
-
-    /**
-     * Add data to the current command's serialization output.
-     */
-    private void push(ByteBuffer buffer) {
-      assert currentBuffer != null : "Must call begin(RpcCommand) first";
-      try {
-        currentBuffer.put(buffer);
-      } catch (BufferOverflowException e) {
-        reallocateCurrentBuffer(buffer.remaining());
-        currentBuffer.put(buffer);
-      }
-    }
-
-    /**
-     * Add data to the current command's serialization output.
-     */
-    private void push(String s) {
-      push(getBytes(s));
-    }
-
-    /**
-     * Optionally add data to the current command's serialization output.
-     */
-    private void pushOpt(byte[] x) {
-      if (PRETTY) {
-        push(x);
-      }
-    }
-
-    private void quote() {
-      push(QUOTE_BYTES);
-    }
-
-    private void rbrace() {
-      push(RBRACE_BYTES);
-    }
-
-    private void rbracket() {
-      push(RBRACKET_BYTES);
-    }
-
-    private void reallocateCurrentBuffer(int bytesNeeded) {
-      // Allocate a new buffer of sufficient size
-      int newSize = currentBuffer.capacity()
-          + Math.max(2 * bytesNeeded, currentBuffer.capacity());
-      ByteBuffer newBuffer = ByteBuffer.allocate(newSize);
-
-      // Copy the old buffer over
-      currentBuffer.limit(currentBuffer.position()).rewind();
-      newBuffer.put(currentBuffer);
-
-      // Reassign the current buffer
-      assert commandBuffers.get(stack.peek()) == currentBuffer;
-      commandBuffers.put(stack.peek(), newBuffer);
-      currentBuffer = newBuffer;
-    }
-
-    private void rparen() {
-      push(RPAREN_BYTES);
-    }
-
-    private void semi() {
-      push(SEMI_BYTES);
-      newlineOpt();
-    }
-
-    private void spaceOpt() {
-      pushOpt(SPACE_BYTES);
-    }
-
-    private void zero() {
-      push(ZERO_BYTES);
-    }
-  }
-
-  private static final Logger log = Logger.getLogger(WebModePayloadSink.class.getName());
-  private static final Set<String> skippedFields = new HashSet<String>();
-
-  /*
-   * Instead of converting these commonly-used strings to bytes every time we
-   * want to write them to the output, we'll simply create a fixed pool.
-   */
-  static final byte[] COMMA_BYTES = getBytes(",");
-  static final byte[] DOT_BYTES = getBytes(".");
-  static final byte[] EQ_BYTES = getBytes("=");
-  static final byte[] FUNCTION_BYTES = getBytes("function ");
-  static final byte[] LBRACE_BYTES = getBytes("{");
-  static final byte[] LBRACKET_BYTES = getBytes("[");
-  static final byte[] LPAREN_BYTES = getBytes("(");
-  static final byte[] NEW_BYTES = getBytes("new ");
-  static final byte[] NEWLINE_BYTES = getBytes("\n");
-  static final byte[] NULL_BYTES = getBytes("null");
-  static final byte[] ONE_BYTES = getBytes("1");
-  static final byte[] QUOTE_BYTES = getBytes("\"");
-  static final byte[] RBRACE_BYTES = getBytes("}");
-  static final byte[] RBRACKET_BYTES = getBytes("]");
-  static final byte[] RETURN_BYTES = getBytes("return ");
-  static final byte[] RPAREN_BYTES = getBytes(")");
-  static final byte[] SPACE_BYTES = getBytes(" ");
-  static final byte[] SEMI_BYTES = getBytes(";");
-  static final byte[] THROW_BYTES = getBytes("throw ");
-  static final byte[] ZERO_BYTES = getBytes("0");
-
-  /**
-   * A runtime flag to indicate that the generated output should be made to be
-   * human-readable.
-   */
-  static final boolean PRETTY = Boolean.getBoolean("gwt.rpc.pretty");
-
-  private static final int DEFAULT_BUFFER_SIZE = 256;
-
-  static byte[] getBytes(String x) {
-    try {
-      return x.getBytes("UTF-8");
-    } catch (UnsupportedEncodingException e) {
-      throw new RuntimeException("UTF-8 is unsupported", e);
-    }
-  }
-
-  private final ClientOracle clientOracle;
-  private boolean finished = false;
-  private final OutputStream out;
-  private final Map<ValueCommand, byte[]> valueBackRefs = new HashMap<ValueCommand, byte[]>();
-  private final PayloadVisitor visitor = new PayloadVisitor();
-
-  private Stack<byte[]> freeBackRefs = new Stack<byte[]>();
-
-  public WebModePayloadSink(ClientOracle clientOracle, OutputStream out) {
-    this.clientOracle = clientOracle;
-    this.out = out;
-  }
-
-  @Override
-  public void accept(RpcCommand command) throws SerializationException {
-    if (finished) {
-      throw new IllegalStateException("finish() has already been called");
-    }
-
-    new BackRefAssigner().accept(command);
-
-    if (command instanceof ValueCommand) {
-      makeBackRef((ValueCommand) command);
-    }
-    visitor.accept(command);
-  }
-
-  /**
-   * The caller must close the stream.
-   */
-  @Override
-  public void finish() throws SerializationException {
-    finished = true;
-  }
-
-  void forget(ValueCommand x) {
-    assert valueBackRefs.containsKey(x);
-    freeBackRefs.push(valueBackRefs.remove(x));
-  }
-
-  boolean hasBackRef(ValueCommand x) {
-    return valueBackRefs.containsKey(x);
-  }
-
-  byte[] makeBackRef(ValueCommand x) {
-    byte[] toReturn = valueBackRefs.get(x);
-    if (toReturn == null) {
-      if (freeBackRefs.isEmpty()) {
-        int idx = valueBackRefs.size();
-        toReturn = getBytes(BACKREF_IDENT + "._"
-            + Integer.toString(idx, Character.MAX_RADIX));
-      } else {
-        toReturn = freeBackRefs.pop();
-      }
-      valueBackRefs.put(x, toReturn);
-    }
-    return toReturn;
-  }
-
-  void send(ByteBuffer x) throws SerializationException {
-    try {
-      assert x.hasArray();
-      out.write(x.array(), x.position(), x.limit());
-    } catch (IOException e) {
-      throw new SerializationException("Could not send data", e);
-    }
-  }
-
-  void send(String x) throws SerializationException {
-    try {
-      out.write(getBytes(x));
-    } catch (IOException e) {
-      throw new SerializationException("Could not send data", e);
-    }
-  }
-}
diff --git a/user/src/com/google/gwt/rpc/server/package-info.java b/user/src/com/google/gwt/rpc/server/package-info.java
deleted file mode 100644
index fee6f54..0000000
--- a/user/src/com/google/gwt/rpc/server/package-info.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-/**
- * Contains the server-side APIs for deRPC.
- */
-@com.google.gwt.util.PreventSpuriousRebuilds
-package com.google.gwt.rpc.server;
diff --git a/user/src/com/google/gwt/user/server/rpc/HybridServiceServlet.java b/user/src/com/google/gwt/user/server/rpc/HybridServiceServlet.java
deleted file mode 100644
index 16fbe7a..0000000
--- a/user/src/com/google/gwt/user/server/rpc/HybridServiceServlet.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.user.server.rpc;
-
-import com.google.gwt.rpc.server.ClientOracle;
-import com.google.gwt.rpc.server.RpcServlet;
-import com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException;
-import com.google.gwt.user.client.rpc.RpcTokenException;
-import com.google.gwt.user.client.rpc.SerializationException;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * EXPERIMENTAL and subject to change. Do not use this in production code.
- * <p>
- * This RemoteServiceServlet provides support for both legacy and deRPC clients
- * at the cost of additional runtime overhead and API complexity.
- */
-public class HybridServiceServlet extends RpcServlet implements
-    SerializationPolicyProvider {
-
-  /**
-   * Records permutations for which {@link #getClientOracle()} should return
-   * <code>null</code>.
-   */
-  private final Set<String> legacyPermutations = new HashSet<String>();
-
-  /**
-   * A cache of moduleBaseURL and serialization policy strong name to
-   * {@link SerializationPolicy}.
-   */
-  private final Map<String, SerializationPolicy> serializationPolicyCache = new HashMap<String, SerializationPolicy>();
-
-  /**
-   * This method will return <code>null</code> instead of throwing an exception.
-   */
-  @Override
-  public ClientOracle getClientOracle() {
-    String strongName = getPermutationStrongName();
-    if (legacyPermutations.contains(strongName)) {
-      return null;
-    }
-    try {
-      return super.getClientOracle();
-    } catch (SerializationException e) {
-      legacyPermutations.add(strongName);
-      return null;
-    }
-  }
-
-  public final SerializationPolicy getSerializationPolicy(String moduleBaseURL,
-      String strongName) {
-
-    SerializationPolicy serializationPolicy = getCachedSerializationPolicy(
-        moduleBaseURL, strongName);
-    if (serializationPolicy != null) {
-      return serializationPolicy;
-    }
-
-    serializationPolicy = doGetSerializationPolicy(getThreadLocalRequest(),
-        moduleBaseURL, strongName);
-
-    if (serializationPolicy == null) {
-      // Failed to get the requested serialization policy; use the default
-      log(
-          "WARNING: Failed to get the SerializationPolicy '"
-              + strongName
-              + "' for module '"
-              + moduleBaseURL
-              + "'; a legacy, 1.3.3 compatible, serialization policy will be used.  You may experience SerializationExceptions as a result.");
-      serializationPolicy = RPC.getDefaultSerializationPolicy();
-    }
-
-    // This could cache null or an actual instance. Either way we will not
-    // attempt to lookup the policy again.
-    putCachedSerializationPolicy(moduleBaseURL, strongName, serializationPolicy);
-
-    return serializationPolicy;
-  }
-
-  @Override
-  public void processCall(ClientOracle clientOracle, String payload,
-      OutputStream stream) throws SerializationException {
-
-    if (!Character.isDigit(payload.charAt(0))) {
-      // Picking up null returned from getClientOracle()
-      if (clientOracle == null) {
-        throw new SerializationException("No ClientOracle for permutation "
-            + getPermutationStrongName());
-      }
-      super.processCall(clientOracle, payload, stream);
-    } else {
-      String toReturn = processCall(payload);
-      onAfterResponseSerialized(toReturn);
-
-      try {
-        stream.write(toReturn.getBytes(RPCServletUtils.CHARSET_UTF8));
-      } catch (IOException e) {
-        throw new SerializationException("Unable to commit bytes", e);
-      }
-    }
-  }
-
-  public String processCall(String payload) throws SerializationException {
-    try {
-      RPCRequest rpcRequest = RPC.decodeRequest(payload, this.getClass(), this);
-      onAfterRequestDeserialized(rpcRequest);
-      return RPC.invokeAndEncodeResponse(this, rpcRequest.getMethod(),
-          rpcRequest.getParameters(), rpcRequest.getSerializationPolicy(),
-          rpcRequest.getFlags());
-    } catch (IncompatibleRemoteServiceException ex) {
-      log(
-          "An IncompatibleRemoteServiceException was thrown while processing this call.",
-          ex);
-      return RPC.encodeResponseForFailure(null, ex);
-    } catch (RpcTokenException tokenException) {
-      log("An RpcTokenException was thrown while processing this call.",
-          tokenException);
-      return RPC.encodeResponseForFailure(null, tokenException);
-    }
-  }
-
-  /**
-   * Gets the {@link SerializationPolicy} for given module base URL and strong
-   * name if there is one.
-   * 
-   * Override this method to provide a {@link SerializationPolicy} using an
-   * alternative approach.
-   * 
-   * @param request the HTTP request being serviced
-   * @param moduleBaseURL as specified in the incoming payload
-   * @param strongName a strong name that uniquely identifies a serialization
-   *          policy file
-   * @return a {@link SerializationPolicy} for the given module base URL and
-   *         strong name, or <code>null</code> if there is none
-   */
-  protected SerializationPolicy doGetSerializationPolicy(
-      HttpServletRequest request, String moduleBaseURL, String strongName) {
-    return RemoteServiceServlet.loadSerializationPolicy(this, request,
-        moduleBaseURL, strongName);
-  }
-
-  /**
-   * @param serializedResponse
-   */
-  protected void onAfterResponseSerialized(String serializedResponse) {
-  }
-
-  private SerializationPolicy getCachedSerializationPolicy(
-      String moduleBaseURL, String strongName) {
-    synchronized (serializationPolicyCache) {
-      return serializationPolicyCache.get(moduleBaseURL + strongName);
-    }
-  }
-
-  private void putCachedSerializationPolicy(String moduleBaseURL,
-      String strongName, SerializationPolicy serializationPolicy) {
-    synchronized (serializationPolicyCache) {
-      serializationPolicyCache.put(moduleBaseURL + strongName,
-          serializationPolicy);
-    }
-  }
-}
diff --git a/user/src/com/google/gwt/user/server/rpc/RemoteServiceServlet.java b/user/src/com/google/gwt/user/server/rpc/RemoteServiceServlet.java
index cfcea1f..141d342 100644
--- a/user/src/com/google/gwt/user/server/rpc/RemoteServiceServlet.java
+++ b/user/src/com/google/gwt/user/server/rpc/RemoteServiceServlet.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.user.server.rpc;
 
+import static com.google.gwt.user.client.rpc.RpcRequestBuilder.MODULE_BASE_HEADER;
+
 import com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException;
 import com.google.gwt.user.client.rpc.RpcTokenException;
 import com.google.gwt.user.client.rpc.SerializationException;
@@ -194,6 +196,31 @@
         + " expected an integer in the range [1-65535] but got: " + value);
   }
 
+  /**
+   * Extract the module's base path from the current request.
+   *
+   * @return the module's base path, modulo protocol and host, as reported by
+   *         {@link com.google.gwt.core.client.GWT#getModuleBaseURL()} or
+   *         <code>null</code> if the request did not contain the
+   *         {@value com.google.gwt.user.client.rpc.RpcRequestBuilder#MODULE_BASE_HEADER} header
+   */
+  protected String getRequestModuleBasePath() {
+    try {
+      String header = getThreadLocalRequest().getHeader(MODULE_BASE_HEADER);
+      if (header == null) {
+        return null;
+      }
+      String path = new URL(header).getPath();
+      String contextPath = getThreadLocalRequest().getContextPath();
+      if (!path.startsWith(contextPath)) {
+        return null;
+      }
+      return path.substring(contextPath.length());
+    } catch (MalformedURLException e) {
+      return null;
+    }
+  }
+
   @Override
   public final SerializationPolicy getSerializationPolicy(String moduleBaseURL,
       String strongName) {
diff --git a/user/src/com/google/gwt/rpc/server/Pair.java b/user/src/com/google/web/bindery/requestfactory/server/Pair.java
similarity index 95%
rename from user/src/com/google/gwt/rpc/server/Pair.java
rename to user/src/com/google/web/bindery/requestfactory/server/Pair.java
index 0b64b48..edc3ae2 100644
--- a/user/src/com/google/gwt/rpc/server/Pair.java
+++ b/user/src/com/google/web/bindery/requestfactory/server/Pair.java
@@ -13,7 +13,7 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.rpc.server;
+package com.google.web.bindery.requestfactory.server;
 
 /**
  * Simple pair class.
diff --git a/user/src/com/google/web/bindery/requestfactory/server/ServiceLayerCache.java b/user/src/com/google/web/bindery/requestfactory/server/ServiceLayerCache.java
index 277f9ab..b34507b 100644
--- a/user/src/com/google/web/bindery/requestfactory/server/ServiceLayerCache.java
+++ b/user/src/com/google/web/bindery/requestfactory/server/ServiceLayerCache.java
@@ -15,7 +15,6 @@
  */
 package com.google.web.bindery.requestfactory.server;
 
-import com.google.gwt.rpc.server.Pair;
 import com.google.web.bindery.requestfactory.shared.BaseProxy;
 import com.google.web.bindery.requestfactory.shared.Locator;
 import com.google.web.bindery.requestfactory.shared.RequestContext;
diff --git a/user/super/com/google/gwt/rpc/super/com/google/gwt/rpc/client/impl/ClientWriterFactory.java b/user/super/com/google/gwt/rpc/super/com/google/gwt/rpc/client/impl/ClientWriterFactory.java
deleted file mode 100644
index 4503eed..0000000
--- a/user/super/com/google/gwt/rpc/super/com/google/gwt/rpc/client/impl/ClientWriterFactory.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.impl;
-
-import com.google.gwt.core.client.GwtScriptOnly;
-import com.google.gwt.rpc.client.ast.CommandSink;
-import com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException;
-import com.google.gwt.user.client.rpc.SerializationStreamReader;
-import com.google.gwt.user.client.rpc.SerializationStreamWriter;
-
-/**
- * Isolates client code from swapping out the command factory in hosted versus
- * web mode.
- */
-@GwtScriptOnly
-public class ClientWriterFactory {
-
-  public static SerializationStreamReader createReader(String payload)
-      throws IncompatibleRemoteServiceException, RemoteException {
-    CommandClientSerializationStreamReader toReturn = new CommandClientSerializationStreamReader();
-    toReturn.prepareToRead(payload);
-    return toReturn;
-  }
-
-  public static SerializationStreamWriter createWriter(
-      TypeOverrides typeOverrides, CommandSink commandSink) {
-    return new CommandClientSerializationStreamWriter(typeOverrides,
-        commandSink);
-  }
-}
diff --git a/user/super/com/google/gwt/rpc/super/com/google/gwt/rpc/client/impl/EscapeUtil.java b/user/super/com/google/gwt/rpc/super/com/google/gwt/rpc/client/impl/EscapeUtil.java
deleted file mode 100644
index f748e98..0000000
--- a/user/super/com/google/gwt/rpc/super/com/google/gwt/rpc/client/impl/EscapeUtil.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client.impl;
-
-import com.google.gwt.core.client.GwtScriptOnly;
-import com.google.gwt.user.client.rpc.impl.ClientSerializationStreamWriter;
-
-/**
- * Provides the web-mode implementation for payload escaping.
- */
-@GwtScriptOnly
-public class EscapeUtil {
-  public static String escape(String payload) {
-    return ClientSerializationStreamWriter.quoteString(payload);
-  }
-}
diff --git a/user/test/com/google/gwt/rpc/RPCSuite.gwt.xml b/user/test/com/google/gwt/rpc/RPCSuite.gwt.xml
deleted file mode 100644
index 64ef04a..0000000
--- a/user/test/com/google/gwt/rpc/RPCSuite.gwt.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<!--                                                                        -->
-<!-- Copyright 2009 Google Inc.                                             -->
-<!-- Licensed under the Apache License, Version 2.0 (the "License"); you    -->
-<!-- may not use this file except in compliance with the License. You may   -->
-<!-- may obtain a copy of the License at                                    -->
-<!--                                                                        -->
-<!-- http://www.apache.org/licenses/LICENSE-2.0                             -->
-<!--                                                                        -->
-<!-- Unless required by applicable law or agreed to in writing, software    -->
-<!-- distributed under the License is distributed on an "AS IS" BASIS,      -->
-<!-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or        -->
-<!-- implied. License for the specific language governing permissions and   -->
-<!-- limitations under the License.                                         -->
-
-<module type="fileset">
-  <inherits name="com.google.gwt.user.RPCSuite" />
-  <inherits name="com.google.gwt.rpc.RPC" />
-  
-  <!-- This allows us to reuse the existing tests -->
-  <set-property name="gwt.rpc.hijackLegacyInterface" value="true" />
-</module>
diff --git a/user/test/com/google/gwt/rpc/client/RpcCollectionsTest.java b/user/test/com/google/gwt/rpc/client/RpcCollectionsTest.java
deleted file mode 100644
index 58d2406..0000000
--- a/user/test/com/google/gwt/rpc/client/RpcCollectionsTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client;
-
-import com.google.gwt.user.client.rpc.CollectionsTest;
-
-/**
- * Tests RPC system using existing tests by overriding module name.
- */
-public class RpcCollectionsTest extends CollectionsTest {
-
-  @Override
-  public String getModuleName() {
-    return "com.google.gwt.rpc.RPCSuite";
-  }
-
-}
diff --git a/user/test/com/google/gwt/rpc/client/RpcCustomFieldSerializerTest.java b/user/test/com/google/gwt/rpc/client/RpcCustomFieldSerializerTest.java
deleted file mode 100644
index 2fd1d31..0000000
--- a/user/test/com/google/gwt/rpc/client/RpcCustomFieldSerializerTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client;
-
-import com.google.gwt.user.client.rpc.CustomFieldSerializerTest;
-
-/**
- * Tests RPC system using existing tests by overriding module name.
- */
-public class RpcCustomFieldSerializerTest extends CustomFieldSerializerTest {
-
-  @Override
-  public String getModuleName() {
-    return "com.google.gwt.rpc.RPCSuite";
-  }
-
-}
diff --git a/user/test/com/google/gwt/rpc/client/RpcEnumsTest.java b/user/test/com/google/gwt/rpc/client/RpcEnumsTest.java
deleted file mode 100644
index d89b83e..0000000
--- a/user/test/com/google/gwt/rpc/client/RpcEnumsTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client;
-
-import com.google.gwt.user.client.rpc.EnumsTest;
-
-/**
- * Tests RPC system using existing tests by overriding module name.
- */
-public class RpcEnumsTest extends EnumsTest {
-
-  @Override
-  public String getModuleName() {
-    return "com.google.gwt.rpc.RPCSuite";
-  }
-
-}
diff --git a/user/test/com/google/gwt/rpc/client/RpcInheritanceTest.java b/user/test/com/google/gwt/rpc/client/RpcInheritanceTest.java
deleted file mode 100644
index 6a7720b..0000000
--- a/user/test/com/google/gwt/rpc/client/RpcInheritanceTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client;
-
-import com.google.gwt.user.client.rpc.InheritanceTest;
-
-/**
- * Tests RPC system using existing tests by overriding module name.
- */
-public class RpcInheritanceTest extends InheritanceTest {
-
-  @Override
-  public String getModuleName() {
-    return "com.google.gwt.rpc.RPCSuite";
-  }
-
-}
diff --git a/user/test/com/google/gwt/rpc/client/RpcObjectGraphTest.java b/user/test/com/google/gwt/rpc/client/RpcObjectGraphTest.java
deleted file mode 100644
index cd77405..0000000
--- a/user/test/com/google/gwt/rpc/client/RpcObjectGraphTest.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client;
-
-import com.google.gwt.user.client.rpc.ObjectGraphTest;
-import com.google.gwt.user.client.rpc.SerializationException;
-
-/**
- * Tests RPC system using existing tests by overriding module name.
- */
-public class RpcObjectGraphTest extends ObjectGraphTest {
-
-  @Override
-  public String getModuleName() {
-    return "com.google.gwt.rpc.RPCSuite";
-  }
-
-  /**
-   * This test assumes particular concrete types and is not relevant in the
-   * deRPC code base as all type names are implicitly obfuscated.
-   */
-  @Override
-  public void testElision() throws SerializationException {
-  }
-}
diff --git a/user/test/com/google/gwt/rpc/client/RpcRecursiveClassTest.java b/user/test/com/google/gwt/rpc/client/RpcRecursiveClassTest.java
deleted file mode 100644
index de09087..0000000
--- a/user/test/com/google/gwt/rpc/client/RpcRecursiveClassTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client;
-
-import com.google.gwt.user.client.rpc.RecursiveClassTest;
-
-/**
- * Tests RPC system using existing tests by overriding module name.
- */
-public class RpcRecursiveClassTest extends RecursiveClassTest {
-
-  @Override
-  public String getModuleName() {
-    return "com.google.gwt.rpc.RPCSuite";
-  }
-
-}
\ No newline at end of file
diff --git a/user/test/com/google/gwt/rpc/client/RpcRemoteServiceServletTest.java b/user/test/com/google/gwt/rpc/client/RpcRemoteServiceServletTest.java
deleted file mode 100644
index f216799..0000000
--- a/user/test/com/google/gwt/rpc/client/RpcRemoteServiceServletTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client;
-
-import com.google.gwt.user.client.rpc.RemoteServiceServletTest;
-
-/**
- * Tests RPC system using existing tests by overriding module name.
- */
-public class RpcRemoteServiceServletTest extends RemoteServiceServletTest {
-
-  @Override
-  public String getModuleName() {
-    return "com.google.gwt.rpc.RPCSuite";
-  }
-
-}
diff --git a/user/test/com/google/gwt/rpc/client/RpcRunTimeSerializationErrorsTest.java b/user/test/com/google/gwt/rpc/client/RpcRunTimeSerializationErrorsTest.java
deleted file mode 100644
index dd543db..0000000
--- a/user/test/com/google/gwt/rpc/client/RpcRunTimeSerializationErrorsTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client;
-
-import com.google.gwt.user.client.rpc.RunTimeSerializationErrorsTest;
-
-/**
- * Tests RPC system using existing tests by overriding module name.
- */
-public class RpcRunTimeSerializationErrorsTest extends
-    RunTimeSerializationErrorsTest {
-
-  @Override
-  public String getModuleName() {
-    return "com.google.gwt.rpc.RPCSuite";
-  }
-
-}
diff --git a/user/test/com/google/gwt/rpc/client/RpcUnicodeEscapingTest.java b/user/test/com/google/gwt/rpc/client/RpcUnicodeEscapingTest.java
deleted file mode 100644
index 331c596..0000000
--- a/user/test/com/google/gwt/rpc/client/RpcUnicodeEscapingTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client;
-
-import com.google.gwt.user.client.rpc.UnicodeEscapingTest;
-
-/**
- * Tests RPC system using existing tests by overriding module name.
- */
-public class RpcUnicodeEscapingTest extends UnicodeEscapingTest {
-
-  @Override
-  public String getModuleName() {
-    return "com.google.gwt.rpc.RPCSuite";
-  }
-
-}
diff --git a/user/test/com/google/gwt/rpc/client/RpcValueTypesTest.java b/user/test/com/google/gwt/rpc/client/RpcValueTypesTest.java
deleted file mode 100644
index 5e8a47b..0000000
--- a/user/test/com/google/gwt/rpc/client/RpcValueTypesTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2009 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.rpc.client;
-
-import com.google.gwt.user.client.rpc.ValueTypesTest;
-
-/**
- * Tests RPC system using existing tests by overriding module name.
- */
-public class RpcValueTypesTest extends ValueTypesTest {
-
-  @Override
-  public String getModuleName() {
-    return "com.google.gwt.rpc.RPCSuite";
-  }
-
-}
diff --git a/user/test/com/google/gwt/user/RPCSuite.java b/user/test/com/google/gwt/user/RPCSuite.java
index d0e54a2..6e005b6 100644
--- a/user/test/com/google/gwt/user/RPCSuite.java
+++ b/user/test/com/google/gwt/user/RPCSuite.java
@@ -17,15 +17,6 @@
 
 import com.google.gwt.dev.BootStrapPlatform;
 import com.google.gwt.junit.tools.GWTTestSuite;
-import com.google.gwt.rpc.client.RpcCollectionsTest;
-import com.google.gwt.rpc.client.RpcCustomFieldSerializerTest;
-import com.google.gwt.rpc.client.RpcEnumsTest;
-import com.google.gwt.rpc.client.RpcInheritanceTest;
-import com.google.gwt.rpc.client.RpcObjectGraphTest;
-import com.google.gwt.rpc.client.RpcRemoteServiceServletTest;
-import com.google.gwt.rpc.client.RpcRunTimeSerializationErrorsTest;
-import com.google.gwt.rpc.client.RpcUnicodeEscapingTest;
-import com.google.gwt.rpc.client.RpcValueTypesTest;
 import com.google.gwt.user.client.rpc.CollectionsTest;
 import com.google.gwt.user.client.rpc.CollectionsTestWithTypeObfuscation;
 import com.google.gwt.user.client.rpc.CoreJavaTest;
@@ -103,21 +94,6 @@
         com.google.gwt.user.client.rpc.RemoteServiceServletTestWithTypeObfuscation.class);
     suite.addTestSuite(UnicodeEscapingTestWithTypeObfuscation.class);
     suite.addTestSuite(RpcTokenTestWithTypeObfuscation.class);
-
-    // Client-side test cases for deRPC system
-    if (false) {
-      // Disabled due to https://code.google.com/p/google-web-toolkit/issues/detail?id=8136
-      suite.addTestSuite(RpcValueTypesTest.class);
-      suite.addTestSuite(RpcEnumsTest.class);
-      suite.addTestSuite(RpcInheritanceTest.class);
-      suite.addTestSuite(RpcCollectionsTest.class);
-      suite.addTestSuite(RpcCustomFieldSerializerTest.class);
-      suite.addTestSuite(RpcObjectGraphTest.class);
-      suite.addTestSuite(RpcRemoteServiceServletTest.class);
-      suite.addTestSuite(RpcUnicodeEscapingTest.class);
-      suite.addTestSuite(RpcRunTimeSerializationErrorsTest.class);
-    }
-
     return suite;
   }
 }
diff --git a/user/test/com/google/gwt/user/server/rpc/CollectionsTestServiceImpl.java b/user/test/com/google/gwt/user/server/rpc/CollectionsTestServiceImpl.java
index 916c98a..0750b80 100644
--- a/user/test/com/google/gwt/user/server/rpc/CollectionsTestServiceImpl.java
+++ b/user/test/com/google/gwt/user/server/rpc/CollectionsTestServiceImpl.java
@@ -62,7 +62,7 @@
 /**
  * TODO: document me.
  */
-public class CollectionsTestServiceImpl extends HybridServiceServlet implements
+public class CollectionsTestServiceImpl extends RemoteServiceServlet implements
     CollectionsTestService {
 
   private static String toString(Object[] values) {
diff --git a/user/test/com/google/gwt/user/server/rpc/CoreJavaTestServiceImpl.java b/user/test/com/google/gwt/user/server/rpc/CoreJavaTestServiceImpl.java
index aab75d8..4d97344 100644
--- a/user/test/com/google/gwt/user/server/rpc/CoreJavaTestServiceImpl.java
+++ b/user/test/com/google/gwt/user/server/rpc/CoreJavaTestServiceImpl.java
@@ -24,7 +24,7 @@
 /**
  * Remote service implementation  for serialization of GWT core.java emulations.
  */
-public class CoreJavaTestServiceImpl extends HybridServiceServlet implements CoreJavaTestService {
+public class CoreJavaTestServiceImpl extends RemoteServiceServlet implements CoreJavaTestService {
 
   @Override
   public MathContext echoMathContext(MathContext value) throws CoreJavaTestServiceException {
diff --git a/user/test/com/google/gwt/user/server/rpc/CustomFieldSerializerTestServiceImpl.java b/user/test/com/google/gwt/user/server/rpc/CustomFieldSerializerTestServiceImpl.java
index 4ddc56d..e492440 100644
--- a/user/test/com/google/gwt/user/server/rpc/CustomFieldSerializerTestServiceImpl.java
+++ b/user/test/com/google/gwt/user/server/rpc/CustomFieldSerializerTestServiceImpl.java
@@ -29,7 +29,7 @@
  * {@link com.google.gwt.user.client.rpc.CustomFieldSerializerTest
  * CustomFieldSerializerTest} unit test.
  */
-public class CustomFieldSerializerTestServiceImpl extends HybridServiceServlet
+public class CustomFieldSerializerTestServiceImpl extends RemoteServiceServlet
     implements CustomFieldSerializerTestService {
 
   /**
diff --git a/user/test/com/google/gwt/user/server/rpc/EnumsTestServiceImpl.java b/user/test/com/google/gwt/user/server/rpc/EnumsTestServiceImpl.java
index 78053f3..56f4983 100644
--- a/user/test/com/google/gwt/user/server/rpc/EnumsTestServiceImpl.java
+++ b/user/test/com/google/gwt/user/server/rpc/EnumsTestServiceImpl.java
@@ -20,7 +20,7 @@
 /**
  * Simple remote service used to echo enumerated types.
  */
-public class EnumsTestServiceImpl extends HybridServiceServlet implements
+public class EnumsTestServiceImpl extends RemoteServiceServlet implements
     EnumsTestService {
 
   @Override
diff --git a/user/test/com/google/gwt/user/server/rpc/ExceptionsTestServiceImpl.java b/user/test/com/google/gwt/user/server/rpc/ExceptionsTestServiceImpl.java
index 3006c79..2f96948 100644
--- a/user/test/com/google/gwt/user/server/rpc/ExceptionsTestServiceImpl.java
+++ b/user/test/com/google/gwt/user/server/rpc/ExceptionsTestServiceImpl.java
@@ -20,7 +20,7 @@
 /**
  * Remote Service Implementation for Exception serialization tests.
  */
-public class ExceptionsTestServiceImpl extends HybridServiceServlet implements
+public class ExceptionsTestServiceImpl extends RemoteServiceServlet implements
     ExceptionsTestService {
 
   @Override
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 41579cf..b849ef7 100644
--- a/user/test/com/google/gwt/user/server/rpc/InheritanceTestServiceImpl.java
+++ b/user/test/com/google/gwt/user/server/rpc/InheritanceTestServiceImpl.java
@@ -34,7 +34,7 @@
  * Servlet used by the {@link com.google.gwt.user.client.rpc.InheritanceTest
  * InheritanceTest} unit test.
  */
-public class InheritanceTestServiceImpl extends HybridServiceServlet implements
+public class InheritanceTestServiceImpl extends RemoteServiceServlet implements
     InheritanceTestServiceSubtype {
 
   /**
diff --git a/user/test/com/google/gwt/user/server/rpc/LoggingRPCTestServiceImpl.java b/user/test/com/google/gwt/user/server/rpc/LoggingRPCTestServiceImpl.java
index f9703ed..2856def 100644
--- a/user/test/com/google/gwt/user/server/rpc/LoggingRPCTestServiceImpl.java
+++ b/user/test/com/google/gwt/user/server/rpc/LoggingRPCTestServiceImpl.java
@@ -34,7 +34,7 @@
 /**
  * Remote service implementation for serialization of GWT core.java.util.logging emulations.
  */
-public class LoggingRPCTestServiceImpl extends HybridServiceServlet implements
+public class LoggingRPCTestServiceImpl extends RemoteServiceServlet implements
     LoggingRPCTestService {
 
   @Override
diff --git a/user/test/com/google/gwt/user/server/rpc/MixedSerializableEchoServiceImpl.java b/user/test/com/google/gwt/user/server/rpc/MixedSerializableEchoServiceImpl.java
index 8bf277b..e679e91 100644
--- a/user/test/com/google/gwt/user/server/rpc/MixedSerializableEchoServiceImpl.java
+++ b/user/test/com/google/gwt/user/server/rpc/MixedSerializableEchoServiceImpl.java
@@ -22,7 +22,7 @@
  * Servlet used by the
  * {@link com.google.gwt.user.client.rpc.RunTimeSerializationErrorsTest}.
  */
-public class MixedSerializableEchoServiceImpl extends HybridServiceServlet
+public class MixedSerializableEchoServiceImpl extends RemoteServiceServlet
     implements MixedSerializableEchoService {
   @Override
   public MixedSerializable echoVoid(MixedSerializable mixed) {
diff --git a/user/test/com/google/gwt/user/server/rpc/ObjectGraphTestServiceImpl.java b/user/test/com/google/gwt/user/server/rpc/ObjectGraphTestServiceImpl.java
index f0875de..7011112 100644
--- a/user/test/com/google/gwt/user/server/rpc/ObjectGraphTestServiceImpl.java
+++ b/user/test/com/google/gwt/user/server/rpc/ObjectGraphTestServiceImpl.java
@@ -25,7 +25,7 @@
 /**
  * TODO: document me.
  */
-public class ObjectGraphTestServiceImpl extends HybridServiceServlet implements
+public class ObjectGraphTestServiceImpl extends RemoteServiceServlet implements
     ObjectGraphTestService {
 
   @Override
diff --git a/user/test/com/google/gwt/user/server/rpc/RemoteServiceServletTestServiceImplBase.java b/user/test/com/google/gwt/user/server/rpc/RemoteServiceServletTestServiceImplBase.java
index c96a6d4..45575ce 100644
--- a/user/test/com/google/gwt/user/server/rpc/RemoteServiceServletTestServiceImplBase.java
+++ b/user/test/com/google/gwt/user/server/rpc/RemoteServiceServletTestServiceImplBase.java
@@ -24,7 +24,7 @@
  * RPC-over-HTTP.
  */
 public class RemoteServiceServletTestServiceImplBase extends
-    HybridServiceServlet implements RemoteServiceServletTestService {
+    RemoteServiceServlet implements RemoteServiceServletTestService {
 
   /**
    * A RuntimeException the client code shouldn't know anything about.
diff --git a/user/test/com/google/gwt/user/server/rpc/TypeCheckedObjectsTestServiceImpl.java b/user/test/com/google/gwt/user/server/rpc/TypeCheckedObjectsTestServiceImpl.java
index 5b9ceb0..1615e50 100644
--- a/user/test/com/google/gwt/user/server/rpc/TypeCheckedObjectsTestServiceImpl.java
+++ b/user/test/com/google/gwt/user/server/rpc/TypeCheckedObjectsTestServiceImpl.java
@@ -27,7 +27,7 @@
  * Servlet used by the
  * {@link com.google.gwt.user.client.rpc.TypeCheckedObjectsTest} unit tests.
  */
-public class TypeCheckedObjectsTestServiceImpl extends HybridServiceServlet implements
+public class TypeCheckedObjectsTestServiceImpl extends RemoteServiceServlet implements
     TypeCheckedObjectsTestService {
 
   /*
diff --git a/user/test/com/google/gwt/user/server/rpc/UnicodeEscapingServiceImpl.java b/user/test/com/google/gwt/user/server/rpc/UnicodeEscapingServiceImpl.java
index bcc5e11..87cc1b3 100644
--- a/user/test/com/google/gwt/user/server/rpc/UnicodeEscapingServiceImpl.java
+++ b/user/test/com/google/gwt/user/server/rpc/UnicodeEscapingServiceImpl.java
@@ -21,7 +21,7 @@
 /**
  * Implementation of the {@link UnicodeEscapingService} interface.
  */
-public class UnicodeEscapingServiceImpl extends HybridServiceServlet implements
+public class UnicodeEscapingServiceImpl extends RemoteServiceServlet implements
     UnicodeEscapingService {
 
   /**
diff --git a/user/test/com/google/gwt/user/server/rpc/ValueTypesTestServiceImpl.java b/user/test/com/google/gwt/user/server/rpc/ValueTypesTestServiceImpl.java
index 76bdbb3..259199c 100644
--- a/user/test/com/google/gwt/user/server/rpc/ValueTypesTestServiceImpl.java
+++ b/user/test/com/google/gwt/user/server/rpc/ValueTypesTestServiceImpl.java
@@ -27,7 +27,7 @@
  * sure it isn't mangled on the way to the server and then unmangled on the way
  * back to the client.
  */
-public class ValueTypesTestServiceImpl extends HybridServiceServlet implements
+public class ValueTypesTestServiceImpl extends RemoteServiceServlet implements
     ValueTypesTestService {
 
   @Override
diff --git a/user/test/test/ServletMappingTestServiceImpl1.java b/user/test/test/ServletMappingTestServiceImpl1.java
index 4a7b9b7..84ca42f 100644
--- a/user/test/test/ServletMappingTestServiceImpl1.java
+++ b/user/test/test/ServletMappingTestServiceImpl1.java
@@ -15,12 +15,12 @@
  */
 package test;
 
-import com.google.gwt.user.server.rpc.HybridServiceServlet;
+import com.google.gwt.user.server.rpc.RemoteServiceServlet;
 
 /**
  * TODO: document me.
  */
-public class ServletMappingTestServiceImpl1 extends HybridServiceServlet
+public class ServletMappingTestServiceImpl1 extends RemoteServiceServlet
     implements ServletMappingTestService {
 
   @Override
diff --git a/user/test/test/ServletMappingTestServiceImpl2.java b/user/test/test/ServletMappingTestServiceImpl2.java
index aa4e227..c9ffde8 100644
--- a/user/test/test/ServletMappingTestServiceImpl2.java
+++ b/user/test/test/ServletMappingTestServiceImpl2.java
@@ -15,12 +15,12 @@
  */
 package test;
 
-import com.google.gwt.user.server.rpc.HybridServiceServlet;
+import com.google.gwt.user.server.rpc.RemoteServiceServlet;
 
 /**
  * TODO: document me.
  */
-public class ServletMappingTestServiceImpl2 extends HybridServiceServlet
+public class ServletMappingTestServiceImpl2 extends RemoteServiceServlet
     implements ServletMappingTestService {
 
   @Override
diff --git a/user/test/test/ServletMappingTestServiceImpl3.java b/user/test/test/ServletMappingTestServiceImpl3.java
index 2daef5e..221fadd 100644
--- a/user/test/test/ServletMappingTestServiceImpl3.java
+++ b/user/test/test/ServletMappingTestServiceImpl3.java
@@ -15,12 +15,12 @@
  */
 package test;
 
-import com.google.gwt.user.server.rpc.HybridServiceServlet;
+import com.google.gwt.user.server.rpc.RemoteServiceServlet;
 
 /**
  * TODO: document me.
  */
-public class ServletMappingTestServiceImpl3 extends HybridServiceServlet
+public class ServletMappingTestServiceImpl3 extends RemoteServiceServlet
     implements ServletMappingTestService {
 
   @Override