考虑这个 github 存储库。https://github.com/dfabulich/bazel-checker-framework-bug
它包含一个X.java
公然违反@Nonnull
注释规则的示例文件。
import javax.annotation.Nonnull;
public class X {
public static void main(String[] args) {
new X().exec();
}
public void exec() {
System.out.println(this.method());
}
@Nonnull
private String method() {
return null;
}
}
该WORKSPACE
文件仅包含checker.jar
.
maven_jar(
name="checker",
artifact="org.checkerframework:checker:2.3.1"
)
该BUILD
文件调用编译器并将检查器框架配置为java_plugin
.
java_library(
name='x',
srcs=['X.java'],
deps=['@checker//jar'],
plugins=['checker'],
)
java_plugin(
name='checker',
deps=['@checker//jar'],
processor_class='org.checkerframework.checker.nullness.NullnessChecker',
)
当 Ibazel build x
时,构建失败并出现以下错误:
错误:调用类 org.checkerframework.checker.nullness.KeyForAnnotatedTypeFactory 的构造函数时出现 InvocationTargetException;根本原因:java.lang.StackOverflowError;Checker 框架崩溃了。请报告崩溃。要查看完整的堆栈跟踪,请使用 -AprintErrorStack 调用编译器
当我注释掉文件中的plugins
行时BUILD
,构建成功且没有错误。(这是有道理的,但我最终希望 Checker 框架因return.type.incompatible
错误而使此构建失败。)
我在这里犯错了吗?这是 Bazel 中的错误吗?