Well I figured it ok. (i have a typo in the code below too). I manually copied the MethodGen instead of using copy(). It worked just fine. MethodGen.copy() calls clone(). I never understood what Object.clone() does. So an explicit copy worked.
james On Mon, Jul 19, 2004 at 10:18:46AM -0700, James Sasitorn wrote: > I am trying to copy methods from one class to another. This is the code I have been > woking on. I am getting errors with the resulting constant pool. Is this the correct > way to copy a method, or am i misunderstanding the API. > > thanks, > > james > > public static void main(String[] args) { > JavaClass j1 = new ClassParser("A.class").parse(); > JavaClass j2 = new ClassParser("B.class").parse(); > copyCode(j1,j2); > } > > public static void copyCode(JavaClass src, JavaClass dest) { > > ClassGen cg1 = new ClassGen(dest); > ClassGen cg2 = new ClassGen(dest); > ConstantPoolGen cp1 = cg1.getConstantPool(); > ConstantPoolGen cp2 = cg2.getConstantPool(); > > Method[] methods = src.getMethods(); > for (int i=0; i< methods.length; i++) { > MethodGen m = new MethodGen(methods[i], > src.getClassName(), > cp1); > > MethodGen m2 = m.copy(cg2.getClassName(), cp2); > > printCode(new Method[] {m2.getMethod()}, true); > cg2.addMethod(m2.getMethod()); > } > > JavaClass c3 = cg2.getJavaClass(); > c3.setConstantPool(cp2.getFinalConstantPool()); > > try { > c3.dump("test.class"); > } catch (IOException e) { > System.out.println(e.getStackTrace()); > } > } > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]