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]

Reply via email to