类和接口上的FindBugs和CheckForNull

时间:2010-03-10 09:39:23

标签: java class interface findbugs

有没有办法让FindBugs检查并警告我,如果类中方法的实现存在CheckForNull注释,而不是接口中方法的声明?

import javax.annotation.CheckForNull;

interface Foo {
    public String getBar();
}

class FooImpl implements Foo {

    @CheckForNull 
    @Override
    public String getBar() {
        return null;
    }   
}

public class FindBugsDemo {
    public static void main(String[] args) {
        Foo foo = new FooImpl();
        System.out.println(foo.getBar().length());
    }
}

我刚刚在我的应用程序中发现了一个错误,因为FindBugs没有发现缺少空检查,因为CheckForNull只出现在FooImpl上,但不出现在Foo上,我不想发现这个问题的所有其他位置手动

1 个答案:

答案 0 :(得分:1)

是的,您可以编写自己的探测器,并将它们打包在您自己的jar插件文件中。请参阅fb-contrib.sf.net作为辅助findbugs插件的示例。

一个问题是FindBugs依赖于尚未支持注释的bcel 5.2。您仍然可以获得传递给您的表示注释的属性,但它比5.3中的情况更加手动编码(或者无论下一个版本的bcel是什么)。