1.1 --- a/emul/src/main/java/java/lang/Class.java Tue Jan 15 09:23:46 2013 +0100
1.2 +++ b/emul/src/main/java/java/lang/Class.java Tue Jan 15 09:32:11 2013 +0100
1.3 @@ -147,7 +147,12 @@
1.4 public static Class<?> forName(String className)
1.5 throws ClassNotFoundException {
1.6 if (className.startsWith("[")) {
1.7 - return defineArray(className);
1.8 + Class<?> arrType = defineArray(className);
1.9 + Class<?> c = arrType;
1.10 + while (c != null && c.isArray()) {
1.11 + c = c.getComponentType0(); // verify component type is sane
1.12 + }
1.13 + return arrType;
1.14 }
1.15 Class<?> c = loadCls(className, className.replace('.', '_'));
1.16 if (c == null) {
2.1 --- a/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java Tue Jan 15 09:23:46 2013 +0100
2.2 +++ b/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java Tue Jan 15 09:32:11 2013 +0100
2.3 @@ -21,6 +21,8 @@
2.4 import java.util.Arrays;
2.5 import java.util.Collections;
2.6 import java.util.List;
2.7 +import java.util.logging.Level;
2.8 +import java.util.logging.Logger;
2.9 import org.apidesign.bck2brwsr.core.JavaScriptBody;
2.10 import org.apidesign.bck2brwsr.vmtest.Compare;
2.11 import org.apidesign.bck2brwsr.vmtest.VMTest;
2.12 @@ -118,6 +120,22 @@
2.13 @Compare public String classForByte() throws Exception {
2.14 return Class.forName("[Z").getName();
2.15 }
2.16 +
2.17 + @Compare public String classForUnknownArray() {
2.18 + try {
2.19 + return Class.forName("[W").getName();
2.20 + } catch (Exception ex) {
2.21 + return ex.getClass().getName();
2.22 + }
2.23 + }
2.24 +
2.25 + @Compare public String classForUnknownDeepArray() {
2.26 + try {
2.27 + return Class.forName("[[[[[W").getName();
2.28 + } catch (Exception ex) {
2.29 + return ex.getClass().getName();
2.30 + }
2.31 + }
2.32
2.33 @Compare public String componentGetNameForObjectArray() {
2.34 return (new Object[3]).getClass().getComponentType().getName();