我正在编写一些代码,我想使用 BCEL 将所有对 SomeClass 方法的调用替换为对 SomeOtherClass 方法的调用。
现在,据我了解,我可以通过以下方式做到这一点:
- 遍历指令列表
- 查找引用 SomeClass 的所有或
invokevirtual
指令invokestatic
invokespecial
- 用引用 SomeOtherClass 的适当的 invokeX 替换那些
这需要我重写很多调用,并且我必须处理至少三种不同的情况(invokevirtual
和invokestatic
调用invokespecial
)。相反,是否可以通过操作常量池并用 SomeOtherClass 替换指向 SomeClass 的所有常量来做到这一点?如果是这样,怎么做?