import org.apache.bcel.*;
import org.apache.bcel.classfile.*;
import org.apache.bcel.generic.*;
public class BCELExample {
public static void main(String[] args) throws Exception {
JavaClass origClass = Repository.lookupClass("com.example.MyClass");
ClassGen classGen = new ClassGen(origClass);
ConstantPoolGen constPoolGen = classGen.getConstantPool();
MethodGen methodGen = new MethodGen(origClass.getMethods()[0], classGen.getClassName(), constPoolGen);
InstructionList instList = methodGen.getInstructionList();
instList.append(new GETSTATIC(constPoolGen.addFieldref("java/lang/System", "out", "Ljava/io/PrintStream;")));
instList.append(new LDC(constPoolGen.addString("Hello, World!")));
instList.append(new INVOKEVIRTUAL(constPoolGen.addMethodref("java/io/PrintStream", "println", "(Ljava/lang/String;)V")));
methodGen.setInstructionList(instList);
methodGen.setMaxStack();
methodGen.setMaxLocals();
classGen.replaceMethod(origClass.getMethods()[0], methodGen.getMethod());
JavaClass modifiedClass = classGen.getJavaClass();
String modifiedClassName = modifiedClass.getClassName();
modifiedClass.dump(modifiedClassName + ".class");
}
}