Код: Выделить всё
@Override
public void onMethodEnter() {
String enterMethod = "enter " + className + " " + methodName;
//
Label label0 = new Label();
Label label1 = new Label();
Label label2 = new Label();
Label label3 = new Label();
mv.visitTryCatchBlock(label0, label1, label2, "java/io/IOException");
mv.visitLdcInsn(className);
mv.visitLdcInsn("org/example");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "contains", "(Ljava/lang/CharSequence;)Z", false);
mv.visitJumpInsn(IFEQ, label3);
mv.visitJumpInsn(GOTO, label0);
mv.visitLabel(label0);
mv.visitTypeInsn(NEW, "java/io/BufferedWriter");
mv.visitInsn(DUP);
mv.visitTypeInsn(NEW, "java/io/FileWriter");
mv.visitInsn(DUP);
mv.visitLdcInsn(filePath);
mv.visitInsn(ICONST_1);
mv.visitMethodInsn(INVOKESPECIAL, "java/io/FileWriter", "", "(Ljava/lang/String;Z)V", false);
mv.visitMethodInsn(INVOKESPECIAL, "java/io/BufferedWriter", "", "(Ljava/io/Writer;)V", false);
mv.visitVarInsn(ASTORE, variable);
mv.visitVarInsn(ALOAD, variable);
mv.visitLdcInsn(enterMethod);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/BufferedWriter", "append", "(Ljava/lang/CharSequence;)Ljava/io/Writer;", false);
mv.visitVarInsn(ALOAD, variable);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/BufferedWriter", "newLine", "()V", false);
mv.visitVarInsn(ALOAD, variable);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/BufferedWriter", "flush", "()V", false);
mv.visitLabel(label1);
mv.visitJumpInsn(GOTO, label3);
mv.visitLabel(label2);
mv.visitVarInsn(ASTORE, variable);
mv.visitTypeInsn(NEW, "java/lang/RuntimeException");
mv.visitInsn(DUP);
mv.visitVarInsn(ALOAD, variable);
mv.visitMethodInsn(INVOKESPECIAL, "java/lang/RuntimeException", "", "(Ljava/lang/Throwable;)V", false);
mv.visitInsn(ATHROW);
mv.visitLabel(label3);
super.onMethodEnter();
}
Подробнее здесь: https://stackoverflow.com/questions/784 ... nsn-method