1

有没有办法让 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 上,我不想手动发现此问题的所有其他位置。

4

1 回答 1

1

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

一个问题是 FindBugs 依赖于尚不支持注释的 bcel 5.2。您仍然会获得传递给您的表示注释的属性,但它比 5.3 中的情况(或任何 bcel 的下一个版本)中的情况更多的是手动编码。

于 2010-04-29T03:10:41.877 回答