首页 > 解决方案 > Glacier Class Immutable Checker 不适用于 Checker Framework 3.6.0

问题描述

我尝试使用 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] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [jsr308.javac] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance( NativeConstructorAccessorImpl.java:62) [jsr308.
[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(Native Method) [jsr308.javac] 在 java.base/jdk .internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [jsr308.javac] 在 java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl。

标签: javaimmutabilitycheckstyleeffective-java

解决方案


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

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

如果您想自己更新 Glacier,您可以查看更新 Glacier 以使用 Checker Framework 2.3.2的拉取请求。您需要从源代码构建 Glacier 才能使用该版本的 Checker Framework。Checker Framework 的那个版本在 Maven Central中可用。


推荐阅读