编写一个findbugs检测器,它知道方法参数是否为Throwable类型

时间:2015-01-08 14:15:39

标签: java code-analysis static-analysis findbugs

我正在编写一个基于OpcodeStackDetector的Findbugs探测器,它使用如下签名查看对Java方法的所有调用:

void foo(Object...args)

如果其中一个args属于Throwable类型或其任何后代,它应报告错误。

如何获取表示参数的方法调用的引用列表,然后确定每个参数的Class是否是java.lang.Throwable的子类型?

1 个答案:

答案 0 :(得分:0)

我可以看到OpcodeStackDetector累积了堆栈,所以当你在detect中看到一个方法调用操作(INVOKEVIRTUAL,INVOKESPECIAL等之一......)时,堆栈的顶部应该包含对象数组的引用

Findbugs包含用于理解字节代码的ASM和BCEL库,因此应该可以从引用桥接到内存中的实际数组,并以某种方式从数组中获取对象引用列表。从那里,您可以使用ASM / BCEL来验证每个参考的类型。

你怎么做也让我感到困惑。