Added support for Class.getCanonicalName() to JRE emulation.
Change-Id: Ie3965cde15bfa68f57195e814c9cd6ffb7afb8a2
diff --git a/user/super/com/google/gwt/emul/java/lang/Class.java b/user/super/com/google/gwt/emul/java/lang/Class.java
index 5b52b34..92a340d 100644
--- a/user/super/com/google/gwt/emul/java/lang/Class.java
+++ b/user/super/com/google/gwt/emul/java/lang/Class.java
@@ -57,12 +57,15 @@
if (this.isPrimitive()) {
// Primitives have an additional prepended space.
clazz.typeName = this.simpleName.substring(1);
+ clazz.canonicalName = clazz.typeName;
} else {
clazz.typeName = "L" + this.typeName;
+ clazz.canonicalName = this.typeName.replace('$', '.');
}
clazz.simpleName = this.simpleName;
for (int i = 0; i < dimensions; i++) {
clazz.typeName = "[" + clazz.typeName;
+ clazz.canonicalName += "[]";
clazz.simpleName += "[]";
}
if (!this.isPrimitive()) {
@@ -147,6 +150,7 @@
Class<?> clazz = new Class<Object>();
if (clazz.isClassMetadataEnabled()) {
clazz.typeName = className;
+ clazz.canonicalName = className;
clazz.simpleName = primitiveTypeId;
} else {
synthesizePrimitiveNamesFromTypeId(clazz, primitiveTypeId);
@@ -224,6 +228,11 @@
private static native void initializeNames(Class<?> clazz, String packageName,
String className) /*-{
clazz.@java.lang.Class::typeName = packageName + className;
+ if (className.indexOf("$") == -1) {
+ clazz.@java.lang.Class::canonicalName = clazz.@java.lang.Class::typeName;
+ } else {
+ clazz.@java.lang.Class::canonicalName = packageName + className.replace("$", ".");
+ }
clazz.@java.lang.Class::simpleName = className;
}-*/;
@@ -241,6 +250,7 @@
clazz.@java.lang.Class::typeName = "Class$" +
(!!typeId ? "S" + typeId : "" + clazz.@java.lang.Class::sequentialId);
+ clazz.@java.lang.Class::canonicalName = clazz.@java.lang.Class::typeName;
clazz.@java.lang.Class::simpleName = clazz.@java.lang.Class::typeName;
}-*/;
@@ -251,6 +261,7 @@
*/
static native void synthesizePrimitiveNamesFromTypeId(Class<?> clazz, String primitiveTypeId) /*-{
clazz.@java.lang.Class::typeName = "Class$" + primitiveTypeId;
+ clazz.@java.lang.Class::canonicalName = clazz.@java.lang.Class::typeName;
clazz.@java.lang.Class::simpleName = clazz.@java.lang.Class::typeName;
}-*/;
@@ -271,6 +282,8 @@
private String typeName;
+ private String canonicalName;
+
private JavaScriptObject typeId;
private JavaScriptObject arrayLiterals;
@@ -295,6 +308,10 @@
return false;
}
+ public String getCanonicalName() {
+ return canonicalName;
+ }
+
public Class<?> getComponentType() {
return componentType;
}
diff --git a/user/test/com/google/gwt/dev/jjs/test/ClassObjectTest.java b/user/test/com/google/gwt/dev/jjs/test/ClassObjectTest.java
index ca6add1..d5007f1 100644
--- a/user/test/com/google/gwt/dev/jjs/test/ClassObjectTest.java
+++ b/user/test/com/google/gwt/dev/jjs/test/ClassObjectTest.java
@@ -57,9 +57,12 @@
assertEquals(Object.class, o.getClass().getSuperclass());
assertEquals("[Lcom.google.gwt.dev.jjs.test.ClassObjectTest$Foo;",
o.getClass().getName());
+ assertEquals("com.google.gwt.dev.jjs.test.ClassObjectTest.Foo[]",
+ o.getClass().getCanonicalName());
assertEquals("class [Lcom.google.gwt.dev.jjs.test.ClassObjectTest$Foo;",
o.getClass().toString());
}
+
assertTrue(o.getClass().isArray());
assertFalse(o.getClass().isEnum());
assertFalse(o.getClass().isInterface());
@@ -88,6 +91,8 @@
assertEquals(Object.class, o.getClass().getSuperclass());
assertEquals("com.google.gwt.dev.jjs.test.ClassObjectTest$Foo",
Foo.class.getName());
+ assertEquals("com.google.gwt.dev.jjs.test.ClassObjectTest.Foo",
+ Foo.class.getCanonicalName());
assertEquals("class com.google.gwt.dev.jjs.test.ClassObjectTest$Foo",
Foo.class.toString());
}
@@ -103,6 +108,8 @@
if (expectClassMetadata()) {
assertEquals("com.google.gwt.dev.jjs.test.ClassObjectTest$Bar",
getBarClass().getName());
+ assertEquals("com.google.gwt.dev.jjs.test.ClassObjectTest.Bar",
+ getBarClass().getCanonicalName());
}
}
@@ -113,6 +120,8 @@
assertEquals(Enum.class, o.getClass().getSuperclass());
assertEquals("com.google.gwt.dev.jjs.test.ClassObjectTest$Bar",
o.getClass().getName());
+ assertEquals("com.google.gwt.dev.jjs.test.ClassObjectTest.Bar",
+ o.getClass().getCanonicalName());
assertEquals("class com.google.gwt.dev.jjs.test.ClassObjectTest$Bar",
o.getClass().toString());
}
@@ -147,6 +156,8 @@
if (expectClassMetadata()) {
assertEquals("com.google.gwt.dev.jjs.test.ClassObjectTest$IFoo",
IFoo.class.getName());
+ assertEquals("com.google.gwt.dev.jjs.test.ClassObjectTest.IFoo",
+ IFoo.class.getCanonicalName());
assertEquals(
"interface com.google.gwt.dev.jjs.test.ClassObjectTest$IFoo",
IFoo.class.toString());
@@ -162,6 +173,7 @@
assertNull(int.class.getSuperclass());
if (expectClassMetadata()) {
assertEquals("int", int.class.getName());
+ assertEquals("int", int.class.getCanonicalName());
assertEquals("int", int.class.toString());
}
assertFalse(int.class.isArray());