【问题标题】:Glacier Class Immutable Checker does not works on Checker Framework 3.6.0Glacier Class Immutable Checker 不适用于 Checker Framework 3.6.0
【发布时间】:2020-12-17 17:21:19
【问题描述】:

我尝试使用 Glacier Class Immutable Checker 在 Checker Framework 3.6.0 上不起作用。

我使用 Maven 获得 Glacier 0.1。 (http://mcoblenz.github.io/Glacier/)

然后,我尝试检查示例源,但出现错误。 我可以将 Glacier Class Immutable Checker 与 Checker Framework 3.6.0 一起使用吗?

[jsr308.javac] javac 11.0.7 [jsr308.javac] 错误:在 args [edu.cmu.cs.glacier.GlacierChecker@625732] 上调用类 edu.cmu.cs.glacier.GlacierAnnotatedTypeFactory 的构造函数时出现 InvocationTargetException;根本原因:java.lang.NoSuchMethodError: 'javax.lang.model.element.AnnotationMirror org.checkerframework.javacutil.AnnotationUtils.fromClass(javax.lang.model.util.Elements, java.lang.Class)' [jsr308.javac]; Checker 框架崩溃了。请报告崩溃。 [jsr308.javac] 异常:java.lang.reflect.InvocationTargetException; java.lang.reflect.InvocationTargetException [jsr308.javac] 在 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) [jsr308.javac] 在 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [jsr308.javac] 在 java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [jsr308.javac] 在 java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) [jsr308.javac] 在 org.checkerframework.common.basetype.BaseTypeChecker.invokeConstructorFor(BaseTypeChecker.java:300) [jsr308.javac] 在 org.checkerframework.common.basetype.BaseTypeVisitor.createTypeFactory(BaseTypeVisitor.java:249) [jsr308.javac] 在 org.checkerframework.common.basetype.BaseTypeVisitor.(BaseTypeVisitor.java:217) [jsr308.javac] 在 org.checkerframework.common.basetype.BaseTypeVisitor.(BaseTypeVisitor.java:206) [jsr308.javac] 在 edu.cmu.cs.glacier.GlacierVisitor.(GlacierVisitor.java:54) [jsr308.javac] 在 edu.cmu.cs.glacier.GlacierChecker.createSourceVisitor(GlacierChecker.java:8) [jsr308.javac] 在 edu.cmu.cs.glacier.GlacierChecker.createSourceVisitor(GlacierChecker.java:5) [jsr308.javac] 在 org.checkerframework.framework.source.SourceChecker.initChecker(SourceChecker.java:820) [jsr308.javac] 在 org.checkerframework.common.basetype.BaseTypeChecker.initChecker(BaseTypeChecker.java:111) [jsr308.javac] 在 org.checkerframework.framework.source.SourceChecker.typeProcessingStart(SourceChecker.java:771) [jsr308.javac] 在 org.checkerframework.javacutil.AbstractTypeProcessor$AttributionTaskListener.finished(AbstractTypeProcessor.java:167) [jsr308.javac] 在 jdk.compiler/com.sun.tools.javac.api.ClientCodeWrapper$WrappedTaskListener.finished(ClientCodeWrapper.java:828) [jsr308.javac] 在 jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:132) [jsr308.javac] 在 jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1418) [jsr308.javac] 在 jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1375) [jsr308.javac] 在 jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:973) [jsr308.javac] 在 jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:311) [jsr308.javac] 在 jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:170) [jsr308.javac] 在 jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:57) [jsr308.javac] 在 jdk.compiler/com.sun.tools.javac.Main.main(Main.java:43) [jsr308.javac] 引起:java.lang.NoSuchMethodError: 'javax.lang.model.element.AnnotationMirror org.checkerframework.javacutil.AnnotationUtils.fromClass(javax.lang.model.util.Elements, java.lang.Class) ' [jsr308.javac] 在 edu.cmu.cs.glacier.GlacierAnnotatedTypeFactory.(GlacierAnnotatedTypeFactory.java:46) [jsr308.javac] ... 24 更多 [jsr308.javac]
[jsr308.javac] 基础异常:java.lang.NoSuchMethodError: 'javax.lang.model.element.AnnotationMirror org.checkerframework.javacutil.AnnotationUtils.fromClass(javax.lang.model.util.Elements, java.lang.Class) '; java.lang.NoSuchMethodError:'javax.lang.model.element.AnnotationMirror org.checkerframework.javacutil.AnnotationUtils.fromClass(javax.lang.model.util.Elements,java.lang.Class)' [jsr308.javac] 在 edu.cmu.cs.glacier.GlacierAnnotatedTypeFactory.(GlacierAnnotatedTypeFactory.java:46) [jsr308.javac] 在 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) [jsr308.javac] 在 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [jsr308.javac] 在 java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [jsr308.javac] 在 java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) [jsr308.javac] 在 org.checkerframework.common.basetype.BaseTypeChecker.invokeConstructorFor(BaseTypeChecker.java:300) [jsr308.javac] 在 org.checkerframework.common.basetype.BaseTypeVisitor.createTypeFactory(BaseTypeVisitor.java:249) [jsr308.javac] 在 org.checkerframework.common.basetype.BaseTypeVisitor.(BaseTypeVisitor.java:217) [jsr308.javac] 在 org.checkerframework.common.basetype.BaseTypeVisitor.(BaseTypeVisitor.java:206) [jsr308.javac] 在 edu.cmu.cs.glacier.GlacierVisitor.(GlacierVisitor.java:54) [jsr308.javac] 在 edu.cmu.cs.glacier.GlacierChecker.createSourceVisitor(GlacierChecker.java:8) [jsr308.javac] 在 edu.cmu.cs.glacier.GlacierChecker.createSourceVisitor(GlacierChecker.java:5) [jsr308.javac] 在 org.checkerframework.framework.source.SourceChecker.initChecker(SourceChecker.java:820) [jsr308.javac] 在 org.checkerframework.common.basetype.BaseTypeChecker.initChecker(BaseTypeChecker.java:111) [jsr308.javac] 在 org.checkerframework.framework.source.SourceChecker.typeProcessingStart(SourceChecker.java:771) [jsr308.javac] 在 org.checkerframework.javacutil.AbstractTypeProcessor$AttributionTaskListener.finished(AbstractTypeProcessor.java:167) [jsr308.javac] 在 jdk.compiler/com.sun.tools.javac.api.ClientCodeWrapper$WrappedTaskListener.finished(ClientCodeWrapper.java:828) [jsr308.javac] 在 jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:132) [jsr308.javac] 在 jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1418) [jsr308.javac] 在 jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1375) [jsr308.javac] 在 jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:973) [jsr308.javac] 在 jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:311) [jsr308.javac] 在 jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:170) [jsr308.javac] 在 jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:57) [jsr308.javac] 在 jdk.compiler/com.sun.tools.javac.Main.main(Main.java:43) [jsr308.javac] 1个错误

