+ public static Type fromDescriptor(String descriptor) {
+ if(descriptor.equals("V")) return VOID;
+ if(descriptor.equals("I")) return INT;
+ if(descriptor.equals("J")) return LONG;
+ if(descriptor.equals("Z")) return BOOLEAN;
+ if(descriptor.equals("D")) return DOUBLE;
+ if(descriptor.equals("F")) return FLOAT;
+ if(descriptor.equals("B")) return BYTE;
+ if(descriptor.equals("C")) return CHAR;
+ if(descriptor.equals("S")) return SHORT;
+ if(descriptor.endsWith("[")) return new Type.Array(fromDescriptor(descriptor.substring(0, descriptor.indexOf('['))),
+ descriptor.length() - descriptor.indexOf('['));
+ if(Type.Object.validDescriptorString(descriptor)) return new Type.Object(descriptor);
+ return null;
+ }
+