Roll back r5662.  The overlay of WeakMapping is confusing the apicheck-nobuild target.

TBR: bobv



git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5663 8db76d5a-ed1c-0410-87a9-c151d255dfc7
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 cb9b665..bdb514f 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
@@ -1949,7 +1949,6 @@
     specialObfuscatedIdents.put("finalize", "fZ");
 
     // Object fields
-    specialObfuscatedIdents.put("expando", "eX");
     specialObfuscatedIdents.put("typeId", "tI");
     specialObfuscatedIdents.put("typeMarker", "tM");
 
diff --git a/user/src/com/google/gwt/core/client/WeakMapping.java b/user/src/com/google/gwt/core/client/WeakMapping.java
deleted file mode 100644
index 327721d..0000000
--- a/user/src/com/google/gwt/core/client/WeakMapping.java
+++ /dev/null
@@ -1,170 +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.core.client;
-
-import java.lang.ref.Reference;
-import java.lang.ref.ReferenceQueue;
-import java.lang.ref.WeakReference;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * A class associating a (String, Object) map with arbitrary source objects
- * (except for Strings). This implementation is used in hosted mode.
- */
-public class WeakMapping {
-
-  /*
-   * This implementation is used in hosted mode only. It uses a HashMap to
-   * associate the (key, value) maps with source object instances. The object
-   * instances are wrapped in IdentityWeakReference objects in order to both
-   * allow the underlying objects to be garbage-collected and to apply
-   * IdentityHashMap semantics so that distinct objects that happen to compare
-   * as equals() still get to have distinct maps associated with them.
-   */
-
-  /**
-   * A WeakReference implementing equals() and hashCode(). The hash code of the
-   * reference is permanently set to the identity hash code of the referent at
-   * construction time.
-   */
-  static class IdentityWeakReference extends WeakReference {
-
-    /**
-     * The identity hash code of the referent, cached during construction.
-     */
-    private final int hashCode;
-
-    public IdentityWeakReference(Object referent, ReferenceQueue queue) {
-      super(referent, queue);
-      hashCode = System.identityHashCode(referent);
-    }
-
-    @Override
-    public boolean equals(Object other) {
-      /*
-       * Identical objects are always equal.
-       */
-      if (this == other) {
-        return true;
-      }
-
-      /*
-       * We can only be equal to another IdentityWeakReference.
-       */
-      if (!(other instanceof IdentityWeakReference)) {
-        return false;
-      }
-
-      /*
-       * Check equality of the underlying referents. If either referent is no
-       * longer present, equals() will return false (note that the case of
-       * identical IdentityWeakReference objects has already been defined to
-       * return true above).
-       */
-      Object referent = get();
-      if (referent == null) {
-        return false;
-      }
-      return referent == ((IdentityWeakReference) other).get();
-    }
-
-    @Override
-    public int hashCode() {
-      return hashCode;
-    }
-  }
-
-  /**
-   * A Map from Objects to <String,Object> maps. Hashing is based on object
-   * identity. Weak references are used to allow otherwise unreferenced Objects
-   * to be garbage collected.
-   */
-  private static Map<IdentityWeakReference, HashMap<String, Object>> map =
-    new HashMap<IdentityWeakReference, HashMap<String, Object>>();
-
-  /**
-   * A ReferenceQueue used to clean up the map as its keys are
-   * garbage-collected.
-   */
-  private static ReferenceQueue queue = new ReferenceQueue();
-
-  /**
-   * Returns the Object associated with the given key in the (key, value)
-   * mapping associated with the given Object instance.
-   * 
-   * @param instance the source Object.
-   * @param key a String key.
-   * @return an Object associated with that key on the given instance, or null.
-   */
-  public static Object get(Object instance, String key) {
-    cleanup();
-
-    IdentityWeakReference ref = new IdentityWeakReference(instance, queue);
-    HashMap<String, Object> m = map.get(ref);
-    if (m == null) {
-      return null;
-    }
-    return m.get(key);
-  }
-
-  /**
-   * Associates a value with a given key in the (key, value) mapping associated
-   * with the given Object instance. Note that the key space is module-wide, so
-   * some care should be taken to choose sufficiently unique identifiers.
-   * 
-   * <p>
-   * Due to restrictions of the web mode implementation, the instance argument
-   * must not be a String.
-   * 
-   * @param instance the source Object, which must not be a String.
-   * @param key a String key.
-   * @param value the Object to associate with the key on the given source
-   *          Object.
-   * @throws IllegalArgumentException if instance is a String.
-   */
-  public static void set(Object instance, String key, Object value) {
-    cleanup();
-
-    if (instance instanceof String) {
-      throw new IllegalArgumentException("Cannot use Strings with WeakMapping");
-    }
-
-    IdentityWeakReference ref = new IdentityWeakReference(instance, queue);
-    HashMap<String, Object> m = map.get(ref);
-    if (m == null) {
-      m = new HashMap<String, Object>();
-      map.put(ref, m);
-    }
-    m.put(key, value);
-  }
-
-  /**
-   * Remove garbage-collected keys from the map. The (key, value) maps
-   * associated with those keys will then become unreferenced themselves and
-   * will be eligible for future garbage collection.
-   */
-  private static void cleanup() {
-    Reference ref;
-    while ((ref = queue.poll()) != null) {
-      /**
-       * Note that we can still remove ref from the map even though its referent
-       * has been nulled out since we only need == equality to do so.
-       */
-      map.remove(ref);
-    }
-  }
-}
diff --git a/user/src/com/google/gwt/user/rebind/rpc/ClientDataSerializer.java b/user/src/com/google/gwt/user/rebind/rpc/ClientDataSerializer.java
deleted file mode 100644
index 12424b5..0000000
--- a/user/src/com/google/gwt/user/rebind/rpc/ClientDataSerializer.java
+++ /dev/null
@@ -1,95 +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.rebind.rpc;
-
-import com.google.gwt.core.ext.typeinfo.JClassType;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.TreeMap;
-
-/**
- * An interface for serializing and deserializing portions of Object data that
- * are present in the server implementation but are not present in client code.
- * For example, some persistence frameworks make use of server-side bytecode
- * enhancement; the fields added by such enhancement are unknown to the client,
- * and therefore are not handled by normal GWT RPC mechanisms.
- * 
- * <p>
- * This portion of the interface is called from the
- * {@link FieldSerializerCreator} as part of the generation of client-side field
- * serializers.
- * 
- * @see com.google.gwt.user.server.rpc.impl.ServerDataSerializer
- */
-public abstract class ClientDataSerializer implements
-    Comparable<ClientDataSerializer> {
-
-  /**
-   * A mapping from ClientDataSerializer names to instances, sorted by name.
-   */
-  private static TreeMap<String, ClientDataSerializer> serializers =
-    new TreeMap<String, ClientDataSerializer>();
-
-  /**
-   * All active ServerDataSerializers must be initialized here and placed into
-   * the serializers map.
-   * 
-   * <p>
-   * The map must be kept in sync with the one in
-   * {@link com.google.gwt.user.server.rpc.impl.ServerDataSerializer}.
-   */
-  static {
-    // Load and register a JdoDetachedStateSerializer
-    ClientDataSerializer serializer = JdoDetachedStateClientDataSerializer.getInstance();
-    serializers.put(serializer.getName(), serializer);
-  }
-
-  /**
-   * Returns a Collection of all ClientDataSerializer instances, ordered by name.
-   * The returned collection is unmodifiable.
-   */
-  public static Collection<ClientDataSerializer> getSerializers() {
-    return Collections.unmodifiableCollection(serializers.values());
-  }
-
-  /**
-   * Allow ServerDataSerialzer instances to be sorted by class name.
-   */
-  public int compareTo(ClientDataSerializer other) {
-    return getName().compareTo(other.getName());
-  }
-
-  /**
-   * Returns the name of this {@link ServerDataSerializer} instance, used to
-   * determine the sorting order when multiple serializers apply to a given
-   * class type.  The name will be used as a key to store the serialized data
-   * on the client.
-   * 
-   * <p>
-   * The name must be identical to that of the corresponding
-   * {@link ServerDataSerializer}.
-   */
-  public abstract String getName();
-
-  /**
-   * Returns true if the given classType should be processed by a
-   * ServerClientSerializer.
-   * 
-   * @param classType the class type to be queried.
-   */
-  public abstract boolean shouldSerialize(JClassType classType);
-}
diff --git a/user/src/com/google/gwt/user/rebind/rpc/FieldSerializerCreator.java b/user/src/com/google/gwt/user/rebind/rpc/FieldSerializerCreator.java
index ec0c37f..e21bf52 100644
--- a/user/src/com/google/gwt/user/rebind/rpc/FieldSerializerCreator.java
+++ b/user/src/com/google/gwt/user/rebind/rpc/FieldSerializerCreator.java
@@ -16,7 +16,6 @@
 package com.google.gwt.user.rebind.rpc;
 
 import com.google.gwt.core.client.UnsafeNativeLong;
