问题标签 [checker-framework]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
245 浏览

java - 如何规避检查器框架 type.invalid 错误?

我们有一个我们编写的库,在引入 Checker Framework NullnessChecker 来验证其代码后,它无法编译(如预期的那样)。我已经修复了所有明显的错误,但是这个我不知道如何修复......

这是违规函数的签名:

以及发生错误的调用站点:

谁能告诉我如何让检查员接受这个?在我看来,这是正确的代码。

编辑

错误:

0 投票
2 回答
856 浏览

java - 如何告诉检查器遗留方法将接受 Nullable 类型?

考虑一下:

这失败了,因为检查器框架假设ofNullable不能接受null值(毕竟,它的参数没有标记为 @Nullable)。

有没有一种好方法可以告诉检查器框架此方法(或遗留代码中我无法更改的其他方法)在任何地方都接受 @Nullable 类型,而不必在任何地方更改代码?

0 投票
1 回答
1694 浏览

java - 将 Gradle 依赖项的路径传递给 Java 编译器

我正在使用 Checker Framework,它的注释处理器需要将“带注释的 JDK”jar 的路径传递给它,以便它可以向 JDK 类添加类型注释。

所以,我需要 Gradle 做的是获取 jar 的路径并将其传递给 java 编译器。

很简单,通常,在 Gradle 中:

运行resolveAnnotatedJdk任务有效!

问题是试图让它在compileJava配置块内工作:

我相信,这不起作用,因为该compileJava块是配置并在解决依赖关系之前运行。

我试过在一个runFirst块中添加选项,它似乎工作:

但我认为我没有以适当的方式做这件事,看起来像一个黑客,真的。

任何人都知道我可以如何改进这一点?

0 投票
1 回答
293 浏览

java - 初始化方法中的@Nonnull 字段

有没有办法让 Eclipse 意识到 @Nonnull 字段已在某些初始化方法中初始化。我在其他完全无法使用的 Checker 框架中寻找类似 @​​EnsuresNonNull({"bar"}) 的东西。

例子:

收到以下错误:

0 投票
1 回答
360 浏览

checker-framework - 检查器框架:在默认构造函数中抑制警告

我有两个构造函数:正确初始化对象的普通 ctor 和用于 Hibernate 的第二个默认 ctor,它生成初始化字段警告。摆脱警告的首选方法是什么?

0 投票
1 回答
1487 浏览

java - 使用 Checker 框架时避免在注入字段上出现“未初始化”错误

Checker Framework 的 Nullness Checker在遇到未初始化的字段时会生成错误。

现在,通过依赖注入注入一些字段是一种常见的模式:

在这里,@javax.persistence.PersistenceContext注释确保在构建存储库em后将持有对EntityManager实例的引用。

更一般地说,在这些情况下,应用程序框架保证字段在使用时已初始化且非空——但检查器框架无法知道这一点。

到目前为止,我发现一种补救方法是将字段注入转换为构造函数注入(@Inject)。但是,在上面的示例中,这不是一个选项。

有没有办法告诉 Checker Framework 一个字段被注入,因此被正确初始化和非空,而不是简单地抑制这些错误?

0 投票
0 回答
449 浏览

java - Checker 框架似乎忽略了 -AskipUses 参数

我已经开始注释我的程序,编写空值注释。按照指导方针,我注释了我的一个类并将其标记为@AnnotatedFor({"nullness"}). 该程序正在Java 7平台下编译,使用Oracle JDK 1.7.u21(由于一些技术限制,无法切换到JDK 8)。该类使用了一堆未注释的第三方(Google Guava)和 JDK 库方法,因此我在 Maven 编译器插件参数中包含该选项-AskipUses=...-AuseSafeDefaultsForUnnanotatedSourceCode如下所示:

类的源代码:

当我构建项目时,检查器似乎忽略了“跳过”选项,因为我最终遇到了类似的错误

将我们带到第 38 行:

或 39:

或 38 再次:

-AskipUses=依此类推——日志中充满了各种检查器错误,尽管我认为我通过使用该选项摆脱了它们。

难道我做错了什么?

UPD 07.12.2015:附上课程的完整源代码。UPD 14.12.2015:更新了源代码,因此现在重现该案例要容易得多。

0 投票
0 回答
156 浏览

gradle - 如何在 Gradle 中从依赖项中使用 JDK?

我正在尝试将Checker Framework与 Gradle 一起使用。官方文档期望环境变量指向带注释的 JDK:

但是,可以通过 Gradle 管理对 Checker Framework 的依赖:

我怎样才能最好地从依赖项中获取 Gradle 中 javac 的路径org.checkerframework:jdk8

0 投票
1 回答
681 浏览

java - 检查器框架将@Initialized 值作为@UnderInitialization 参数传递

使用Checker Framework,构造函数使用的方法可以采用带@UnderInitialization注释的参数。

从非构造函数调用这样的方法并将@Initialized参数传递给它会导致以下错误:

我不确定这是不是一个问题,因为传递一个@Initialized值不应该有不良的副作用。

解决此错误的正确方法是什么?

0 投票
1 回答
550 浏览

java - Using custom annotation processors alongside Checker Framework

I'm working on a multi module maven based project in which one of the modules contains a few annotation processors for the custom annotations used by other modules. When I add a dependency of annotation processor module to any other module, the annotations of that modules are processed by those annotation processors.

But recently I integrated Checker Framework (for type annotations) and then all the custom annotation processors (I mentioned above) stopped working. Any idea on how to get them to work even with Checker Framework is greatly appreciated?


To clear the scenario,

Let's say I have a maven module named module_A. In this module I have a annotation (class level) called "@FoodItem". I need to enforce a rule that any class annotated with "@FoodItem" annotation should implement the interface "Food". So I wrote an annotation processor "FoodItemAnnotationProcessor" in the same module (module_A) which processes such classes and check for the compliance with that rule.

Then let's say I have another module named module_B which has a maven dependency to the module_A. In this module I have a class called "Pizza" which is annotated with "@FoodItem" annotation.

If a build the project (which has module_A and module_B) with the above configuration, the "FoodItemAnnotationProcessor" is executed at compile stage and validates the class "Pizza" for the rule mentioned above.

After that I integrated Checker framework to module_B (as mentioned here). Then checker framework related validations are executed at compile time as expected, but the "FoodItemAnnotationProcessor" ceased to work.