From: brian Date: Sat, 2 Jul 2005 22:48:19 +0000 (+0000) Subject: Class.method(sig) X-Git-Url: http://git.megacz.com/?p=org.ibex.classgen.git;a=commitdiff_plain;h=5a08820e18996e02dcf0ba12f502ba7f0bc781ea Class.method(sig) darcs-hash:20050702224819-24bed-7ad3aaf47e340cfd7e1868e60d94f9e6e1284d0f.gz --- diff --git a/src/org/ibex/classgen/ConstantPool.java b/src/org/ibex/classgen/ConstantPool.java index eb2a565..17ea634 100644 --- a/src/org/ibex/classgen/ConstantPool.java +++ b/src/org/ibex/classgen/ConstantPool.java @@ -126,7 +126,7 @@ class ConstantPool implements CGConst { return klass.getTypeClass().field(member.name.s, Type.instance(member.type.s)); case CONSTANT_METHODREF: case CONSTANT_INTERFACEMETHODREF: - Type.Class.Method m = klass.getTypeClass().method(member.name.s + member.type.s); + Type.Class.Method m = klass.getTypeClass().method(member.name.s,member.type.s); return tag == CONSTANT_INTERFACEMETHODREF ? (Object) new InterfaceMethodKey(m) : (Object) m; default: throw new Error("should never happen"); diff --git a/src/org/ibex/classgen/MethodGen.java b/src/org/ibex/classgen/MethodGen.java index 854b76a..90edacd 100644 --- a/src/org/ibex/classgen/MethodGen.java +++ b/src/org/ibex/classgen/MethodGen.java @@ -53,7 +53,7 @@ public class MethodGen extends Type.Class.Method.Body implements CGConst { m.super(); this.flags = flags; if ((flags & ~VALID_METHOD_FLAGS) != 0) throw new ClassFile.ClassReadExn("invalid flags"); - this.method = m; + this.method = c.method(name,typeDescriptor); this.attrs = new ClassFile.AttrGen(in,cp); if ((flags & (NATIVE|ABSTRACT))==0) { diff --git a/src/org/ibex/classgen/Type.java b/src/org/ibex/classgen/Type.java index 067e611..2faa590 100644 --- a/src/org/ibex/classgen/Type.java +++ b/src/org/ibex/classgen/Type.java @@ -105,11 +105,10 @@ public class Type implements CGConst { public Field field(String name, Type type) { return new Field(name, type); } public Method method(String name, Type returnType, Type[] argTypes) { return new Method(name, returnType, argTypes); } - public Method method(String signature) { + 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 = signature; - String name = s.startsWith("(") ? "" : s.substring(0, s.indexOf('(')); - s = s.substring(s.indexOf('(')); + 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);