emul/src/main/java/java/lang/Class.java
brancharrays
changeset 450 f2891b169df3
parent 448 ac05de5a8786
child 451 84e6b97c468c
     1.1 --- a/emul/src/main/java/java/lang/Class.java	Mon Jan 14 18:21:48 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.