我正在尝试使用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方法中调用的所有代码都已被删除,并替换为单个方法委托。是否有一种方式,使用这样的方法,让我保留现有的方法主体,但添加一个委托调用的头部的方法呢?
发布于 2017-07-16 12:13:00
如果要调用原始方法,可以使用"andThen“将一个andThen链接到拦截器。这指示Buddy在委托调用之后调用原始方法。
https://stackoverflow.com/questions/45119026
复制相似问题