# HG changeset patch # User Jaroslav Tulach # Date 1354348350 -3600 # Node ID 25e350c6385f65cd35d0afc45d39af84b9b46069 # Parent 860933a7787f086c22b7e26cfe962f91bf2ce5ed Adding each constructor function field diff -r 860933a7787f -r 25e350c6385f emul/src/main/java/java/lang/Class.java --- a/emul/src/main/java/java/lang/Class.java Thu Nov 29 21:58:17 2012 +0100 +++ b/emul/src/main/java/java/lang/Class.java Sat Dec 01 08:52:30 2012 +0100 @@ -27,6 +27,7 @@ import java.io.InputStream; import java.lang.annotation.Annotation; +import org.apidesign.bck2brwsr.core.JavaScriptBody; /** * Instances of the class {@code Class} represent classes and @@ -382,13 +383,12 @@ * represented by this object. */ public String getName() { - throw new UnsupportedOperationException(); -// String name = this.name; -// if (name == null) -// this.name = name = getName0(); -// return name; + return jvmName().replace('/', '.'); } + @JavaScriptBody(args = "self", body = "return self.jvmName;") + private native String jvmName(); + /** * Returns the {@code Class} representing the superclass of the entity * (class, interface, primitive type or void) represented by this diff -r 860933a7787f -r 25e350c6385f emul/src/main/java/java/lang/Object.java --- a/emul/src/main/java/java/lang/Object.java Thu Nov 29 21:58:17 2012 +0100 +++ b/emul/src/main/java/java/lang/Object.java Sat Dec 01 08:52:30 2012 +0100 @@ -25,6 +25,8 @@ package java.lang; +import org.apidesign.bck2brwsr.core.JavaScriptBody; + /** * Class {@code Object} is the root of the class hierarchy. * Every class has {@code Object} as a superclass. All objects, @@ -61,6 +63,7 @@ * @see Class Literals, section 15.8.2 of * The Java™ Language Specification. */ + @JavaScriptBody(args="self", body="return self.constructor.$class;") public final native Class getClass(); /** diff -r 860933a7787f -r 25e350c6385f javap/src/main/java/org/apidesign/javap/ClassData.java --- a/javap/src/main/java/org/apidesign/javap/ClassData.java Thu Nov 29 21:58:17 2012 +0100 +++ b/javap/src/main/java/org/apidesign/javap/ClassData.java Sat Dec 01 08:52:30 2012 +0100 @@ -548,10 +548,11 @@ return in.toString(); } case CONSTANT_CLASS: + String jn = javaName(getClassName(cpx)); if (textual) { - return "new java_lang_Class"; // XXX temporary JS + return jn.replace('/', '_') + ".$class"; } - return javaName(getClassName(cpx)); + return jn; case CONSTANT_STRING: String sv = stringValue(((CPX)x).cpx, textual); if (textual) { diff -r 860933a7787f -r 25e350c6385f vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Nov 29 21:58:17 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sat Dec 01 08:52:30 2012 +0100 @@ -111,6 +111,8 @@ for (String superInterface : jc.getSuperInterfaces()) { out.append("\n p.$instOf_").append(superInterface.replace('/', '_')).append(" = true;"); } + out.append("\n CLS.$class = java_lang_Class(true);"); + out.append("\n CLS.$class.jvmName = '").append(jc.getClassName()).append("';"); out.append("\n if (arguments.length === 0) {"); out.append("\n return new CLS();"); out.append("\n }"); diff -r 860933a7787f -r 25e350c6385f vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java Thu Nov 29 21:58:17 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java Sat Dec 01 08:52:30 2012 +0100 @@ -44,6 +44,12 @@ assertExec("Classes are not equal", Classes.class, "differenceInClassesZ", Double.valueOf(1.0)); } + @Test public void javaInstanceName() throws Exception { + assertEquals(Classes.classForInstance(), "java.io.IOException"); + } + @Test public void jsInstanceName() throws Exception { + assertExec("I/O name", Classes.class, "classForInstanceLjava_lang_String", "java.io.IOException"); + } @Test public void javaName() throws Exception { assertEquals(Classes.name(), "java.io.IOException"); } diff -r 860933a7787f -r 25e350c6385f vm/src/test/java/org/apidesign/vm4brwsr/Classes.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java Thu Nov 29 21:58:17 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java Sat Dec 01 08:52:30 2012 +0100 @@ -34,6 +34,10 @@ return c1 != c2; } + public static String classForInstance() { + return new IOException().getClass().getName().toString(); + } + public static String name() { return IOException.class.getName().toString(); }