if(member.name == null) throw new Error("should never happen");
switch(tag) {
case CONSTANT_FIELDREF:
- return klass.getTypeClass().field(member.name.s, Type.fromDescriptor(member.type.s));
+ return klass.getTypeClass().field(member.name.s, member.type.s);
case CONSTANT_METHODREF:
case CONSTANT_INTERFACEMETHODREF:
Type.Class.Method m = klass.getTypeClass().method(member.name.s,member.type.s);
this(in.readShort(), cp.getUtf8KeyByIndex(in.readShort()), c, in, cp); }
private MethodGen(short flags, String name, Type.Class c, DataInput in, ConstantPool cp) throws IOException {
- this(flags, name, c.method(name+cp.getUtf8KeyByIndex(in.readShort())), c, in, cp); }
+ this(flags, name, c.method(name,cp.getUtf8KeyByIndex(in.readShort())), c, in, cp); }
private MethodGen(short flags, String name, Type.Class.Method m,
Type.Class c, DataInput in, ConstantPool cp) throws IOException {
m.super(flags, new ClassFile.AttrGen(in,cp));
}
public Field field(String name, Type type) { return new Field(name, type); }
+ public Field field(String name, String descriptor) { return field(name,Type.fromDescriptor(descriptor)); }
public Method method(String name, Type returnType, Type[] argTypes) { return new Method(name, returnType, argTypes); }
- public Method method(String leftCrap, String rightCrap) { return method(leftCrap+rightCrap); }
/** see JVM Spec section 2.10.2 */
- public Method method(String signature) {
+ public Method method(String name, String descriptor) {
// FEATURE: This parser is ugly but it works (and shouldn't be a problem) might want to clean it up though
- String name = signature.substring(0, signature.indexOf('('));
- String s = signature.substring(signature.indexOf('('));
+ String s = descriptor;
if(!s.startsWith("(")) throw new IllegalArgumentException("invalid method type descriptor");
int p = s.indexOf(')');
if(p == -1) throw new IllegalArgumentException("invalid method type descriptor");
// Initializers //////////////////////////////////////////////////////////////////////////////
public static Type.Class System_class = Type.Class.instance("java.lang.System");
- public static Type.Class.Method System_arraycopy = System_class.method("arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V");
+ public static Type.Class.Method System_arraycopy = System_class.method("arraycopy","(Ljava/lang/Object;ILjava/lang/Object;II)V");
public static Type.Class Gladiator_class = Type.Class.instance("org.ibex.classgen.opt.Arena$Gladiator");
boolean implementsGladiator(Type t) { return t instanceof Type.Class && implementsGladiator((Type.Class)t);}