bazel - 使用 Bazel 运行 Checker 框架

标签 bazel checker-framework

考虑这个 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/

相关文章:

Bazel:如何访问 Skylark 中的工作区状态变量?

android - 在 Android 上运行 Checker 框架

java - 参数中的不兼容类型

java - 将自定义注释处理器与 Checker Framework 一起使用

java - 在bazel中过滤java_library中resource_jars的内容

java - 为什么我通过 Bazel 构建的应用程序在添加 Firebase 依赖项后一打开就会崩溃?

angular - Bazel + Angular + SocketIO 导致 : Uncaught TypeError: XMLHttpRequest is not a constructor

java - 在 Eclipse Maven 项目中使用 Checker 框架

java - 注释名称中的 '+' 有什么特殊含义吗?

c++ - 如何在 Bazel 中忽略来自外部 C++ 依赖项 header 的警告