-import com.google.gwt.core.client.WeakMapping;
 import com.google.gwt.core.ext.GeneratorContext;
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.typeinfo.JArrayType;
@@ -47,8 +46,6 @@
  * fully qualified type names everywhere
  */
 public class FieldSerializerCreator {
-  
-  private final static String WEAK_MAPPING_CLASS_NAME = WeakMapping.class.getName();
 
   private final JClassType serializableClass;
 
@@ -351,13 +348,6 @@
       writeEnumDeserializationStatements(serializableClass.isEnum());
     } else {
       writeClassDeserializationStatements();
-      
-      for (ClientDataSerializer serializer : ClientDataSerializer.getSerializers()) {
-        if (serializer.shouldSerialize(serializableClass)) {
-          sourceWriter.println(WEAK_MAPPING_CLASS_NAME + ".set(instance, "
-              + "\"" + serializer.getName() + "\", streamReader.readString());");
-        }
-      }
     }
     sourceWriter.outdent();
     sourceWriter.println("}");
@@ -465,14 +455,6 @@
       writeEnumSerializationStatements(serializableClass.isEnum());
     } else {
       writeClassSerializationStatements();
-
-      for (ClientDataSerializer serializer : ClientDataSerializer.getSerializers()) {
-        if (serializer.shouldSerialize(serializableClass)) {
-          sourceWriter.println("streamWriter.writeString((String) "
-              + WEAK_MAPPING_CLASS_NAME + ".get(instance, \""
-              + serializer.getName() + "\"));");
-        }
-      }
     }
 
     sourceWriter.outdent();
