我正在使用ASM库来检测某些类。我创建了自己的MethodVisitor
实例,并覆盖了其中的某些方法,例如visitCode()
在方法MethodVisitor
开始时被调用。如果该方法不是getter / setter方法,则在此处插入我自己的代码。但是,如果访问者只是在该方法的开头,而尚未访问该方法的其余部分,我怎么知道该方法是否不是getter / setter方法呢?
我可以看一下方法的名称,但这不是结论。要测试某个方法是getter还是setter,我想检查该方法是否唯一,就是在当前实例上使用GETFIELD或SETFIELD操作码,而没有其他操作。
更新:我发现可以使用的一种方法是在visitField()
上覆盖ClassVisitor
方法,而不仅仅是visitMethod()
,所以我存储了类的所有字段名称,并检查方法的名称是getX()
还是setX()
,其中X是字段名称。这种方法行之有效,但仍然受到限制,因为如果用户拥有这样的命名方法(而不是设置器/获取器),该怎么办。