检查方法 "return null" 是否为 @Nullable

Check if method "return null" and is @Nullable

我可以制作 Findbugs 或任何其他代码分析器,检查可以 return null 的方法是否被注释为 @Nullable?

我想检查的不是这种情况:

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

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

编辑:您还可以 运行 在 Idea 中对您的代码进行所有检查(参见 here), or in offline mode with command line tools (look here)。

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

原因是您正试图对该方法的契约进行逆向工程。 Nullness 注释是契约的一部分,因此它们不能也不应该从代码中推断出来。没有办法,甚至在理论上也无法判断程序员是否 想要 方法 return null 值,或者这是一个编程错误。取决于此,您必须通过添加 @Nullable 注释或更改方法主体来修复代码,使其不能 return null (并且可能添加 @Nonnull).

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