繁体   English   中英

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

[英]Java ASM, collect all overloading methods and replace the invocation with all the others

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

我正在尝试将ASM与突变测试结合使用来执行以下操作:

  • 用重载方法替换方法
  • 用具有相同参数和返回类型(不同名称)的另一种方法替换它

我不知道有什么工具可以专门实现您想要的功能,但是编写代码并不难。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM