Temporary hack to allow forcible removal of class-literal strings by inheriting
EmulationNoClassLits.gwt.xml. Doing so will break RPC and any other code that
depends upon the results of Class.getName().
Patch by: jgw
Review by: rjrjr (desk check)
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@4586 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/super/com/google/gwt/overlayemul/EmulationNoClassLits.gwt.xml b/user/super/com/google/gwt/overlayemul/EmulationNoClassLits.gwt.xml
new file mode 100644
index 0000000..83f97c5
--- /dev/null
+++ b/user/super/com/google/gwt/overlayemul/EmulationNoClassLits.gwt.xml
@@ -0,0 +1,17 @@
+<!-- -->
+<!-- Copyright 2007 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>
+ <super-source/>
+</module>
diff --git a/user/super/com/google/gwt/overlayemul/java/lang/Class.java b/user/super/com/google/gwt/overlayemul/java/lang/Class.java
new file mode 100644
index 0000000..24584f2
--- /dev/null
+++ b/user/super/com/google/gwt/overlayemul/java/lang/Class.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright 2006 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 java.lang;
+
+import com.google.gwt.core.client.JavaScriptObject;
+
+/**
+ * Generally unsupported. This class is provided so that the GWT compiler can
+ * choke down class literal references.
+ *
+ * @param <T> the type of the object
+ */
+public final class Class<T> {
+
+ private static final int PRIMITIVE = 0x00000001;
+ private static final int INTERFACE = 0x00000002;
+ private static final int ARRAY = 0x00000004;
+ private static final int ENUM = 0x00000008;
+
+ /**
+ * Create a Class object for an array.
+ *
+ * @skip
+ */
+ static <T> Class<T> createForArray(String packageName, String className) {
+ // Initialize here to avoid method inliner
+ Class<T> clazz = new Class<T>();
+ clazz.modifiers = ARRAY;
+ clazz.superclass = Object.class;
+ return clazz;
+ }
+
+ /**
+ * Create a Class object for a class.
+ *
+ * @skip
+ */
+ static <T> Class<T> createForClass(String packageName, String className,
+ Class<? super T> superclass) {
+ // Initialize here to avoid method inliner
+ Class<T> clazz = new Class<T>();
+ clazz.superclass = superclass;
+ return clazz;
+ }
+
+ /**
+ * Create a Class object for an enum.
+ *
+ * @skip
+ */
+ static <T> Class<T> createForEnum(String packageName, String className,
+ Class<? super T> superclass, JavaScriptObject enumConstantsFunc) {
+ // Initialize here to avoid method inliner
+ Class<T> clazz = new Class<T>();
+ clazz.modifiers = ENUM;
+ clazz.superclass = superclass;
+ clazz.enumConstantsFunc = enumConstantsFunc;
+ return clazz;
+ }
+
+ /**
+ * Create a Class object for an interface.
+ *
+ * @skip
+ */
+ static <T> Class<T> createForInterface(String packageName, String className) {
+ // Initialize here to avoid method inliner
+ Class<T> clazz = new Class<T>();
+ clazz.modifiers = INTERFACE;
+ return clazz;
+ }
+
+ /**
+ * Create a Class object for a primitive.
+ *
+ * @skip
+ */
+ static Class<?> createForPrimitive(String packageName, String className) {
+ // Initialize here to avoid method inliner
+ Class<?> clazz = new Class<Object>();
+ clazz.modifiers = PRIMITIVE;
+ return clazz;
+ }
+
+ @SuppressWarnings("unused")
+ private JavaScriptObject enumConstantsFunc;
+
+ private int modifiers;
+
+ private Class<? super T> superclass;
+
+ /**
+ * Not publicly instantiable.
+ *
+ * @skip
+ */
+ private Class() {
+ }
+
+ public boolean desiredAssertionStatus() {
+ // This body is ignored by the JJS compiler and a new one is
+ // synthesized at compile-time based on the actual compilation arguments.
+ return false;
+ }
+
+ public native T[] getEnumConstants() /*-{
+ return this.@java.lang.Class::enumConstantsFunc
+ && (this.@java.lang.Class::enumConstantsFunc)();
+ }-*/;
+
+ public String getName() {
+ return "[class]";
+ }
+
+ public Class<? super T> getSuperclass() {
+ return superclass;
+ }
+
+ public boolean isArray() {
+ return (modifiers & ARRAY) != 0;
+ }
+
+ public boolean isEnum() {
+ return (modifiers & ENUM) != 0;
+ }
+
+ public boolean isInterface() {
+ return (modifiers & INTERFACE) != 0;
+ }
+
+ public boolean isPrimitive() {
+ return (modifiers & PRIMITIVE) != 0;
+ }
+
+ public String toString() {
+ return (isInterface() ? "interface " : (isPrimitive() ? "" : "class "))
+ + getName();
+ }
+}