使用ASM时如何忽略仪表的吸气剂/吸气剂?

时间:2020-08-01 22:10:30

标签: java instrumentation java-bytecode-asm bytecode-manipulation jvm-bytecode

我正在使用ASM库来检测某些类。我创建了自己的MethodVisitor实例,并覆盖了其中的某些方法,例如visitCode()在方法MethodVisitor开始时被调用。如果该方法不是getter / setter方法,则在此处插入我自己的代码。但是,如果访问者只是在该方法的开头,而尚未访问该方法的其余部分,我怎么知道该方法是否不是getter / setter方法呢?

我可以看一下方法的名称,但这不是结论。要测试某个方法是getter还是setter,我想检查该方法是否唯一,就是在当前实例上使用GETFIELD或SETFIELD操作码,而没有其他操作。

更新:我发现可以使用的一种方法是在visitField()上覆盖ClassVisitor方法,而不仅仅是visitMethod(),所以我存储了类的所有字段名称,并检查方法的名称是getX()还是setX(),其中X是字段名称。这种方法行之有效,但仍然受到限制,因为如果用户拥有这样的命名方法(而不是设置器/获取器),该怎么办。

0 个答案:

没有答案