1

I try to use Glacier Class Immutable Checker does not works on Checker Framework 3.6.0.

I get Glacier 0.1 with Maven. (http://mcoblenz.github.io/Glacier/)

Then, I tried to check the sample source, but an error occurs. Can I use Glacier Class Immutable Checker with Checker Framework 3.6.0?

[jsr308.javac] javac 11.0.7 [jsr308.javac] error: InvocationTargetException when invoking constructor for class edu.cmu.cs.glacier.GlacierAnnotatedTypeFactory on args [edu.cmu.cs.glacier.GlacierChecker@625732]; Underlying cause: java.lang.NoSuchMethodError: 'javax.lang.model.element.AnnotationMirror org.checkerframework.javacutil.AnnotationUtils.fromClass(javax.lang.model.util.Elements, java.lang.Class)' [jsr308.javac] ; The Checker Framework crashed. Please report the crash. [jsr308.javac] Exception: 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.javac] at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [jsr308.javac] at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) [jsr308.javac] at org.checkerframework.common.basetype.BaseTypeChecker.invokeConstructorFor(BaseTypeChecker.java:300) [jsr308.javac] at org.checkerframework.common.basetype.BaseTypeVisitor.createTypeFactory(BaseTypeVisitor.java:249) [jsr308.javac] at org.checkerframework.common.basetype.BaseTypeVisitor.(BaseTypeVisitor.java:217) [jsr308.javac] at org.checkerframework.common.basetype.BaseTypeVisitor.(BaseTypeVisitor.java:206) [jsr308.javac] at edu.cmu.cs.glacier.GlacierVisitor.(GlacierVisitor.java:54) [jsr308.javac] at edu.cmu.cs.glacier.GlacierChecker.createSourceVisitor(GlacierChecker.java:8) [jsr308.javac] at edu.cmu.cs.glacier.GlacierChecker.createSourceVisitor(GlacierChecker.java:5) [jsr308.javac] at org.checkerframework.framework.source.SourceChecker.initChecker(SourceChecker.java:820) [jsr308.javac] at org.checkerframework.common.basetype.BaseTypeChecker.initChecker(BaseTypeChecker.java:111) [jsr308.javac] at org.checkerframework.framework.source.SourceChecker.typeProcessingStart(SourceChecker.java:771) [jsr308.javac] at org.checkerframework.javacutil.AbstractTypeProcessor$AttributionTaskListener.finished(AbstractTypeProcessor.java:167) [jsr308.javac] at jdk.compiler/com.sun.tools.javac.api.ClientCodeWrapper$WrappedTaskListener.finished(ClientCodeWrapper.java:828) [jsr308.javac] at jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:132) [jsr308.javac] at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1418) [jsr308.javac] at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1375) [jsr308.javac] at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:973) [jsr308.javac] at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:311) [jsr308.javac] at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:170) [jsr308.javac] at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:57) [jsr308.javac] at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:43) [jsr308.javac] Caused by: java.lang.NoSuchMethodError: 'javax.lang.model.element.AnnotationMirror org.checkerframework.javacutil.AnnotationUtils.fromClass(javax.lang.model.util.Elements, java.lang.Class)' [jsr308.javac] at edu.cmu.cs.glacier.GlacierAnnotatedTypeFactory.(GlacierAnnotatedTypeFactory.java:46) [jsr308.javac] ... 24 more [jsr308.javac]
[jsr308.javac] Underlying Exception: 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] at edu.cmu.cs.glacier.GlacierAnnotatedTypeFactory.(GlacierAnnotatedTypeFactory.java:46) [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.javac] at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [jsr308.javac] at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) [jsr308.javac] at org.checkerframework.common.basetype.BaseTypeChecker.invokeConstructorFor(BaseTypeChecker.java:300) [jsr308.javac] at org.checkerframework.common.basetype.BaseTypeVisitor.createTypeFactory(BaseTypeVisitor.java:249) [jsr308.javac] at org.checkerframework.common.basetype.BaseTypeVisitor.(BaseTypeVisitor.java:217) [jsr308.javac] at org.checkerframework.common.basetype.BaseTypeVisitor.(BaseTypeVisitor.java:206) [jsr308.javac] at edu.cmu.cs.glacier.GlacierVisitor.(GlacierVisitor.java:54) [jsr308.javac] at edu.cmu.cs.glacier.GlacierChecker.createSourceVisitor(GlacierChecker.java:8) [jsr308.javac] at edu.cmu.cs.glacier.GlacierChecker.createSourceVisitor(GlacierChecker.java:5) [jsr308.javac] at org.checkerframework.framework.source.SourceChecker.initChecker(SourceChecker.java:820) [jsr308.javac] at org.checkerframework.common.basetype.BaseTypeChecker.initChecker(BaseTypeChecker.java:111) [jsr308.javac] at org.checkerframework.framework.source.SourceChecker.typeProcessingStart(SourceChecker.java:771) [jsr308.javac] at org.checkerframework.javacutil.AbstractTypeProcessor$AttributionTaskListener.finished(AbstractTypeProcessor.java:167) [jsr308.javac] at jdk.compiler/com.sun.tools.javac.api.ClientCodeWrapper$WrappedTaskListener.finished(ClientCodeWrapper.java:828) [jsr308.javac] at jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:132) [jsr308.javac] at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1418) [jsr308.javac] at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1375) [jsr308.javac] at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:973) [jsr308.javac] at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:311) [jsr308.javac] at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:170) [jsr308.javac] at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:57) [jsr308.javac] at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:43) [jsr308.javac] 1 error

Lii
  • 11,553
  • 8
  • 64
  • 88
Alumuko
  • 171
  • 2
  • 11

2 Answers2

2

The replication package that is downloadable from http://mcoblenz.github.io/Glacier/ contains its own copy of the Checker Framework (files checker.jar and framework.jar), and you should use that.

Glacier is no longer maintained. Its issue tracker contains the same issue you raised -- running Glacier with a newer version of the Checker Framework -- but the maintainer says "I don't have any time to work on this right now".

If you want to update Glacier yourself, you can see the pull request that updated Glacier to work with Checker Framework 2.3.2. You will need to build Glacier from source to use that version of the Checker Framework. That version of the Checker Framework is available in Maven Central.

mernst
  • 7,437
  • 30
  • 45
1

I read "The Checker Framework Manual Version 3.6.0 (3 Aug 2020)".

25.5 Glacier: Class immutability Glacier [CNA+17] enforces transitive class immutability in Java. According to its webpage:

and

25.9 Immutability checkers: IGJ, OIGJ, and Javari Javari [TE05], IGJ [ZPA+07], and OIGJ [ZPL+10] are type systems that enforce immutability constraints. Type-checkers for all three type systems were distributed with the Checker Framework through release 1.9.13 (dated 1 April 2016). If you wish to use them, install Checker Framework version 1.9.13.

Then, I thought that "Glacier" is work and "Immutability checkers" is not work on "Checker Framework 3.6.0".

Thanks mernst.

I understood that not only "Immutability checkers" but also "Glacier" do not work with Checker Framework Version 3.6.0. actually.

I tried to check a sample source using SpotBugs with "net.jcip.annotations.Immutable". I seems that it works.

I will use SpotBugs.

Thanks for reading my poor English.

Alumuko
  • 171
  • 2
  • 11