По сути, я хочу перехватить все классы, которые имеют конкретную аннотацию (которая была создана мной), и я хочу выполнить свою собственную логику в записи метода и конструктора.
Я пытался использовать byte-buddyПостроитель агентов, как вы можете видеть из моего примера кода.
public static void agentmain(final String agentArgs,
final Instrumentation inst) {
new AgentBuilder.Default()
.type(ElementMatchers.
<TypeDescription>isAnnotatedWith(Licensable.class))
.transform((builder, td, cl, m) -> builder
.visit(Advice.to(AdviceToClasses.class).on(isMethod()))
.visit(Advice.to(AdviceToConstructor.class).on(isConstructor())))
.installOn(inst);
}
Класс AdviceToConstructor
@Advice.OnMethodEnter
public static void enter(@Advice.Origin Constructor method) throws
Exception {
System.out.println("Intercepted Constr >> " + method);
}
Используя выше, я могу получить то, что ожидал, если воспользуюсь советом методаи оставить часть конструктора.Но когда я использую часть конструктора, это не идет к методу ввода рекомендации, и я получаю следующие ошибки:
complete --- sample.TestAnnotation
complete --- java.lang.VerifyError
Exception in thread "main" complete --- java.lang.Throwable$WrappedPrintStream
complete --- java.lang.Throwable$PrintStreamOrWriter
complete --- java.util.IdentityHashMap$KeySet
java.lang.VerifyError: Inconsistent stackmap frames at branch target 96
Exception Details:
Location:
sample/TestAnnotation.()V @96: aload_0
Reason:
Type uninitializedThis (current frame, locals[0]) is not assignable to 'sample/TestAnnotation' (stack map, locals[0])
Current Frame:
bci: @93
flags: { flagThisUninit }
locals: { uninitializedThis, 'sample/annotation/Licensable' }
stack: { }
Stackmap Frame:
bci: @96
flags: { }
locals: { 'sample/TestAnnotation' }
stack: { }
Bytecode:
0x0000000: b200 02bb 0028 59b7 0029 122b b600 2f12
0x0000010: 0703 bd00 31b6 0035 b600 38b6 003c b600
0x0000020: 04b2 0002 123e b600 0412 0703 bd00 31b6
0x0000030: 0035 b600 4412 46b6 004a c000 464c 2bc6
0x0000040: 001e b200 502b b900 5301 00b6 0059 3d1c
0x0000050: 9a00 0dbb 005b 5912 5db7 005f bfa7 0003
0x0000060: 2ab7 0001 b1
Stackmap Table:
append_frame(@93,Object[#70])
full_frame(@96,{Object[#7]},{})
at sample.Sample.main(SampleApp.java:47)
complete --- java.util.IdentityHashMap$KeyIterator
complete --- java.util.IdentityHashMap$IdentityHashMapIterator
Я проверил сообщения в StackOverflow и погуглил их, но не смог найти решение.Любой совет относительно этой ошибки?