import org.apache.xbean.asm.shaded.asm.ClassReader;
import org.apache.xbean.asm.shaded.asm.ClassWriter;
import org.apache.xbean.asm.shaded.asm.MethodVisitor;
import org.apache.xbean.asm.shaded.asm.Opcodes;
public class ExampleClass {
public static void main(String[] args) {
ClassReader reader = new ClassReader(ExampleClass.class.getClassLoader().getResourceAsStream("ExampleClass.class"));
MethodVisitor visitor = new ExampleMethodVisitor(Opcodes.ASM9, writer.visitMethod(Opcodes.ACC_PUBLIC, "exampleMethod", "()V", null, null));
reader.accept(visitor, ClassReader.EXPAND_FRAMES);
byte[] modifiedBytes = writer.toByteArray();
// ...
}
private static class ExampleMethodVisitor extends MethodVisitor {
public ExampleMethodVisitor(int api, MethodVisitor methodVisitor) {
super(api, methodVisitor);
}
@Override
public void visitInsn(int opcode) {
if (opcode == Opcodes.RETURN) {
mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
mv.visitLdcInsn("Hello, World!");
mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false);
}
super.visitInsn(opcode);
}
}
}