diff --git a/user/src/com/google/gwt/user/rebind/rpc/JdoDetachedStateClientDataSerializer.java b/user/src/com/google/gwt/user/rebind/rpc/JdoDetachedStateClientDataSerializer.java
deleted file mode 100644
index 5f08742..0000000
--- a/user/src/com/google/gwt/user/rebind/rpc/JdoDetachedStateClientDataSerializer.java
+++ /dev/null
@@ -1,103 +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.rebind.rpc;
-
-import com.google.gwt.core.ext.typeinfo.JClassType;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-/**
- * An implementation of ClientFieldSerializer that handles the jdoDetachedState
- * field in the JDO API, version 2.2.
- */
-final class JdoDetachedStateClientDataSerializer extends
-    ClientDataSerializer {
-
-  private static Class<? extends Annotation> annotationClass;
-  private static Method detachableMethod;
-  
-  /**
-   * The singleton instance.
-   */
-  private static final JdoDetachedStateClientDataSerializer theInstance =
-    new JdoDetachedStateClientDataSerializer();
-  
-  static {
-    try {
-      annotationClass = Class.forName(
-          "javax.jdo.annotations.PersistenceCapable").asSubclass(
-          Annotation.class);
-      detachableMethod = annotationClass.getDeclaredMethod("detachable",
-          (Class[]) null);
-    } catch (ClassNotFoundException e) {
-      // Ignore, annotationClass will be null
-    } catch (NoSuchMethodException e) {
-      // Set annotationClass to null, don't do serialization
-      annotationClass = null;
-    }
-  }
-
-  /**
-   * Return the unique instance of this class.
-   */
-  public static JdoDetachedStateClientDataSerializer getInstance() {
-    return theInstance;
-  }
-  
-  /**
-   * Ensure this class has a singleton instance only.
-   */
-  private JdoDetachedStateClientDataSerializer() {
-  }
-
-  @Override
-  public String getName() {
-    return "gwt-jdo-jdoDetachedState";
-  }
-  
-  /**
-   * Returns true if the given classType should be processed by a
-   * ClientDataSerializer.
-   * 
-   * @param classType the class type to be queried.
-   */
-  @Override
-  public boolean shouldSerialize(JClassType classType) {
-    try {
-      if (annotationClass == null) {
-        return false;
-      }
-      Annotation annotation = classType.getAnnotation(annotationClass);
-      if (annotation == null) {
-        return false;
-      }
-      Object value = detachableMethod.invoke(annotation, (Object[]) null);
-      if (value instanceof String) {
-        return "true".equalsIgnoreCase((String) value);
-      } else {
-        return false;
-      }
-    } catch (IllegalAccessException e) {
-      // will return false
-    } catch (InvocationTargetException e) {
-      // will return false
-    }
-
-    return false;
-  }
-}
diff --git a/user/src/com/google/gwt/user/server/Base64Utils.java b/user/src/com/google/gwt/user/server/Base64Utils.java
deleted file mode 100644
index 14accb2..0000000
--- a/user/src/com/google/gwt/user/server/Base64Utils.java
+++ /dev/null
@@ -1,160 +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;
-
-/**
- * A utility to decode and encode byte arrays as Strings, using only "safe" characters.
- */
-public class Base64Utils {
-
-  /**
-   * An array mapping size but values to the characters that will be used to represent them.
-   */
-  private static final char[] base64Chars = new char[] {
-    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
-    'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B',
-    'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
-    'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3',
-    '4', '5', '6', '7', '8', '9', '$', '_'
-  };
-
-  /**
-   * An array mapping legal base 64 characters [a-zA-Z0-9$_] to their associated 6-bit values.
-   */
-  private static final byte[] base64Values = new byte[123];
-
-  /**
-   * Initialize the base 64 encoder values.
-   */
-  static {
-    for (int i = 'a'; i <= 'z'; i++) {
-      base64Values[i] = (byte) (i - 'a');
-    }
-    for (int i = 'A'; i <= 'Z'; i++) {
-      base64Values[i] = (byte) (i - 'A' + 26);
-    }
-    for (int i = '0'; i <= '9'; i++) {
-      base64Values[i] = (byte) (i - '0' + 52);
-    }
-    base64Values['$'] = 62;
-    base64Values['_'] = 63;
-  }
-
-  /**
-   * Decode a base64 string into a byte array.
-   * 
-   * @param data the encoded data.
-   * @return a byte array.
-   * @see #fromBase64(String)
-   */
-  public static byte[] fromBase64(String data) {
-    if (data == null) {
-      return null;
-    }
-    
-    int len = data.length();
-    assert (len % 4) == 0;
-    
-    if (len == 0) {
-      return new byte[0];
-    }
-    
-    char[] chars = new char[len];
-    data.getChars(0, len, chars, 0);
-    
-    int olen = 3 * (len / 4);
-    if (chars[len - 2] == '=') {
-      --olen;
-    }
-    if (chars[len - 1] == '=') {
-      --olen;
-    }
-    
-    byte[] bytes = new byte[olen];
-    
-    int iidx = 0;
-    int oidx = 0;
-    while (iidx < len) {
-      int c0 = base64Values[chars[iidx++] & 0xff];
-      int c1 = base64Values[chars[iidx++] & 0xff];
-      int c2 = base64Values[chars[iidx++] & 0xff];
-      int c3 = base64Values[chars[iidx++] & 0xff];
-      int c24 = (c0 << 18) | (c1 << 12) | (c2 << 6) | c3;
-      
-      bytes[oidx++] = (byte) (c24 >> 16);
-      if (oidx == olen) {
-        break;
-      }
-      bytes[oidx++] = (byte) (c24 >>  8);
-      if (oidx == olen) {
-        break;
-      }
-      bytes[oidx++] = (byte)  c24;
-    }
-    
-    return bytes;
-  }
-
-  /**
-   * Converts a byte array into a base 64 encoded string. Null is encoded as
-   * null, and an empty array is encoded as an empty string. Otherwise, the byte
-   * data is read 3 bytes at a time, with bytes off the end of the array padded
-   * with zeros. Each 24-bit chunk is encoded as 4 characters from the sequence
-   * [a-zA-Z0-9$_]. If one of the size-bit source positions consists entirely of
-   * padding zeros, an '=' character is used instead.
-   * 
-   * @param data a byte array, which may be null or empty
-   * @return a String
-   */
-  public static String toBase64(byte[] data) {
-    if (data == null) {
-      return null;
-    }
-
-    int len = data.length;
-    if (len == 0) {
-      return "";
-    }
-    
-    int olen = 4 * ((len + 2) / 3);
-    char[] chars = new char[olen];
-
-    int iidx = 0;
-    int oidx = 0;
-    int charsLeft = len;
-    while (charsLeft > 0) {
-      int b0 = data[iidx++] & 0xff;
-      int b1 = (charsLeft > 1) ? data[iidx++] & 0xff : 0;
-      int b2 = (charsLeft > 2) ? data[iidx++] & 0xff : 0;
-      int b24 = (b0 << 16) | (b1 << 8) | b2;
-
-      int c0 = (b24 >> 18) & 0x3f;
-      int c1 = (b24 >> 12) & 0x3f;
-      int c2 = (b24 >> 6) & 0x3f;
-      int c3 = b24 & 0x3f;
-
-      chars[oidx++] = base64Chars[c0];
-      chars[oidx++] = base64Chars[c1];
-      chars[oidx++] = (charsLeft > 1) ? base64Chars[c2] : '=';
-      chars[oidx++] = (charsLeft > 2) ? base64Chars[c3] : '=';
-
-      charsLeft -= 3;
-    }
-
-    return new String(chars);
-  }
-}
-
diff --git a/user/src/com/google/gwt/user/server/rpc/impl/JdoDetachedStateServerDataSerializer.java b/user/src/com/google/gwt/user/server/rpc/impl/JdoDetachedStateServerDataSerializer.java
deleted file mode 100644
index 12fccdd..0000000
--- a/user/src/com/google/gwt/user/server/rpc/impl/JdoDetachedStateServerDataSerializer.java
+++ /dev/null
@@ -1,298 +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.impl;
-
-import com.google.gwt.user.client.rpc.SerializationException;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.lang.reflect.Field;
-import java.util.BitSet;
-
-/**
- * An implementation of ServerFieldSerializer that handles the jdoDetachedState
- * field in the JDO API, version 2.2.
- */
-final class JdoDetachedStateServerDataSerializer extends
-    ServerDataSerializer {
-
-  /**
-   * A Class object for the javax.jdo.spi.Detachable interface, or null if it is
-   * not present in the runtime environment.
-   */
-  private static Class<?> JAVAX_JDO_SPI_DETACHABLE_CLASS;
-
-  /**
-   * A constant indicating an Externalizable entry in the jdoDetachedState
-   * Object array.
-   */
-  private static final int JDO_DETACHED_STATE_ENTRY_EXTERNALIZABLE = 0;
-
-  /**
-   * A constant indicating a null entry in the jdoDetachedState Object array.
-   */
-  private static final int JDO_DETACHED_STATE_ENTRY_NULL = 1;
-
-  /**
-   * A constant indicating a Serializable entry in the jdoDetachedState Object
-   * array.
-   */
-  private static final int JDO_DETACHED_STATE_ENTRY_SERIALIZABLE = 2;
-
-  /**
-   * A constant indicating the name of the jdoDetachedState field.
-   */
-  private static final String JDO_DETACHED_STATE_FIELD_NAME = "jdoDetachedState";
-
-  /**
-   * A version number for the serialized form of the jdoDetachedState field.
-   * Version 1 corresponds to JDO API version 2.2.
-   */
-  private static final int JDO_DETACHED_STATE_SERIALIZATION_VERSION = 1;
-
-  /**
-   * A constant indicating the name of the jdoFlags field.
-   */
-  private static final String JDO_FLAGS_FIELD_NAME = "jdoFlags";
-
-  /**
-   * A constant indicating the "LOAD_REQUIRED" value for the jdoFlags field.
-   */
-  private static final int JDO_FLAGS_LOAD_REQUIRED = 1;
-  
-  /**
-   * The singleton instance.
-   */
-  private static final JdoDetachedStateServerDataSerializer theInstance =
-    new JdoDetachedStateServerDataSerializer();
-
-  static {
-    try {
-      JAVAX_JDO_SPI_DETACHABLE_CLASS = Class.forName("javax.jdo.spi.Detachable");
-    } catch (ClassNotFoundException e) {
-      // Ignore, if JDO is not present in our enviroment the variable will be
-      // initialized to null.
-    }
-  }
-
-  /**
-   * Return the unique instance of this class.
-   */
-  public static JdoDetachedStateServerDataSerializer getInstance() {
-    return theInstance;
-  }
-  
-  /**
-   * Ensure this class has a singleton instance only.
-   */
-  private JdoDetachedStateServerDataSerializer() {
-  }
-
-  /**
-   * Custom deserialize the contents of the jdoDetachedState field.
-   * 
-   * @param serializedData the serialized data, as an array of bytes, possibly
-   *          null.
-   * @param instance the Object instance to be modified.
-   * @throws SerializationException if the field contents cannot be
-   *           reconstructed.
-   */
-  @Override
-  public void deserializeServerData(byte[] serializedData, Object instance)
-      throws SerializationException {
-    try {
-      Class<?> instanceClass = instance.getClass();
-      Field jdoDetachedStateField = instanceClass.getDeclaredField(JdoDetachedStateServerDataSerializer.JDO_DETACHED_STATE_FIELD_NAME);
-      jdoDetachedStateField.setAccessible(true);
-
-      if (serializedData == null) {
-        throw new SerializationException("JDO persistent object serialized data is null");
-      }
-
-      ByteArrayInputStream bais = new ByteArrayInputStream(serializedData);
-      ObjectInputStream in = new ObjectInputStream(bais);
-
-      // We only understand version 1 (JDO version 2.2) at this time.
-      int version = in.readInt();
-      if (version != JdoDetachedStateServerDataSerializer.JDO_DETACHED_STATE_SERIALIZATION_VERSION) {
-        throw new SerializationException(
-            "Got JDO detached state serialization version "
-                + version
-                + ", expected version "
-                + JdoDetachedStateServerDataSerializer.JDO_DETACHED_STATE_SERIALIZATION_VERSION
-                + ".");
-      }
-
-      Object[] jdoDetachedState = new Object[4];
-      for (int i = 0; i < 3; i++) {
-        byte type = in.readByte();
-        switch (type) {
-          case JdoDetachedStateServerDataSerializer.JDO_DETACHED_STATE_ENTRY_NULL:
-            jdoDetachedState[i] = null;
-            break;
-
-          case JdoDetachedStateServerDataSerializer.JDO_DETACHED_STATE_ENTRY_EXTERNALIZABLE:
-            try {
-              String className = (String) in.readObject();
-              Class<? extends Externalizable> c = Class.forName(className).asSubclass(
-                  java.io.Externalizable.class);
-              Externalizable e = c.newInstance();
-              e.readExternal(in);
-              jdoDetachedState[i] = e;
-            } catch (ClassCastException e) {
-              throw new SerializationException(e);
-            } catch (ClassNotFoundException e) {
-              throw new SerializationException(e);
-            } catch (IllegalAccessException e) {
-              throw new SerializationException(e);
-            } catch (InstantiationException e) {
-              throw new SerializationException(e);
-            }
-            break;
-
-          case JdoDetachedStateServerDataSerializer.JDO_DETACHED_STATE_ENTRY_SERIALIZABLE:
-            try {
-              jdoDetachedState[i] = in.readObject();
-            } catch (ClassNotFoundException e) {
-              throw new SerializationException(e);
-            }
-            break;
-        }
-      }
-
-      // Mark all loaded fields as modified
-      jdoDetachedState[3] = new BitSet();
-      ((BitSet) jdoDetachedState[3]).or((BitSet) jdoDetachedState[2]);
-
-      // Set the field
-      jdoDetachedStateField.set(instance, jdoDetachedState);
-    } catch (IllegalAccessException e) {
-      throw new SerializationException(e);
-    } catch (IOException e) {
-      throw new SerializationException(
-          "An unexpected IOException occured while deserializing jdoDetachedState",
-          e);
-    } catch (NoSuchFieldException e) {
-      throw new SerializationException(e);
-    }
-  }
-
-  @Override
-  public String getName() {
-    return "gwt-jdo-jdoDetachedState";
-  }
-
-  /**
-   * Custom serialize the contents of the jdoDetachedState field. If the field
-   * is null, a null array is returned. Otherwise, a byte array is returned with
-   * the server-only contents of the instance in a custom serialized form. The
-   * current implementation of this method assumes JDO API version 2.2.
-   * 
-   * @param instance an Object containing server-only data.
-   * @return a byte array containing a representation of the field.
-   * @throws SerializationException if the instance cannot be serialized by this
-   *           serializer.
-   */
-  @Override
-  public byte[] serializeServerData(Object instance)
-      throws SerializationException {
-    try {
-      Class<?> instanceClass = instance.getClass();
-
-      // Ensure the jdoFlags field is not set to LOAD_REQUIRED
-      Field jdoFlagsField = instanceClass.getDeclaredField(JDO_FLAGS_FIELD_NAME);
-      jdoFlagsField.setAccessible(true);
-      byte jdoFlags = ((Byte) jdoFlagsField.get(instance)).byteValue();
-      if (jdoFlags == JDO_FLAGS_LOAD_REQUIRED) {
-        throw new SerializationException("JDO persistent object data not loaded");
-      }
-
-      // Retrieve the jdoDetachedStateField and ensure it is non-null
-      Field jdoDetachedStateField = instanceClass.getDeclaredField(JDO_DETACHED_STATE_FIELD_NAME);
-      jdoDetachedStateField.setAccessible(true);
-      Object[] jdoDetachedState = (Object[]) jdoDetachedStateField.get(instance);
-      if (jdoDetachedState == null) {
-        throw new SerializationException("JDO persistent object has null jdoDetachedState");
-      }
-
-      ByteArrayOutputStream baos = new ByteArrayOutputStream();
-      ObjectOutputStream out = new ObjectOutputStream(baos);
-      
-      // Version 1 == JDO API version 2.2
-      out.writeInt(JDO_DETACHED_STATE_SERIALIZATION_VERSION);
-
-      // Write only the first 3 fields since the last field will be clobbered
-      // on return to the
-      // server.
-      for (int i = 0; i < 3; i++) {
-        Object entry = jdoDetachedState[i];
-        if (entry == null) {
-          // Null value
-          out.writeByte(JDO_DETACHED_STATE_ENTRY_NULL);
-        } else if (entry instanceof Externalizable) {
-          // Externalizable value
-          out.writeByte(JDO_DETACHED_STATE_ENTRY_EXTERNALIZABLE);
-          out.writeObject(entry.getClass().getCanonicalName());
-          ((Externalizable) entry).writeExternal(out);
-        } else if (entry instanceof Serializable) {
-          // Serializable value
-          out.writeByte(JDO_DETACHED_STATE_ENTRY_SERIALIZABLE);
-          out.writeObject(entry);
-        } else {
-          throw new SerializationException(
-              "Entry "
-              + i
-              + " of jdoDetachedState is neither null, Externalizable nor serializable");
-        }
-      }
-
-      out.close();
-      return baos.toByteArray();
-    } catch (IllegalAccessException e) {
-      throw new SerializationException(e);
-    } catch (IOException e) {
-      throw new SerializationException(
-          "An unexpected IOException occured while serializing jdoDetachedState",
-          e);
-    } catch (NoSuchFieldException e) {
-      throw new SerializationException(e);
-    }
-  }
-
-  /**
-   * Returns true if the instanceClass implements the javax.jdo.spi.Detachable
-   * interface.
-   * 
-   * @param instanceClass the class to be queried.
-   */
-  @Override
-  public boolean shouldSerialize(Class<?> instanceClass) {
-    return JAVAX_JDO_SPI_DETACHABLE_CLASS != null
-        && JAVAX_JDO_SPI_DETACHABLE_CLASS.isAssignableFrom(instanceClass);
-  }
-
-  @Override
-  public boolean shouldSkipField(Field field) {
-    return ("jdoDetachedState".equals(field.getName()))
-        && (JAVAX_JDO_SPI_DETACHABLE_CLASS != null)
-        && (JAVAX_JDO_SPI_DETACHABLE_CLASS.isAssignableFrom(field.getDeclaringClass()));
-  }
-}
diff --git a/user/src/com/google/gwt/user/server/rpc/impl/SerializabilityUtil.java b/user/src/com/google/gwt/user/server/rpc/impl/SerializabilityUtil.java
index 1664bd1..01e2bce 100644
--- a/user/src/com/google/gwt/user/server/rpc/impl/SerializabilityUtil.java
+++ b/user/src/com/google/gwt/user/server/rpc/impl/SerializabilityUtil.java
@@ -250,13 +250,6 @@
   }
 
   private static boolean fieldQualifiesForSerialization(Field field) {
-    // Check if the field will be handled by a ServerDataSerializer; if so, skip it here.
-    for (ServerDataSerializer serializer : ServerDataSerializer.getSerializers()) {
-      if (serializer.shouldSkipField(field)) {
-        return false;
-      }
-    }
-    
     if (Throwable.class == field.getDeclaringClass()) {
       /**
        * Only serialize Throwable's detailMessage field; all others are ignored.
@@ -318,7 +311,7 @@
 
   private static boolean isNotStaticTransientOrFinal(Field field) {
     /*
-     * Only serialize fields that are not static, transient or final.
+     * Only serialize fields that are not static, transient and final.
      */
     int fieldModifiers = field.getModifiers();
     return !Modifier.isStatic(fieldModifiers)
diff --git a/user/src/com/google/gwt/user/server/rpc/impl/ServerDataSerializer.java b/user/src/com/google/gwt/user/server/rpc/impl/ServerDataSerializer.java
deleted file mode 100644
index 607c44d..0000000
--- a/user/src/com/google/gwt/user/server/rpc/impl/ServerDataSerializer.java
+++ /dev/null
@@ -1,123 +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.impl;
-
-import com.google.gwt.user.client.rpc.SerializationException;
-
-import java.lang.reflect.Field;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.TreeMap;
-
-/**
- * An interface for serializing and deserializing portions of Object data that
- * are present in the server implementation but are not present in client code.
- * For example, some persistence frameworks make use of server-side bytecode
- * enhancement; the fields added by such enhancement are unknown to the client,
- * and therefore are not handled by normal GWT RPC mechanisms.
- * 
- * <p>
- * This portion of the interface is called from the
- * {@link ServerSerializationStreamReader} and {@link ServerSerializationStreamWriter} classes
- * as part of the server-side marshalling of data for RPC calls.
- * 
- * @see com.google.gwt.user.rebind.rpc.ClientDataSerializer
- */
-public abstract class ServerDataSerializer implements
-    Comparable<ServerDataSerializer> {
-
-  /**
-   * A mapping from ServerDataSerializer names to instances, sorted by name.
-   */
-  private static TreeMap<String, ServerDataSerializer> serializers =
-    new TreeMap<String, ServerDataSerializer>();
-
-  /**
-   * All active ServerDataSerializers must be initialized here and placed into
-   * the serializers map.
-   * 
-   * <p>
-   * The map must be kept in sync with the one in
-   * {@link com.google.gwt.user.rebind.rpc.ClientDataSerializer}.
-   */
-  static {
-    // Load and register a JdoDetachedStateSerializer
-    ServerDataSerializer serializer = JdoDetachedStateServerDataSerializer.getInstance();
-    serializers.put(serializer.getName(), serializer);
-  }
-
-  /**
-   * Returns a Collection of all ServerDataSerializer instances, ordered by name.
-   * The returned collection is unmodifiable.
-   */
-  public static Collection<ServerDataSerializer> getSerializers() {
-    return Collections.unmodifiableCollection(serializers.values());
-  }
-
-  /**
-   * Allow ServerDataSerialzer instances to be sorted by class name.
-   */
-  public int compareTo(ServerDataSerializer other) {
-    return getName().compareTo(other.getName());
-  }
-
-  /**
-   * Custom deserialize server-only data.
-   * 
-   * @param serializedData the serialized data, as an array of bytes, possible
-   *          null.
-   * @param instance the Object instance to be modified.
-   * @throws SerializationException if the field contents cannot be
-   *           reconstructed.
-   */
-  public abstract void deserializeServerData(byte[] serializedData,
-      Object instance) throws SerializationException;
-
-  /**
-   * Returns the name of this {@link ServerDataSerializer} instance, used to
-   * determine the sorting order when multiple serializers apply to a given
-   * class type.
-   * 
-   * <p>
-   * The name must be identical to that of the corresponding
-   * {@link ClientDataSerializer}.
-   */
-  public abstract String getName();
-
-  /**
-   * Custom serialize the contents of a server-only field.
-   * 
-   * @param instance an Object containing server-only data.
-   * @return a byte array containing a representation of the field.
-   * @throws SerializationException if the instance cannot be serialized by this serializer.
-   */
-  public abstract byte[] serializeServerData(Object instance)
-      throws SerializationException;
-
-  /**
-   * Returns true if the instanceClass should be processed by a ServerDataSerializer.
-   * 
-   * @param instanceClass the class to be queried.
-   */
-  public abstract boolean shouldSerialize(Class<?> instanceClass);
-  
-  /**
-   * Returns true if the given field should be skipped by the normal RPC mechanism.
-   * 
-   * @param field the field to be queried.
-   */
-  public abstract boolean shouldSkipField(Field field);
-}
diff --git a/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializationStreamReader.java b/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializationStreamReader.java
index dfd8f4a..7dbef17 100644
--- a/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializationStreamReader.java
+++ b/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializationStreamReader.java
@@ -18,7 +18,6 @@
 import com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException;
 import com.google.gwt.user.client.rpc.SerializationException;
 import com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamReader;
-import com.google.gwt.user.server.Base64Utils;
 import com.google.gwt.user.server.rpc.RPC;
 import com.google.gwt.user.server.rpc.SerializationPolicy;
 import com.google.gwt.user.server.rpc.SerializationPolicyProvider;
@@ -603,18 +602,6 @@
       deserializeImpl(SerializabilityUtil.hasCustomFieldSerializer(superClass),
           superClass, instance);
     }
-
-    /*
-     * Iterate through all ServerDataSerializers, in name order, allowing each
-     * to perform custom deserialization.
-     */
-    for (ServerDataSerializer serializer : ServerDataSerializer.getSerializers()) {
-      if (serializer.shouldSerialize(instanceClass)) {
-        String encodedData = readString();
-        byte[] serializedData = Base64Utils.fromBase64(encodedData);
-        serializer.deserializeServerData(serializedData, instance);
-      }
-    }
   }
 
   private Object deserializeImpl(Class<?> customSerializer,
diff --git a/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializationStreamWriter.java b/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializationStreamWriter.java
index fd15349..bb9d203 100644
--- a/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializationStreamWriter.java
+++ b/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializationStreamWriter.java
@@ -17,7 +17,6 @@
 
 import com.google.gwt.user.client.rpc.SerializationException;
 import com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter;
-import com.google.gwt.user.server.Base64Utils;
 import com.google.gwt.user.server.rpc.SerializationPolicy;
 
 import java.lang.reflect.Field;
@@ -658,18 +657,6 @@
     if (serializationPolicy.shouldSerializeFields(superClass)) {
       serializeImpl(instance, superClass);
     }
-
-    /*
-     * Iterate through all ServerDataSerializers, in name order, allowing each
-     * to perform custom serialization.
-     */
-    for (ServerDataSerializer serializer : ServerDataSerializer.getSerializers()) {
-      if (serializer.shouldSerialize(instanceClass)) {
-        byte[] serializedData = serializer.serializeServerData(instance);
-        String encodedData = Base64Utils.toBase64(serializedData);
-        writeString(encodedData);
-      }
-    }
   }
 
   private void serializeImpl(Object instance, Class<?> instanceClass)
