ASM 中是否有工具/方法可以收集类中的所有方法,然后用那些重载方法替换类的调用?
我正在尝试将 ASM 与突变测试一起使用来执行这些操作:
- 用重载方法替换方法
- 将其替换为具有相同参数和返回类型(不同名称)的另一个方法
ASM 中是否有工具/方法可以收集类中的所有方法,然后用那些重载方法替换类的调用?
我正在尝试将 ASM 与突变测试一起使用来执行这些操作:
我不知道有什么工具可以专门满足您的需求,但编写代码应该不难。
对于第二种情况,假设您不关心反射或虚拟调用,只需搜索该方法并替换名称即可。
为此,您只需实现MethodVistor.visitMethodInsn()
所有指令并将其替换为所需的(所有者、名称、描述)三元组。请注意,在继承的情况下,owner
可能与您的预期不同。例如,假设您尝试替换Foo bar (II)V
,并且有一个 的子Child
类Foo
。在这种情况下,客户端代码可以改为使用三元组调用方法Child bar (II)V
。
第一种情况更具挑战性,因为重载的方法可能具有不同的类型描述符,因此您必须添加字节码才能将参数和/或返回类型转换为正确的类型。但是,这只是阅读 ASM 文档然后实施它的问题。