java - Checker Framework argument.type.incompatible 不受欢迎的正面
问题描述
所以我从空值检查器那里得到这个错误
> Task :compileJava
/Users/calebcushing/IdeaProjects/ppm/scaf/src/main/java/com/xenoterracide/scaf/PebbleTemplateProcessor.java:94: error: [argument.type.incompatible] incompatible argument for parameter obj of requireNonNull.
var console = Objects.requireNonNull( System.console() );
^ ^
这是抱怨System.console()
可能为空,在阅读 javadoc 时这是真的。所以我Objects.requireNonNull()
现在把它包装起来,它抱怨参数requireNonNull
不能为空,这显然不是真的。
我如何告诉NullnessChecker
忽略Objects.requireNonNull()
?我对明确的 NPE 很好,这只是我不想要的偶然的。我相信 checker 已经为此提供了一个存根。
解决方案
意识到我迟到了,但希望这会帮助其他在搜索后登陆这里的人。
您可以向 Checker 提供覆盖默认注释的存根文件。
对于我自己的项目,我在我的一个常见项目中的文件夹checker
旁边创建了一个新文件src
夹,并将其放入java.util.Objects.astub
包含以下内容的存根文件中:
package java.util;
import org.eclipse.jdt.annotation.Nullable;
public class Objects
{
public static <T> T requireNonNull(@Nullable T obj, String message);
}
然后我将它添加到我们的 Gradle 构建中:
checkerFramework {
extraJavacArgs = [
"-Astubs=${project(':my-project').file('checker')}"
]
}
…my-project
包含新文件夹的项目的 Gradle 标识符在哪里。
Checker 现在将加载该文件夹*.astub
中的所有文件checker
,并使用那里提供的注释而不是默认值。您可以在 Checker 文档中的Using Stub Classes中了解更多信息。
推荐阅读
- javascript - 有没有办法验证已注册的电子邮件?
- javascript - 如何使用 jquery 获取文本字段的定义数据类型
- mongodb - MongoDB:NN关系表查询使用聚合?
- python - Dijkstra 的调车场算法的实施在某些情况下无法正常工作
- java - 有没有一种简单的方法可以用 lambdas 做到这一点?
- reactjs - 从异步存储中获取令牌为空
- json - 更新 json 模型 swiftUI
- r - 在 Shiny 中基于用户输入的过滤不起作用
- c# - C# DataFrame LoadCsv - 访问被拒绝
- xml - 如何将 xmlstarlet 输出与 nul 分开?