diff --git a/user/super/com/google/gwt/emul/java/lang/Object.java b/user/super/com/google/gwt/emul/java/lang/Object.java
index cdc598c..e6fce34 100644
--- a/user/super/com/google/gwt/emul/java/lang/Object.java
+++ b/user/super/com/google/gwt/emul/java/lang/Object.java
@@ -15,7 +15,6 @@
  */
 package java.lang;
 
-import com.google.gwt.core.client.JavaScriptObject;
 import com.google.gwt.core.client.impl.Impl;
 
 /**
@@ -26,15 +25,6 @@
 public class Object {
 
   /**
-   * Used by {@link com.google.gwt.core.client.WeakMapping} in web mode
-   * to store an expando containing a String -> Object mapping.
-   * 
-   * @skip
-   */
-  @SuppressWarnings("unused")
-  private transient JavaScriptObject expando;
-
-  /**
    * magic magic magic.
    * 
    * @skip
diff --git a/user/super/com/google/gwt/user/translatable/com/google/gwt/core/client/WeakMapping.java b/user/super/com/google/gwt/user/translatable/com/google/gwt/core/client/WeakMapping.java
deleted file mode 100644
index 6359537..0000000
--- a/user/super/com/google/gwt/user/translatable/com/google/gwt/core/client/WeakMapping.java
+++ /dev/null
@@ -1,69 +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.core.client;
-
-import com.google.gwt.core.client.GwtScriptOnly;
-
-/**
- * A class associating a (String, Object) map with arbitrary source objects
- * (except for Strings). This implementation is used in web mode.
- */
-@GwtScriptOnly
-public class WeakMapping {
-
-  /*
-   * This implementation is used in web mode only. It stores the (key, value)
-   * maps in an expando field on their source objects.
-   */
-  
-  /**
-   * Returns the Object associated with the given key in the (key, value)
-   * mapping associated with the given Object instance.
-   * 
-   * @param instance the source Object.
-   * @param key a String key.
-   * @return an Object associated with that key on the given instance, or null.
-   * @throws IllegalArgumentException if instance is a String.
-   */
-  public static native Object get(Object instance, String key) /*-{
-    return instance.@java.lang.Object::expando[':' + key];
-  }-*/;
-
-  /**
-   * Associates a value with a given key in the (key, value) mapping associated
-   * with the given Object instance. Note that the key space is module-wide, so
-   * some care should be taken to choose sufficiently unique identifiers.
-   * 
-   * @param instance the source Object.
-   * @param key a String key.
-   * @param value the Object to associate with the key on the given source
-   *          Object.
-   * @throws IllegalArgumentException if instance is a String.
-   */
-  public static void set(Object instance, String key, Object value) {
-    if (instance instanceof String) {
-      throw new IllegalArgumentException("Cannot use Strings with WeakMapping");
-    }
-    setNative(instance, key, value);
-  }
-  
-  private static native void setNative(Object instance, String key, Object value) /*-{
-    if (!instance.@java.lang.Object::expando) {
-      instance.@java.lang.Object::expando = {};
-    }
-    instance.@java.lang.Object::expando[':' + key] = value;
-  }-*/;
-}
diff --git a/user/test/com/google/gwt/core/CoreSuite.java b/user/test/com/google/gwt/core/CoreSuite.java
index 0b3e8e3..18e67ad 100644
--- a/user/test/com/google/gwt/core/CoreSuite.java
+++ b/user/test/com/google/gwt/core/CoreSuite.java
@@ -19,7 +19,6 @@
 import com.google.gwt.core.client.HttpThrowableReporterTest;
 import com.google.gwt.core.client.JavaScriptExceptionTest;
 import com.google.gwt.core.client.JsArrayTest;
