Java ASM,收集所有重载方法并将调用替换为所有其他方法

时间:2018-04-01 06:47:13

标签: java bytecode java-bytecode-asm mutation-testing

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

我正在尝试使用带有突变测试的ASM来执行这些操作:

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

1 个答案:

答案 0 :(得分:0)

我不知道任何具体做你想要的工具,但编码应该不难。

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

为此,您可以实现owner并将所有说明替换为所需的(所有者,名称,desc)三元组。请注意,在继承的情况下,Foo bar (II)V可能与您期望的不同。例如,假设您要替换Child,并且Foo有一个子类Child bar (II)V。在这种情况下,客户端代码可以使用三public String toString() { String output = matrixOne.toString().replaceAll("\\[\\[|\\]|,|\\[|\\]\\]", ""); return FormatMatrix(output, rows, columns); } 来调用该方法。

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