1.1 --- a/emul/src/main/java/java/lang/reflect/Array.java Fri Jan 18 17:04:16 2013 +0100
1.2 +++ b/emul/src/main/java/java/lang/reflect/Array.java Fri Jan 18 18:35:17 2013 +0100
1.3 @@ -143,7 +143,12 @@
1.4 */
1.5 public static Object newInstance(Class<?> componentType, int... dimensions)
1.6 throws IllegalArgumentException, NegativeArraySizeException {
1.7 - return multiNewArray(componentType, dimensions);
1.8 + StringBuilder sig = new StringBuilder();
1.9 + for (int i = 1; i < dimensions.length; i++) {
1.10 + sig.append('[');
1.11 + }
1.12 + sig.append(findSignature(componentType));
1.13 + return multiNewArray(sig.toString(), dimensions, 0);
1.14 }
1.15
1.16 /**
1.17 @@ -521,9 +526,18 @@
1.18 )
1.19 private static native Object newArray(boolean primitive, String sig, int length);
1.20
1.21 - private static native Object multiNewArray(Class componentType,
1.22 - int[] dimensions)
1.23 - throws IllegalArgumentException, NegativeArraySizeException;
1.24 + private static Object multiNewArray(String sig, int[] dims, int index)
1.25 + throws IllegalArgumentException, NegativeArraySizeException {
1.26 + if (dims.length == index + 1) {
1.27 + return newArray(sig.length() == 2, sig, dims[index]);
1.28 + }
1.29 + Object[] arr = (Object[]) newArray(false, sig, dims[index]);
1.30 + String compsig = sig.substring(1);
1.31 + for (int i = 0; i < arr.length; i++) {
1.32 + arr[i] = multiNewArray(compsig, dims, index + 1);
1.33 + }
1.34 + return arr;
1.35 + }
1.36
1.37
1.38