考虑这个 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
file 使用配置为 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',
)
当我
bazel build x
,构建失败并出现此错误:error: InvocationTargetException when invoking constructor for class org.checkerframework.checker.nullness.KeyForAnnotatedTypeFactory; Underlying cause: java.lang.StackOverflowError; The Checker Framework crashed. Please report the crash. To see the full stack trace invoke the compiler with -AprintErrorStack
当我注释掉
plugins
行在 BUILD
文件,构建成功且没有错误。 (这是有道理的,但我最终希望 Checker 框架在此构建失败时出现 return.type.incompatible
错误。)我在这里犯错了吗?这是 Bazel 中的错误吗?
最佳答案
我在 bazel-discuss mailing list 上得到了很好的答复,告诉我试试 NullAway ,一个依赖于 Checker 框架的容易出错的插件。
github repo现在包括一个使用 NullAway 的工作示例,就像这样。
工作空间:
maven_jar(
name='jsr305',
artifact='com.google.code.findbugs:jsr305:3.0.2',
)
maven_jar(
name="nullaway",
artifact="com.uber.nullaway:nullaway:0.3.2"
)
maven_jar(
name="guava",
artifact="com.google.guava:guava:22.0",
)
build :
java_library(
name='x',
srcs=['X.java'],
deps=['@jsr305//jar'],
plugins=['nullaway'],
javacopts=[
'-Xep:NullAway:ERROR',
'-XepOpt:NullAway:AnnotatedPackages=com.example',
],
)
java_plugin(
name='nullaway',
deps=[
'@nullaway//jar',
'@guava//jar',
],
)
(不幸的是,依赖 Guava ;这是必需的,因为 without Guava, NullAway refuses to load 。)
关于bazel - 使用 Bazel 运行 Checker 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48555320/