0

ASM 中是否有工具/方法可以收集类中的所有方法,然后用那些重载方法替换类的调用?

我正在尝试将 ASM 与突变测试一起使用来执行这些操作:

  • 用重载方法替换方法
  • 将其替换为具有相同参数和返回类型(不同名称)的另一个方法
4

1 回答 1

0

我不知道有什么工具可以专门满足您的需求,但编写代码应该不难。

对于第二种情况,假设您不关心反射或虚拟调用,只需搜索该方法并替换名称即可。

为此,您只需实现MethodVistor.visitMethodInsn()所有指令并将其替换为所需的(所有者、名称、描述)三元组。请注意,在继承的情况下,owner可能与您的预期不同。例如,假设您尝试替换Foo bar (II)V,并且有一个 的子ChildFoo。在这种情况下,客户端代码可以改为使用三元组调用方法Child bar (II)V

第一种情况更具挑战性,因为重载的方法可能具有不同的类型描述符,因此您必须添加字节码才能将参数和/或返回类型转换为正确的类型。但是,这只是阅读 ASM 文档然后实施它的问题。

于 2018-04-01T15:18:33.583 回答