Search code examples
javaimmutabilitycheckstyleeffective-java

Glacier Class Immutable Checker does not works on Checker Framework 3.6.0


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


Solution

  • 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.