1.1 --- a/emul/src/main/java/java/lang/Class.java Thu Nov 29 21:58:17 2012 +0100
1.2 +++ b/emul/src/main/java/java/lang/Class.java Sat Dec 01 08:52:30 2012 +0100
1.3 @@ -27,6 +27,7 @@
1.4
1.5 import java.io.InputStream;
1.6 import java.lang.annotation.Annotation;
1.7 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
1.8
1.9 /**
1.10 * Instances of the class {@code Class} represent classes and
1.11 @@ -382,13 +383,12 @@
1.12 * represented by this object.
1.13 */
1.14 public String getName() {
1.15 - throw new UnsupportedOperationException();
1.16 -// String name = this.name;
1.17 -// if (name == null)
1.18 -// this.name = name = getName0();
1.19 -// return name;
1.20 + return jvmName().replace('/', '.');
1.21 }
1.22
1.23 + @JavaScriptBody(args = "self", body = "return self.jvmName;")
1.24 + private native String jvmName();
1.25 +
1.26 /**
1.27 * Returns the {@code Class} representing the superclass of the entity
1.28 * (class, interface, primitive type or void) represented by this
2.1 --- a/emul/src/main/java/java/lang/Object.java Thu Nov 29 21:58:17 2012 +0100
2.2 +++ b/emul/src/main/java/java/lang/Object.java Sat Dec 01 08:52:30 2012 +0100
2.3 @@ -25,6 +25,8 @@
2.4
2.5 package java.lang;
2.6
2.7 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
2.8 +
2.9 /**
2.10 * Class {@code Object} is the root of the class hierarchy.
2.11 * Every class has {@code Object} as a superclass. All objects,
2.12 @@ -61,6 +63,7 @@
2.13 * @see Class Literals, section 15.8.2 of
2.14 * <cite>The Java™ Language Specification</cite>.
2.15 */
2.16 + @JavaScriptBody(args="self", body="return self.constructor.$class;")
2.17 public final native Class<?> getClass();
2.18
2.19 /**
3.1 --- a/javap/src/main/java/org/apidesign/javap/ClassData.java Thu Nov 29 21:58:17 2012 +0100
3.2 +++ b/javap/src/main/java/org/apidesign/javap/ClassData.java Sat Dec 01 08:52:30 2012 +0100
3.3 @@ -548,10 +548,11 @@
3.4 return in.toString();
3.5 }
3.6 case CONSTANT_CLASS:
3.7 + String jn = javaName(getClassName(cpx));
3.8 if (textual) {
3.9 - return "new java_lang_Class"; // XXX temporary JS
3.10 + return jn.replace('/', '_') + ".$class";
3.11 }
3.12 - return javaName(getClassName(cpx));
3.13 + return jn;
3.14 case CONSTANT_STRING:
3.15 String sv = stringValue(((CPX)x).cpx, textual);
3.16 if (textual) {
4.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Nov 29 21:58:17 2012 +0100
4.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sat Dec 01 08:52:30 2012 +0100
4.3 @@ -111,6 +111,8 @@
4.4 for (String superInterface : jc.getSuperInterfaces()) {
4.5 out.append("\n p.$instOf_").append(superInterface.replace('/', '_')).append(" = true;");
4.6 }
4.7 + out.append("\n CLS.$class = java_lang_Class(true);");
4.8 + out.append("\n CLS.$class.jvmName = '").append(jc.getClassName()).append("';");
4.9 out.append("\n if (arguments.length === 0) {");
4.10 out.append("\n return new CLS();");
4.11 out.append("\n }");
5.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java Thu Nov 29 21:58:17 2012 +0100
5.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java Sat Dec 01 08:52:30 2012 +0100
5.3 @@ -44,6 +44,12 @@
5.4 assertExec("Classes are not equal", Classes.class, "differenceInClassesZ", Double.valueOf(1.0));
5.5 }
5.6
5.7 + @Test public void javaInstanceName() throws Exception {
5.8 + assertEquals(Classes.classForInstance(), "java.io.IOException");
5.9 + }
5.10 + @Test public void jsInstanceName() throws Exception {
5.11 + assertExec("I/O name", Classes.class, "classForInstanceLjava_lang_String", "java.io.IOException");
5.12 + }
5.13 @Test public void javaName() throws Exception {
5.14 assertEquals(Classes.name(), "java.io.IOException");
5.15 }
6.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java Thu Nov 29 21:58:17 2012 +0100
6.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java Sat Dec 01 08:52:30 2012 +0100
6.3 @@ -34,6 +34,10 @@
6.4 return c1 != c2;
6.5 }
6.6
6.7 + public static String classForInstance() {
6.8 + return new IOException().getClass().getName().toString();
6.9 + }
6.10 +
6.11 public static String name() {
6.12 return IOException.class.getName().toString();
6.13 }