【问题讨论】:

    标签: java immutability checkstyle effective-java


    【解决方案1】:

    可从 http://mcoblenz.github.io/Glacier/ 下载的复制包包含其自己的 Checker Framework 副本(文件 checker.jar 和 framework.jar),您应该使用它。

    冰川不再维护。它的问题跟踪器包含您提出的 issue 相同的 issue - 使用更新版本的 Checker Framework 运行 Glacier - 但维护者说“我现在没有时间处理这个问题”。

    如果您想自己更新 Glacier,可以查看更新 Glacier 以与 Checker Framework 2.3.2 一起使用的 pull request。您需要从源代码构建 Glacier 才能使用该版本的 Checker Framework。检查器框架的那个版本是available in Maven Central。

    【讨论】:

      【解决方案2】:

      我阅读了“The Checker Framework Manual Version 3.6.0(2020 年 8 月 3 日)”。

      25.5 Glacier:类不变性 Glacier [CNA+17] 在 Java 中强制传递类不变性。根据其网页:

      和

      25.9 不变性检查器:IGJ、OIGJ 和 Javari Javari [TE05]、IGJ [ZPA+07] 和 OIGJ [ZPL+10] 是强制不变性的类型系统 约束。所有三种类型系统的类型检查器均已分发 通过 1.9.13 版(日期为 4 月 1 日)使用 Checker 框架 2016)。如果您想使用它们,请安装 Checker Framework 版本 1.9.13.

      然后,我认为“Glacier”是有效的,而“Immutability checkers”在“Checker Framework 3.6.0”上是无效的。

      谢谢默斯特。

      我了解到,不仅“不变性检查器”而且“Glacier”都不适用于 Checker Framework 3.6.0 版。实际上。

      我尝试使用带有“net.jcip.annotations.Immutable”的 SpotBugs 检查示例源。 我觉得它有效。

      我将使用 SpotBugs。

      感谢您阅读我蹩脚的英语。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-05
        • 2014-09-08
        • 2011-07-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多