1.1 --- a/emul/src/main/java/java/lang/Class.java Tue Jan 15 09:00:43 2013 +0100
1.2 +++ b/emul/src/main/java/java/lang/Class.java Tue Jan 15 09:01:19 2013 +0100
1.3 @@ -145,7 +145,10 @@
1.4 * @exception ClassNotFoundException if the class cannot be located
1.5 */
1.6 public static Class<?> forName(String className)
1.7 - throws ClassNotFoundException {
1.8 + throws ClassNotFoundException {
1.9 + if (className.startsWith("[")) {
1.10 + return defineArray(className);
1.11 + }
1.12 Class<?> c = loadCls(className, className.replace('.', '_'));
1.13 if (c == null) {
1.14 throw new ClassNotFoundException(className);
1.15 @@ -1013,6 +1016,18 @@
1.16 return null;
1.17 }
1.18
1.19 + @JavaScriptBody(args = { "sig" }, body =
1.20 + "var c = Array[sig];\n" +
1.21 + "if (c) return c;\n" +
1.22 + "c = vm.java_lang_Class(true);\n" +
1.23 + "c.jvmName = sig;\n" +
1.24 + "c.superclass = vm.java_lang_Object(false).$class;\n" +
1.25 + "c.array = true;\n" +
1.26 + "Array[sig] = c;\n" +
1.27 + "return c;"
1.28 + )
1.29 + private static native Class<?> defineArray(String sig);
1.30 +
1.31 /**
1.32 * Returns true if and only if this class was declared as an enum in the
1.33 * source code.
2.1 --- a/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Tue Jan 15 09:00:43 2013 +0100
2.2 +++ b/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Tue Jan 15 09:01:19 2013 +0100
2.3 @@ -11,14 +11,7 @@
2.4 return this;
2.5 };
2.6 Array.prototype.getClass__Ljava_lang_Class_2 = function() {
2.7 - var c = Array[this.jvmName];
2.8 - if (c) return c;
2.9 - c = vm.java_lang_Class(true);
2.10 - c.jvmName = this.jvmName;
2.11 - c.superclass = vm.java_lang_Object(false).$class;
2.12 - c.array = true;
2.13 - Array[this.jvmName] = c;
2.14 - return c;
2.15 + return vm.java_lang_Class(false).defineArray__Ljava_lang_Class_2Ljava_lang_String_2(this.jvmName);
2.16 };
2.17 Array.prototype.clone__Ljava_lang_Object_2 = function() {
2.18 var s = this.length;