检查方法 "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
;所以也许你的案子已经解决了。
我可以制作 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
;所以也许你的案子已经解决了。