Glacier类不可变检查器不适用于Checker Framework 3.6.0

问题描述

我尝试使用Glacier类不可变检查程序在Checker Framework 3.6.0上不起作用。

我用Maven获得冰川0.1。 (http://mcoblenz.github.io/Glacier/) 然后,我尝试检查示例源,但是发生错误。 我可以在Checker Framework 3.6.0中使用Glacier类不可变检查器吗?

[jsr308.javac] javac 11.0.7 [jsr308.javac]错误:在args上为edu.cmu.cs.glacier.GlacierAnnotatedTypeFactory类构造函数调用时,InvocationTargetException [edu.cmu.cs.glacier.GlacierChecker@625732];根本原因: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) org.checkerframework.common.basetype.BaseTypeVisitor.createTypeFactory(BaseTypeVisitor.java:249)上的[jsr308.javac] org.checkerframework.common.basetype.BaseTypeVisitor上的[jsr308.javac]。(BaseTypeVisitor.java:217) org.checkerframework.common.basetype.BaseTypeVisitor上的[jsr308.javac]。(BaseTypeVisitor.java:206) edu.cmu.cs.glacier.GlacierVisitor上的[jsr308.javac]。(GlacierVisitor.java:54) 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 [jsr308.javac](SourceChecker.java:820) 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] [jsr308.javac],位于jdk.compiler / com.sun.tools.javac.api.ClientCodeWrapper $ WrappedTaskListener.finished(ClientCodeWrapper.java:828) 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中的[jsr308.javac](JavaCompiler.java:973) 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上的[jsr308.javac](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) ' edu.cmu.cs.glacier.GlacierAnnotatedTypeFactory上的[jsr308.javac]。(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)' edu.cmu.cs.glacier.GlacierAnnotatedTypeFactory上的[jsr308.javac]。(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) org.checkerframework.common.basetype.BaseTypeVisitor.createTypeFactory(BaseTypeVisitor.java:249)上的[jsr308.javac] org.checkerframework.common.basetype.BaseTypeVisitor上的[jsr308.javac]。(BaseTypeVisitor.java:217) org.checkerframework.common.basetype.BaseTypeVisitor上的[jsr308.javac]。(BaseTypeVisitor.java:206) edu.cmu.cs.glacier.GlacierVisitor上的[jsr308.javac]。(GlacierVisitor.java:54) 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 [jsr308.javac](SourceChecker.java:820) 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] [jsr308.javac]位于jdk.compiler / com.sun.tools.javac.api.ClientCodeWrapper $ WrappedTaskListener.finished(ClientCodeWrapper.java:828) 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中的[jsr308.javac](JavaCompiler.java:973) 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上的[jsr308.javac](Main.java:43) [jsr308.javac] 1个错误

感谢您阅读我的英语不佳。

解决方法

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

冰川不再维护。它的问题跟踪器包含您提出的issue -使用更高版本的Checker Framework运行Glacier -但是维护者说“我现在没有时间进行此工作”。

如果您想自己更新Glacier,则可以看到pull request,该更新使Glacier与Checker Framework 2.3.2一起使用。您将需要从源代码构建Glacier,以使用该版本的Checker Framework。 Checker Framework的版本为available in Maven Central

,

我阅读了“ Checker Framework手册版本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]是强制不变性的类型系统 约束。分发了所有三种类型系统的类型检查器 Checker Framework 1.9.13版(于4月1日发行) 2016)。如果要使用它们,请安装Checker Framework版本 1.9.13。

然后,我认为“ Glacier”是可行的,而“ Immutability checkers”在“ Checker Framework 3.6.0”上不可行。

感谢蒙斯特。

我了解到,不仅“不可移植性检查器”而且“冰川”也不适用于Checker Framework 3.6.0版。

我尝试使用带有“ net.jcip.annotations.Immutable”的SpotBugs检查示例源。 我似乎可行。

我将使用SpotBugs。

感谢您阅读我的英语不佳。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...