1 Reply Latest reply on Jan 12, 2010 7:22 AM by Arvind K

    VerifyError with addLocalVariable() and insertAfter()

    Joerg Plewe Newbie

      Hi all!

      This is my first post here and I am a javassist newbie. So hopefully my problem can easily be solved.

      From a real usecase, I condensed the following fragment demonstrating my problem:

      ClassPool cp = ClassPool.getDefault();
      CtClass cl = cp.getCtClass("jatest.Test");
      CtMethod m = cl.getDeclaredMethod("foo");
      
      m.addLocalVariable("bar", CtClass.longType);
      m.insertAfter("bar;", true);
      
      Object o = cl.toClass().newInstance();


      The class 'Test' is as simple as it can get:

      public class Test {
       public void foo() {}
      }
      


      Running the code delivers a VerifyError which I think it shouldn't:

      Exception in thread "main" java.lang.VerifyError: (class: jatest/Test, method: foo signature: ()V) Register pair 1/2 contains wrong type
       at java.lang.Class.getDeclaredConstructors0(Native Method)
       at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
       at java.lang.Class.getConstructor0(Class.java:2699)
       at java.lang.Class.newInstance0(Class.java:326)
       at java.lang.Class.newInstance(Class.java:308)
       at jatest.Main.main(Main.java:27)



      Tested with 3.11 and 3.5. Where is my fault?

      Thank you,

      - Joerg