title: Can't see the changes made by BCEL
body: <p>I'm trying to change main method of my Test class using BCEL. I simply want to add <code>System.out.println("This is added by BCEL at runtime")</code>
  to the beginning of the main(). Although I don't receive exception and InstructionList shows my commands, my string is not printed and <code>javap -c</code> shows unmodified version.
  Here is my code:</p>
  
  <pre><code>    public static void main(String[] args) {
          try {
              JavaClass jc = Repository.lookupClass("Test");
              System.out.println("Found class" + jc.getClassName());
              ClassGen cg = new ClassGen(jc);
              ConstantPoolGen cpg = cg.getConstantPool();
              for (org.apache.bcel.classfile.Method m : jc.getMethods()) {
                  if (m.getName().equals("main")) {
                      MethodGen mg = new MethodGen(m, cg.getClassName(), cpg);
                      InstructionList list = mg.getInstructionList();
                      int stringIndex = cpg.addString("This is added by BCEL at runtime");
                      System.out.println("String index = " + stringIndex);
                      int soutIndex = cpg.lookupFieldref("java.lang.System", "out", "Ljava/io/PrintStream;");
                      System.out.println("Sout index = " + soutIndex);
                      int printlnIndex = cpg.lookupMethodref("java.io.PrintStream", "println", "(Ljava/lang/String;)V");
                      System.out.println("Println index = " + printlnIndex);
                      InstructionList patch = new InstructionList();
                      patch.append(new GETSTATIC(soutIndex));
                      patch.append(new LDC(stringIndex));
                      patch.append(new INVOKEVIRTUAL(printlnIndex));
                      list.insert(list.getInstructionHandles()[0], patch);
                      mg.setMaxStack();
  
                      File f = new File(Repository.lookupClassFile(cg.getClassName()).getPath());
                      cg.getJavaClass().dump(f.getPath());
                      System.out.println(f.getPath());
  
                      for (InstructionHandle ih : list.getInstructionHandles()) {
                          System.out.println(ih.getInstruction().toString());
                      }
                  }
              }
          } catch (IOException e) {
              e.printStackTrace();
          } catch (ClassNotFoundException e) {
              e.printStackTrace();
          }
      }
  }
  </code></pre>