public JavaArray createMultiArray(int dims, int[] dimSizes, Descriptor tp) throws BadConversionE, OperandStackE, JavaException, LinkE, BadDescriptorE { String s = tp.getStringDescriptor(); s = s.substring(tp.getNumDimensions() - dims + 1, s.length()); Descriptor compClassDesc = new Descriptor(s); Descriptor arrayClassDesc = new Descriptor("[" + s); InternalClass componentClass = findClass(compClassDesc); InternalClass arrayClass = findClass(arrayClassDesc); int ds = dims - 1; JavaArray ja = new JavaArray(arrayClass, componentClass, dimSizes[ds]); if (dims == 1) { // basic array return ja; } else { // more dims to go // fill in all values of this array from sub-arrays for (int i = 0; i < dimSizes[ds]; i++) { JavaArray jasub = createMultiArray(dims - 1, dimSizes, tp); try { ja.store(i, new JavaNonnullReferenceValue(jasub)); } catch (JavaArrayOutOfBoundsE e) { e.printStackTrace(); throw new RuntimeException("illegal array size", e); } } } return ja; }