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(); + } +}