编译检查插件框架以强制执行无空返回

Compilation Check Plugin Framework to enforce no null return

提问人:George Measley 提问时间:4/24/2022 更新时间:4/27/2022 访问量:153

问:

有没有适用于 Java 的框架/编译器插件/静态分析工具

  • 强制所有返回值都是非 null,除非它们被显式标记为 Nullable(通过批注或其他方式)
  • 在给定的软件包列表中

从本质上讲,这意味着强制执行 Kotlin 模型,默认情况下,除非特别标记,否则没有任何内容可以为 null。

请注意,仅查找@Notnull注释并仅强制执行这些注释的工具是不够的,不允许 null 返回值应该是默认设置。或者,该工具可以专注于取消引用可能为 null 的值,并强制它们不能为 null,除非标记为 null,然后它们可能会要求您执行 null 检查。

显然,您仍然可以将这种解决方案的问题作为相关问题提出来,显然可以将它们联系在一起。也很高兴发现这是否已经被问到,我自己没有找到匹配的现有问题。

java nullpointerexception null 选项类型 可为 null

评论


答:

1赞 mernst 4/25/2022 #1

Checker FrameworkNullness Checker 就是这样做的。

关于您的第一个要求,Nullness Checker 文档说:

Nullness Checker 支持的最重要的注释是 @NonNull@Nullable。 很少写入,因为它是默认的。@NonNull

关于您的第二个要求,您可以使用命令行选项。它的文档说:-AonlyDefs

将命令行选项设置为与类名(而不是文件名)匹配的正则表达式,这些类名的定义应进行类型检查。-AonlyDefs

它与完全限定的类名匹配,因此您可以指定包名称。

评论

0赞 George Measley 4/27/2022
整洁,看起来不错。将不得不尝试一下。谢谢你的回答。
0赞 George Measley 4/27/2022 #2

除了 mernst 接受的答案外,我还找到了 ErrorProne 框架的 NullAway 插件。 教程:https://www.baeldung.com/java-nullaway 主页:https://github.com/uber/NullAway

将不得不在某个时候尝试两者,到目前为止,它们似乎都符合我的需要。

评论

0赞 Community 4/27/2022
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。
0赞 mernst 6/18/2023
在引擎盖下,Uber 的 NullAway(也是一个很好的工具)建立在 Google 的 Error Plene 之上,而 Error Prene 本身就是建立在 Checker Framework 之上的。