+ public Method method(String name, Type returnType, Type[] argTypes) { return new Method(name, returnType, argTypes); }
+ public Method method(String name, String typeDescriptor) {
+ // FEATURE: This parser is ugly but it works (and shouldn't be a problem) might want to clean it up though
+ String s = typeDescriptor;
+ if(!s.startsWith("(")) throw new IllegalArgumentException("invalid method type descriptor");
+ int p = s.indexOf(')');
+ if(p == -1) throw new IllegalArgumentException("invalid method type descriptor");
+ String argsDesc = s.substring(1,p);
+ String retDesc = s.substring(p+1);
+ Type[] argsBuf = new Type[argsDesc.length()];
+ int i;
+ for(i=0,p=0;argsDesc.length() > 0;i++,p=0) {
+ while(p < argsDesc.length() && argsDesc.charAt(p) == '[') p++;
+ if(p == argsDesc.length()) throw new IllegalArgumentException("invalid method type descriptor");
+ if(argsDesc.charAt(p) == 'L') {
+ p = argsDesc.indexOf(';');
+ if(p == -1) throw new IllegalArgumentException("invalid method type descriptor");
+ }
+ argsBuf[i] = Type.instance(argsDesc.substring(0,p+1));
+ argsDesc = argsDesc.substring(p+1);
+ }
+ Type args[] = new Type[i];
+ System.arraycopy(argsBuf,0,args,0,i);
+ return method(name, Type.instance(retDesc), args);
+ }