ASM 사용자 설명서 (http://download.forge.objectweb.org/asm/asm4-guide.pdf)의 112 페이지에있는 위임 예를 따르려고합니다.ASM Tree API가 InsnList에 삽입되어 StackOverflowError가 발생합니까?
class MyMethodAdapter extends MethodVisitor {
MethodVisitor next;
public MyMethodAdapter(int access, String name, String desc,
String signature, String[] exceptions, MethodVisitor mv) {
super(
Opcodes.ASM4,
new MethodNode(access, name, desc, signature, exceptions)
);
next = mv;
}
@Override public void visitEnd() {
MethodNode mn = (MethodNode) mv;
mn.instructions.insert(new MethodInsnNode(INVOKESTATIC, "runtime/Recorder", "checkBytecodes", "()V"));
mn.accept(next);
}
}
불행하게도, 내가 그것을 실행할 때, 실패 : 지금까지 나는 다음과 같다 뭔가가 아마도 mn.instructions.insert(
라인이 존재하는 경우에만 발생
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at ../../../src/share/instrument/JPLISAgent.c line: 844
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at ../../../src/share/instrument/JPLISAgent.c line: 844
Exception: java.lang.StackOverflowError thrown from the UncaughtExceptionHandler in thread "main"
, 그래서 나머지를 내 변환 파이프 라인이 작동합니다. 내가 여기서 누락 된 것이 있습니까? 나는 문자 그대로 // put your transformation code here
영역에 변형을 가하고 있으며 그 결과 오류는 완전히 이해할 수 없다.
add()
메서드의 명령 목록 끝 부분에 대한 지침은 정상적으로 실행되는 것처럼 보이지만, 원하는 것은 아닙니다. 새 정적 호출을 메서드 본문에서 가장 먼저 사용하고 싶습니다.