我尝试使用ByteBuddy进行一些运行时代码更改。我遇到的问题是,当我尝试重新定义方法以在末尾添加拦截调用时,整个方法被替换,并且没有声明和调用的任何$ original()方法。
这是我用于正确转换的代码
ByteBuddy()
.rebase(clazz)
.method(ElementMatchers.named("onEnable"))
.intercept(MethodDelegation.to(TestInjector()))
.make()
.saveIn(dataFolder)
clazz和dataFolder在此之上定义,并不是问题的根源。
这是注射器方法的签名:
public void intercept(@This JavaPlugin pl)
在分析它输出的代码时,该类与预转换相同,但是已经删除了在onEnable方法中调用 的所有代码,并将其替换为单个方法委托。有没有办法,使用这样的方法,让我保留现有的方法体,但是在方法的头部添加委托调用?
答案 0 :(得分:1)
如果要调用原始方法,可以使用“andThen”将SuperMethodCall链接到拦截器。这指示Byte Buddy在委托调用后调用原始方法。