private VmType[] split(char[] signature, AbstractVmClassLoader loader)
private VmType[] split(char[] signature, VmClassLoader loader)
	private VmType[] split(char[] signature, AbstractVmClassLoader loader)		throws ClassNotFoundException {		ArrayList list = new ArrayList();		int ofs = 0;		final int len = signature.length;		if (signature[ofs] == '(') {			ofs++;		}		while (ofs < len) {			int start = ofs;			char ch = signature[ofs++];			VmType vmClass;			switch (ch) {				case ')' :					continue;				case 'B' : // Byte				case 'Z' : // Boolean				case 'C' : // Char				case 'S' : // Short				case 'I' : // Int				case 'F' : // Float				case 'D' : // Double				case 'J' : // Long				case 'V' : // Void					vmClass = VmType.getPrimitiveClass(ch);					break;				case '[' : // Array					{						while (signature[ofs] == '[') {							ofs++;						}						if (signature[ofs] == 'L') {							ofs++;							while (signature[ofs] != ';') {								ofs++;							}						}						ofs++;						String sig = new String(signature, start, ofs - start).replace('/', '.');						vmClass = loader.loadClass(sig, true);					}					break;				case 'L' : // Object					{						start++;						while (signature[ofs] != ';') {							ofs++;						}						String sig = new String(signature, start, ofs - start).replace('/', '.');						ofs++;						vmClass = loader.loadClass(sig, true);					}					break;				default :					throw new ClassFormatError(						"Unknown signature character " + ch);			}			list.add(vmClass);		}		return (VmType[])list.toArray(new VmType[list.size()]);	}