-import com.google.gwt.core.client.WeakMappingTest;
 import com.google.gwt.core.client.impl.StackTraceCreatorTest;
 import com.google.gwt.junit.tools.GWTTestSuite;
 
@@ -38,7 +37,6 @@
     suite.addTestSuite(JsArrayTest.class);
     suite.addTestSuite(GWTTest.class);
     suite.addTestSuite(StackTraceCreatorTest.class);
-    suite.addTestSuite(WeakMappingTest.class);
     // $JUnit-END$
 
     return suite;
diff --git a/user/test/com/google/gwt/core/client/WeakMappingTest.java b/user/test/com/google/gwt/core/client/WeakMappingTest.java
deleted file mode 100644
index 89b1f15..0000000
--- a/user/test/com/google/gwt/core/client/WeakMappingTest.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.core.client;
-
-import com.google.gwt.junit.client.GWTTestCase;
-
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Tests for the WeakMapping class.
- */
-public class WeakMappingTest extends GWTTestCase {
-
-  public WeakMappingTest() {
-  }
-  
-  public void testSetAndGet() {
-    Set<Integer> stronglyReferencedObjects = new HashSet<Integer>();
-    for (int i = 0; i < 1000; i++) {
-      Integer instance = new Integer(i);
-      if ((i % 5) == 0) {
-        stronglyReferencedObjects.add(instance);
-      }
-      WeakMapping.set(instance, "key", new Float(i));
-    }
-    
-    System.gc();
-    
-    for (Integer instance : stronglyReferencedObjects) {
-      Object value = WeakMapping.get(instance, "key");
-      assertNotNull(value);
-      assertTrue(value instanceof Float);
-      assert(((Float) value).floatValue() == instance.intValue());
-    }
-  }
-  
-  public void testNoStringsAllowed() {
-    boolean gotException = false;
-    try {
-      WeakMapping.set("A String", "key", "value");
-    } catch (IllegalArgumentException e) {
-      gotException = true;
-    }
-    
-    assertTrue(gotException);
-  }
-
-  @Override
-  public String getModuleName() {
-    return "com.google.gwt.core.Core";
-  }
-}
diff --git a/user/test/com/google/gwt/user/RPCSuite.java b/user/test/com/google/gwt/user/RPCSuite.java
index a1db671..4ded336 100644
--- a/user/test/com/google/gwt/user/RPCSuite.java
+++ b/user/test/com/google/gwt/user/RPCSuite.java
@@ -36,7 +36,6 @@
 import com.google.gwt.user.client.rpc.ValueTypesTestWithTypeObfuscation;
 import com.google.gwt.user.rebind.rpc.SerializableTypeOracleBuilderTest;
 import com.google.gwt.user.rebind.rpc.TypeHierarchyUtilsTest;
