检查方法"是否返回null"并且是@Nullable

时间:2015-02-21 12:09:44

标签: java null static-analysis findbugs

我可以创建Findbugs或任何其他代码分析器,检查可以返回null的方法是否注释为@Nullable吗?

我想检查的情况如下:

// Third party library
class Foo
{
    // Static test should fail because it's not annotated as @Nullable
    String get()
    {
        return null;
    }
}

2 个答案:

答案 0 :(得分:1)

是的,你可以。 IntelliJ Idea具有静态代码分析工具。您可以找到说明here

编辑:您还可以在Idea中查看代码的所有检查(查看here),或使用命令行工具在线下模式下运行(查看here)。

答案 1 :(得分:1)

我相信当前的工具不能开箱即用,包括IntelliJ。您必须编写自定义FindBugs检查。 FindBugs有一些支持空值分析的逻辑。

原因是您正在尝试对方法的合同进行反向工程。 Nullness注释是合同的一部分,因此它们不能也不应该从代码中推断出来。甚至在理论上也没有办法告诉程序员想要方法返回null值还是编程错误。根据这一点,您必须通过添加@Nullable注释或更改方法主体来修复代码,以使其无法返回null(并可能添加@Nonnull)。< / p>

FindBugs具有一些annotations,可用于在包级别指定nullness默认值。然后它将检查该包中的所有类方法是否符合您的默认值。如果你没有这样做,FindBugs假定你设置@Nullable;所以也许你的情况已经解决了。