-import com.google.gwt.user.server.Base64Test;
 import com.google.gwt.user.server.rpc.RPCRequestTest;
 import com.google.gwt.user.server.rpc.RPCServletUtilsTest;
 import com.google.gwt.user.server.rpc.RPCTest;
@@ -76,7 +75,6 @@
     suite.addTestSuite(RPCRequestTest.class);
     suite.addTestSuite(FailedRequestTest.class);
     suite.addTestSuite(FailingRequestBuilderTest.class);
-    suite.addTestSuite(Base64Test.class);
 
     // GWTTestCases
     suite.addTestSuite(ValueTypesTest.class);
diff --git a/user/test/com/google/gwt/user/server/Base64Test.java b/user/test/com/google/gwt/user/server/Base64Test.java
deleted file mode 100644
index e0142af..0000000
--- a/user/test/com/google/gwt/user/server/Base64Test.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.user.server;
-
-import junit.framework.TestCase;
-
-/**
- * Tests for the {@link com.google.gwt.user.server.Base64Utils Base64Utils} class.
- */
-public class Base64Test extends TestCase {
-
-  /**
-   * Tests that base 64 encoding/decoding round trips are lossless. 
-   */
-  public static void testBase64Utils() {
-    base64RoundTrip((byte[]) null);
-    base64RoundTrip(new byte[0]);
-
-    java.util.Random r = new java.util.Random(100);
-    for (int i = 0; i < 10000; i++) {
-      base64RoundTrip(r);
-    }
-  }
-
-  private static void base64RoundTrip(java.util.Random r) {
-    int len = r.nextInt(10);
-    byte[] b1 = new byte[len];
-    r.nextBytes(b1);
-
-    base64RoundTrip(b1);
-  }
-
-  private static void base64RoundTrip(byte[] b1) {
-    String s = Base64Utils.toBase64(b1);
-    if (b1 == null) {
-      assert s == null;
-    } else {
-      assert s != null;
-      if (b1.length == 0) {
-        assert s.length() == 0;
-      } else {
-        assert s.length() != 0;
-      }
-    }
-
-    byte[] b2 = Base64Utils.fromBase64(s);
-    if (b1 == null) {
-      assert b2 == null;
-      return;
-    }
-    assert b2 != null;
-    assert (b1.length == b2.length);
-
-    for (int i = 0; i < b1.length; i++) {
-      assert b1[i] == b2[i];
-    }
-  }
-}