You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
If a record has a field whose type involves a generic parameter, and said parameter has an annotation on it, then creating a compact constructor causes Checker to crash. This code:
importorg.checkerframework.checker.index.qual.NonNegative;
importjava.util.List;
public record Foo( List<@NonNegativeInteger> bar ) {
publicFoo {
if ( bar.size() < 0 ) {
thrownewIllegalArgumentException();
}
}
}
With the command .\bin\javac.bat -processor nullness Foo.java -d out (Checker 3.36.0) gives the following error:
❯ .\bin\javac.bat -processor nullness Foo.java
error: Error in AnnotatedTypeMirror.fromExpression(KeyForAnnotatedTypeFactory, super): handleInvalid(this=org.checkerframework.framework.util.element.MethodApplier):
Invalid variable and element passed to extractAndApply; type: Foo <init>(List p0)
element: Foo(java.util.List<@org.checkerframework.checker.index.qual.NonNegative java.lang.Integer>) (kind: CONSTRUCTOR), invalid annotations: @org.checkerframework.checker.index.qual.NonNegative ([FIELD, location = (TYPE_ARGUMENT(0)), pos = 133])
Targeted annotations: METHOD_RECEIVER, METHOD_RETURN, THROWS
Valid annotations: LOCAL_VARIABLE, RESOURCE_VARIABLE, EXCEPTION_PARAMETER, NEW, CAST, INSTANCEOF, METHOD_INVOCATION_TYPE_ARGUMENT, CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT, METHOD_REFERENCE, CONSTRUCTOR_REFERENCE, METHOD_REFERENCE_TYPE_ARGUMENT, CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT, METHOD_TYPE_PARAMETER, METHOD_TYPE_PARAMETER_BOUND, METHOD_FORMAL_PARAMETER, CLASS_EXTENDS, UNKNOWN
; The Checker Framework crashed. Please report the crash.
Compilation unit: Foo.java
Last visited tree at line 4 column 1:
public record Foo( List<@NonNegative Integer> bar ) {
Exception: org.checkerframework.javacutil.BugInCF: handleInvalid(this=org.checkerframework.framework.util.element.MethodApplier):
Invalid variable and element passed to extractAndApply; type: Foo <init>(List p0)
element: Foo(java.util.List<@org.checkerframework.checker.index.qual.NonNegative java.lang.Integer>) (kind: CONSTRUCTOR), invalid annotations: @org.checkerframework.checker.index.qual.NonNegative ([FIELD, location = (TYPE_ARGUMENT(0)), pos = 133])
Targeted annotations: METHOD_RECEIVER, METHOD_RETURN, THROWS
Valid annotations: LOCAL_VARIABLE, RESOURCE_VARIABLE, EXCEPTION_PARAMETER, NEW, CAST, INSTANCEOF, METHOD_INVOCATION_TYPE_ARGUMENT, CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT, METHOD_REFERENCE, CONSTRUCTOR_REFERENCE, METHOD_REFERENCE_TYPE_ARGUMENT, CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT, METHOD_TYPE_PARAMETER, METHOD_TYPE_PARAMETER_BOUND, METHOD_FORMAL_PARAMETER, CLASS_EXTENDS, UNKNOWN; org.checkerframework.javacutil.BugInCF: handleInvalid(this=org.checkerframework.framework.util.element.MethodApplier):
Invalid variable and element passed to extractAndApply; type: Foo <init>(List p0)
element: Foo(java.util.List<@org.checkerframework.checker.index.qual.NonNegative java.lang.Integer>) (kind: CONSTRUCTOR), invalid annotations: @org.checkerframework.checker.index.qual.NonNegative ([FIELD, location = (TYPE_ARGUMENT(0)), pos = 133])
Targeted annotations: METHOD_RECEIVER, METHOD_RETURN, THROWS
Valid annotations: LOCAL_VARIABLE, RESOURCE_VARIABLE, EXCEPTION_PARAMETER, NEW, CAST, INSTANCEOF, METHOD_INVOCATION_TYPE_ARGUMENT, CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT, METHOD_REFERENCE, CONSTRUCTOR_REFERENCE, METHOD_REFERENCE_TYPE_ARGUMENT, CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT, METHOD_TYPE_PARAMETER, METHOD_TYPE_PARAMETER_BOUND, METHOD_FORMAL_PARAMETER, CLASS_EXTENDS, UNKNOWN
at org.checkerframework.framework.util.element.TargetedElementAnnotationApplier.handleInvalid(TargetedElementAnnotationApplier.java:142)
at org.checkerframework.framework.util.element.TargetedElementAnnotationApplier.extractAndApply(TargetedElementAnnotationApplier.java:204)
at org.checkerframework.framework.util.element.MethodApplier.extractAndApply(MethodApplier.java:145)
at org.checkerframework.framework.util.element.MethodApplier.apply(MethodApplier.java:32)
at org.checkerframework.framework.type.ElementAnnotationApplier.applyInternal(ElementAnnotationApplier.java:134)
at org.checkerframework.framework.type.ElementAnnotationApplier.apply(ElementAnnotationApplier.java:83)
at org.checkerframework.framework.type.TypeFromMemberVisitor.visitMethod(TypeFromMemberVisitor.java:133)
at org.checkerframework.framework.type.TypeFromMemberVisitor.visitMethod(TypeFromMemberVisitor.java:29)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:953)
at jdk.compiler/com.sun.source.util.SimpleTreeVisitor.visit(SimpleTreeVisitor.java:81)
at org.checkerframework.framework.type.TypeFromTree.fromMember(TypeFromTree.java:63)
at org.checkerframework.framework.type.AnnotatedTypeFactory.fromMember(AnnotatedTypeFactory.java:1587)
at org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:1349)
at org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:3250)
at org.checkerframework.framework.type.AnnotatedTypeFactory.getSelfType(AnnotatedTypeFactory.java:2114)
at org.checkerframework.framework.type.TypeFromExpressionVisitor.visitIdentifier(TypeFromExpressionVisitor.java:224)
at org.checkerframework.framework.type.TypeFromExpressionVisitor.visitIdentifier(TypeFromExpressionVisitor.java:77)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCIdent.accept(JCTree.java:2592)
at jdk.compiler/com.sun.source.util.SimpleTreeVisitor.visit(SimpleTreeVisitor.java:81)
at org.checkerframework.framework.type.TypeFromTree.fromExpression(TypeFromTree.java:40)
at org.checkerframework.framework.type.AnnotatedTypeFactory.fromExpression(AnnotatedTypeFactory.java:1682)
at org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:1352)
at org.checkerframework.framework.flow.CFAbstractTransfer.getValueFromFactory(CFAbstractTransfer.java:211)
at org.checkerframework.framework.flow.CFAbstractTransfer.visitNode(CFAbstractTransfer.java:525)
at org.checkerframework.framework.flow.CFAbstractTransfer.visitNode(CFAbstractTransfer.java:98)
at org.checkerframework.dataflow.cfg.node.AbstractNodeVisitor.visitMethodAccess(AbstractNodeVisitor.java:240)
at org.checkerframework.dataflow.cfg.node.MethodAccessNode.accept(MethodAccessNode.java:63)
at org.checkerframework.dataflow.analysis.AbstractAnalysis.callTransferFunction(AbstractAnalysis.java:349)
at org.checkerframework.dataflow.analysis.ForwardAnalysisImpl.callTransferFunction(ForwardAnalysisImpl.java:377)
at org.checkerframework.dataflow.analysis.ForwardAnalysisImpl.performAnalysisBlock(ForwardAnalysisImpl.java:128)
at org.checkerframework.dataflow.analysis.ForwardAnalysisImpl.performAnalysis(ForwardAnalysisImpl.java:105)
at org.checkerframework.framework.flow.CFAbstractAnalysis.performAnalysis(CFAbstractAnalysis.java:147)
at org.checkerframework.framework.type.GenericAnnotatedTypeFactory.analyze(GenericAnnotatedTypeFactory.java:1544)
at org.checkerframework.framework.type.GenericAnnotatedTypeFactory.performFlowAnalysis(GenericAnnotatedTypeFactory.java:1444)
at org.checkerframework.framework.type.GenericAnnotatedTypeFactory.checkAndPerformFlowAnalysis(GenericAnnotatedTypeFactory.java:1933)
at org.checkerframework.framework.type.GenericAnnotatedTypeFactory.preProcessClassTree(GenericAnnotatedTypeFactory.java:423)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitClass(BaseTypeVisitor.java:536)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitClass(BaseTypeVisitor.java:184)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:860)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:60)
at org.checkerframework.framework.source.SourceVisitor.visit(SourceVisitor.java:86)
at org.checkerframework.framework.source.SourceChecker.typeProcess(SourceChecker.java:1043)
at org.checkerframework.common.basetype.BaseTypeChecker.typeProcess(BaseTypeChecker.java:558)
at org.checkerframework.common.basetype.BaseTypeChecker.typeProcess(BaseTypeChecker.java:551)
at org.checkerframework.javacutil.AbstractTypeProcessor$AttributionTaskListener.finished(AbstractTypeProcessor.java:188)
at jdk.compiler/com.sun.tools.javac.api.ClientCodeWrapper$WrappedTaskListener.finished(ClientCodeWrapper.java:854)
at jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:132)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1394)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1351)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:946)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:317)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:176)
at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:64)
at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:50)
Caused by: java.lang.Throwable
at org.checkerframework.javacutil.BugInCF.<init>(BugInCF.java:22)
... 54 more
Underlying Exception: java.lang.Throwable; java.lang.Throwable
at org.checkerframework.javacutil.BugInCF.<init>(BugInCF.java:22)
at org.checkerframework.framework.util.element.TargetedElementAnnotationApplier.handleInvalid(TargetedElementAnnotationApplier.java:142)
at org.checkerframework.framework.util.element.TargetedElementAnnotationApplier.extractAndApply(TargetedElementAnnotationApplier.java:204)
at org.checkerframework.framework.util.element.MethodApplier.extractAndApply(MethodApplier.java:145)
at org.checkerframework.framework.util.element.MethodApplier.apply(MethodApplier.java:32)
at org.checkerframework.framework.type.ElementAnnotationApplier.applyInternal(ElementAnnotationApplier.java:134)
at org.checkerframework.framework.type.ElementAnnotationApplier.apply(ElementAnnotationApplier.java:83)
at org.checkerframework.framework.type.TypeFromMemberVisitor.visitMethod(TypeFromMemberVisitor.java:133)
at org.checkerframework.framework.type.TypeFromMemberVisitor.visitMethod(TypeFromMemberVisitor.java:29)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:953)
at jdk.compiler/com.sun.source.util.SimpleTreeVisitor.visit(SimpleTreeVisitor.java:81)
at org.checkerframework.framework.type.TypeFromTree.fromMember(TypeFromTree.java:63)
at org.checkerframework.framework.type.AnnotatedTypeFactory.fromMember(AnnotatedTypeFactory.java:1587)
at org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:1349)
at org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:3250)
at org.checkerframework.framework.type.AnnotatedTypeFactory.getSelfType(AnnotatedTypeFactory.java:2114)
at org.checkerframework.framework.type.TypeFromExpressionVisitor.visitIdentifier(TypeFromExpressionVisitor.java:224)
at org.checkerframework.framework.type.TypeFromExpressionVisitor.visitIdentifier(TypeFromExpressionVisitor.java:77)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCIdent.accept(JCTree.java:2592)
at jdk.compiler/com.sun.source.util.SimpleTreeVisitor.visit(SimpleTreeVisitor.java:81)
at org.checkerframework.framework.type.TypeFromTree.fromExpression(TypeFromTree.java:40)
at org.checkerframework.framework.type.AnnotatedTypeFactory.fromExpression(AnnotatedTypeFactory.java:1682)
at org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:1352)
at org.checkerframework.framework.flow.CFAbstractTransfer.getValueFromFactory(CFAbstractTransfer.java:211)
at org.checkerframework.framework.flow.CFAbstractTransfer.visitNode(CFAbstractTransfer.java:525)
at org.checkerframework.framework.flow.CFAbstractTransfer.visitNode(CFAbstractTransfer.java:98)
at org.checkerframework.dataflow.cfg.node.AbstractNodeVisitor.visitMethodAccess(AbstractNodeVisitor.java:240)
at org.checkerframework.dataflow.cfg.node.MethodAccessNode.accept(MethodAccessNode.java:63)
at org.checkerframework.dataflow.analysis.AbstractAnalysis.callTransferFunction(AbstractAnalysis.java:349)
at org.checkerframework.dataflow.analysis.ForwardAnalysisImpl.callTransferFunction(ForwardAnalysisImpl.java:377)
at org.checkerframework.dataflow.analysis.ForwardAnalysisImpl.performAnalysisBlock(ForwardAnalysisImpl.java:128)
at org.checkerframework.dataflow.analysis.ForwardAnalysisImpl.performAnalysis(ForwardAnalysisImpl.java:105)
at org.checkerframework.framework.flow.CFAbstractAnalysis.performAnalysis(CFAbstractAnalysis.java:147)
at org.checkerframework.framework.type.GenericAnnotatedTypeFactory.analyze(GenericAnnotatedTypeFactory.java:1544)
at org.checkerframework.framework.type.GenericAnnotatedTypeFactory.performFlowAnalysis(GenericAnnotatedTypeFactory.java:1444)
at org.checkerframework.framework.type.GenericAnnotatedTypeFactory.checkAndPerformFlowAnalysis(GenericAnnotatedTypeFactory.java:1933)
at org.checkerframework.framework.type.GenericAnnotatedTypeFactory.preProcessClassTree(GenericAnnotatedTypeFactory.java:423)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitClass(BaseTypeVisitor.java:536)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitClass(BaseTypeVisitor.java:184)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:860)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:60)
at org.checkerframework.framework.source.SourceVisitor.visit(SourceVisitor.java:86)
at org.checkerframework.framework.source.SourceChecker.typeProcess(SourceChecker.java:1043)
at org.checkerframework.common.basetype.BaseTypeChecker.typeProcess(BaseTypeChecker.java:558)
at org.checkerframework.common.basetype.BaseTypeChecker.typeProcess(BaseTypeChecker.java:551)
at org.checkerframework.javacutil.AbstractTypeProcessor$AttributionTaskListener.finished(AbstractTypeProcessor.java:188)
at jdk.compiler/com.sun.tools.javac.api.ClientCodeWrapper$WrappedTaskListener.finished(ClientCodeWrapper.java:854)
at jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:132)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1394)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1351)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:946)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:317)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:176)
at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:64)
at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:50)
error: Error in AnnotatedTypeMirror.fromExpression(NullnessAnnotatedTypeFactory, super): handleInvalid(this=org.checkerframework.framework.util.element.MethodApplier):
Invalid variable and element passed to extractAndApply; type: Foo <init>(List p0)
element: Foo(java.util.List<@org.checkerframework.checker.index.qual.NonNegative java.lang.Integer>) (kind: CONSTRUCTOR), invalid annotations: @org.checkerframework.checker.index.qual.NonNegative ([FIELD, location = (TYPE_ARGUMENT(0)), pos = 133])
Targeted annotations: METHOD_RECEIVER, METHOD_RETURN, THROWS
Valid annotations: LOCAL_VARIABLE, RESOURCE_VARIABLE, EXCEPTION_PARAMETER, NEW, CAST, INSTANCEOF, METHOD_INVOCATION_TYPE_ARGUMENT, CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT, METHOD_REFERENCE, CONSTRUCTOR_REFERENCE, METHOD_REFERENCE_TYPE_ARGUMENT, CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT, METHOD_TYPE_PARAMETER, METHOD_TYPE_PARAMETER_BOUND, METHOD_FORMAL_PARAMETER, CLASS_EXTENDS, UNKNOWN
; The Checker Framework crashed. Please report the crash.
Compilation unit: Foo.java
Last visited tree at line 4 column 1:
public record Foo( List<@NonNegative Integer> bar ) {
Exception: org.checkerframework.javacutil.BugInCF: handleInvalid(this=org.checkerframework.framework.util.element.MethodApplier):
Invalid variable and element passed to extractAndApply; type: Foo <init>(List p0)
element: Foo(java.util.List<@org.checkerframework.checker.index.qual.NonNegative java.lang.Integer>) (kind: CONSTRUCTOR), invalid annotations: @org.checkerframework.checker.index.qual.NonNegative ([FIELD, location = (TYPE_ARGUMENT(0)), pos = 133])
Targeted annotations: METHOD_RECEIVER, METHOD_RETURN, THROWS
Valid annotations: LOCAL_VARIABLE, RESOURCE_VARIABLE, EXCEPTION_PARAMETER, NEW, CAST, INSTANCEOF, METHOD_INVOCATION_TYPE_ARGUMENT, CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT, METHOD_REFERENCE, CONSTRUCTOR_REFERENCE, METHOD_REFERENCE_TYPE_ARGUMENT, CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT, METHOD_TYPE_PARAMETER, METHOD_TYPE_PARAMETER_BOUND, METHOD_FORMAL_PARAMETER, CLASS_EXTENDS, UNKNOWN; org.checkerframework.javacutil.BugInCF: handleInvalid(this=org.checkerframework.framework.util.element.MethodApplier):
Invalid variable and element passed to extractAndApply; type: Foo <init>(List p0)
element: Foo(java.util.List<@org.checkerframework.checker.index.qual.NonNegative java.lang.Integer>) (kind: CONSTRUCTOR), invalid annotations: @org.checkerframework.checker.index.qual.NonNegative ([FIELD, location = (TYPE_ARGUMENT(0)), pos = 133])
Targeted annotations: METHOD_RECEIVER, METHOD_RETURN, THROWS
Valid annotations: LOCAL_VARIABLE, RESOURCE_VARIABLE, EXCEPTION_PARAMETER, NEW, CAST, INSTANCEOF, METHOD_INVOCATION_TYPE_ARGUMENT, CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT, METHOD_REFERENCE, CONSTRUCTOR_REFERENCE, METHOD_REFERENCE_TYPE_ARGUMENT, CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT, METHOD_TYPE_PARAMETER, METHOD_TYPE_PARAMETER_BOUND, METHOD_FORMAL_PARAMETER, CLASS_EXTENDS, UNKNOWN
at org.checkerframework.framework.util.element.TargetedElementAnnotationApplier.handleInvalid(TargetedElementAnnotationApplier.java:142)
at org.checkerframework.framework.util.element.TargetedElementAnnotationApplier.extractAndApply(TargetedElementAnnotationApplier.java:204)
at org.checkerframework.framework.util.element.MethodApplier.extractAndApply(MethodApplier.java:145)
at org.checkerframework.framework.util.element.MethodApplier.apply(MethodApplier.java:32)
at org.checkerframework.framework.type.ElementAnnotationApplier.applyInternal(ElementAnnotationApplier.java:134)
at org.checkerframework.framework.type.ElementAnnotationApplier.apply(ElementAnnotationApplier.java:83)
at org.checkerframework.framework.type.TypeFromMemberVisitor.visitMethod(TypeFromMemberVisitor.java:133)
at org.checkerframework.framework.type.TypeFromMemberVisitor.visitMethod(TypeFromMemberVisitor.java:29)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:953)
at jdk.compiler/com.sun.source.util.SimpleTreeVisitor.visit(SimpleTreeVisitor.java:81)
at org.checkerframework.framework.type.TypeFromTree.fromMember(TypeFromTree.java:63)
at org.checkerframework.framework.type.AnnotatedTypeFactory.fromMember(AnnotatedTypeFactory.java:1587)
at org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:1349)
at org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:3250)
at org.checkerframework.framework.type.AnnotatedTypeFactory.getSelfType(AnnotatedTypeFactory.java:2114)
at org.checkerframework.checker.initialization.InitializationAnnotatedTypeFactory.getSelfType(InitializationAnnotatedTypeFactory.java:443)
at org.checkerframework.framework.type.TypeFromExpressionVisitor.visitIdentifier(TypeFromExpressionVisitor.java:224)
at org.checkerframework.framework.type.TypeFromExpressionVisitor.visitIdentifier(TypeFromExpressionVisitor.java:77)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCIdent.accept(JCTree.java:2592)
at jdk.compiler/com.sun.source.util.SimpleTreeVisitor.visit(SimpleTreeVisitor.java:81)
at org.checkerframework.framework.type.TypeFromTree.fromExpression(TypeFromTree.java:40)
at org.checkerframework.framework.type.AnnotatedTypeFactory.fromExpression(AnnotatedTypeFactory.java:1682)
at org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:1352)
at org.checkerframework.framework.flow.CFAbstractTransfer.getValueFromFactory(CFAbstractTransfer.java:211)
at org.checkerframework.framework.flow.CFAbstractTransfer.visitNode(CFAbstractTransfer.java:525)
at org.checkerframework.framework.flow.CFAbstractTransfer.visitNode(CFAbstractTransfer.java:98)
at org.checkerframework.dataflow.cfg.node.AbstractNodeVisitor.visitMethodAccess(AbstractNodeVisitor.java:240)
at org.checkerframework.checker.nullness.NullnessTransfer.visitMethodAccess(NullnessTransfer.java:340)
at org.checkerframework.checker.nullness.NullnessTransfer.visitMethodAccess(NullnessTransfer.java:60)
at org.checkerframework.dataflow.cfg.node.MethodAccessNode.accept(MethodAccessNode.java:63)
at org.checkerframework.dataflow.analysis.AbstractAnalysis.callTransferFunction(AbstractAnalysis.java:349)
at org.checkerframework.dataflow.analysis.ForwardAnalysisImpl.callTransferFunction(ForwardAnalysisImpl.java:377)
at org.checkerframework.dataflow.analysis.ForwardAnalysisImpl.performAnalysisBlock(ForwardAnalysisImpl.java:128)
at org.checkerframework.dataflow.analysis.ForwardAnalysisImpl.performAnalysis(ForwardAnalysisImpl.java:105)
at org.checkerframework.framework.flow.CFAbstractAnalysis.performAnalysis(CFAbstractAnalysis.java:147)
at org.checkerframework.framework.type.GenericAnnotatedTypeFactory.analyze(GenericAnnotatedTypeFactory.java:1544)
at org.checkerframework.framework.type.GenericAnnotatedTypeFactory.performFlowAnalysis(GenericAnnotatedTypeFactory.java:1444)
at org.checkerframework.framework.type.GenericAnnotatedTypeFactory.checkAndPerformFlowAnalysis(GenericAnnotatedTypeFactory.java:1933)
at org.checkerframework.framework.type.GenericAnnotatedTypeFactory.preProcessClassTree(GenericAnnotatedTypeFactory.java:423)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitClass(BaseTypeVisitor.java:536)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitClass(BaseTypeVisitor.java:184)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:860)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:60)
at org.checkerframework.framework.source.SourceVisitor.visit(SourceVisitor.java:86)
at org.checkerframework.framework.source.SourceChecker.typeProcess(SourceChecker.java:1043)
at org.checkerframework.common.basetype.BaseTypeChecker.typeProcess(BaseTypeChecker.java:558)
at org.checkerframework.javacutil.AbstractTypeProcessor$AttributionTaskListener.finished(AbstractTypeProcessor.java:188)
at jdk.compiler/com.sun.tools.javac.api.ClientCodeWrapper$WrappedTaskListener.finished(ClientCodeWrapper.java:854)
at jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:132)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1394)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1351)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:946)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:317)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:176)
at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:64)
at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:50)
Caused by: java.lang.Throwable
at org.checkerframework.javacutil.BugInCF.<init>(BugInCF.java:22)
... 56 more
Underlying Exception: java.lang.Throwable; java.lang.Throwable
at org.checkerframework.javacutil.BugInCF.<init>(BugInCF.java:22)
at org.checkerframework.framework.util.element.TargetedElementAnnotationApplier.handleInvalid(TargetedElementAnnotationApplier.java:142)
at org.checkerframework.framework.util.element.TargetedElementAnnotationApplier.extractAndApply(TargetedElementAnnotationApplier.java:204)
at org.checkerframework.framework.util.element.MethodApplier.extractAndApply(MethodApplier.java:145)
at org.checkerframework.framework.util.element.MethodApplier.apply(MethodApplier.java:32)
at org.checkerframework.framework.type.ElementAnnotationApplier.applyInternal(ElementAnnotationApplier.java:134)
at org.checkerframework.framework.type.ElementAnnotationApplier.apply(ElementAnnotationApplier.java:83)
at org.checkerframework.framework.type.TypeFromMemberVisitor.visitMethod(TypeFromMemberVisitor.java:133)
at org.checkerframework.framework.type.TypeFromMemberVisitor.visitMethod(TypeFromMemberVisitor.java:29)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:953)
at jdk.compiler/com.sun.source.util.SimpleTreeVisitor.visit(SimpleTreeVisitor.java:81)
at org.checkerframework.framework.type.TypeFromTree.fromMember(TypeFromTree.java:63)
at org.checkerframework.framework.type.AnnotatedTypeFactory.fromMember(AnnotatedTypeFactory.java:1587)
at org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:1349)
at org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:3250)
at org.checkerframework.framework.type.AnnotatedTypeFactory.getSelfType(AnnotatedTypeFactory.java:2114)
at org.checkerframework.checker.initialization.InitializationAnnotatedTypeFactory.getSelfType(InitializationAnnotatedTypeFactory.java:443)
at org.checkerframework.framework.type.TypeFromExpressionVisitor.visitIdentifier(TypeFromExpressionVisitor.java:224)
at org.checkerframework.framework.type.TypeFromExpressionVisitor.visitIdentifier(TypeFromExpressionVisitor.java:77)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCIdent.accept(JCTree.java:2592)
at jdk.compiler/com.sun.source.util.SimpleTreeVisitor.visit(SimpleTreeVisitor.java:81)
at org.checkerframework.framework.type.TypeFromTree.fromExpression(TypeFromTree.java:40)
at org.checkerframework.framework.type.AnnotatedTypeFactory.fromExpression(AnnotatedTypeFactory.java:1682)
at org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:1352)
at org.checkerframework.framework.flow.CFAbstractTransfer.getValueFromFactory(CFAbstractTransfer.java:211)
at org.checkerframework.framework.flow.CFAbstractTransfer.visitNode(CFAbstractTransfer.java:525)
at org.checkerframework.framework.flow.CFAbstractTransfer.visitNode(CFAbstractTransfer.java:98)
at org.checkerframework.dataflow.cfg.node.AbstractNodeVisitor.visitMethodAccess(AbstractNodeVisitor.java:240)
at org.checkerframework.checker.nullness.NullnessTransfer.visitMethodAccess(NullnessTransfer.java:340)
at org.checkerframework.checker.nullness.NullnessTransfer.visitMethodAccess(NullnessTransfer.java:60)
at org.checkerframework.dataflow.cfg.node.MethodAccessNode.accept(MethodAccessNode.java:63)
at org.checkerframework.dataflow.analysis.AbstractAnalysis.callTransferFunction(AbstractAnalysis.java:349)
at org.checkerframework.dataflow.analysis.ForwardAnalysisImpl.callTransferFunction(ForwardAnalysisImpl.java:377)
at org.checkerframework.dataflow.analysis.ForwardAnalysisImpl.performAnalysisBlock(ForwardAnalysisImpl.java:128)
at org.checkerframework.dataflow.analysis.ForwardAnalysisImpl.performAnalysis(ForwardAnalysisImpl.java:105)
at org.checkerframework.framework.flow.CFAbstractAnalysis.performAnalysis(CFAbstractAnalysis.java:147)
at org.checkerframework.framework.type.GenericAnnotatedTypeFactory.analyze(GenericAnnotatedTypeFactory.java:1544)
at org.checkerframework.framework.type.GenericAnnotatedTypeFactory.performFlowAnalysis(GenericAnnotatedTypeFactory.java:1444)
at org.checkerframework.framework.type.GenericAnnotatedTypeFactory.checkAndPerformFlowAnalysis(GenericAnnotatedTypeFactory.java:1933)
at org.checkerframework.framework.type.GenericAnnotatedTypeFactory.preProcessClassTree(GenericAnnotatedTypeFactory.java:423)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitClass(BaseTypeVisitor.java:536)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitClass(BaseTypeVisitor.java:184)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:860)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:60)
at org.checkerframework.framework.source.SourceVisitor.visit(SourceVisitor.java:86)
at org.checkerframework.framework.source.SourceChecker.typeProcess(SourceChecker.java:1043)
at org.checkerframework.common.basetype.BaseTypeChecker.typeProcess(BaseTypeChecker.java:558)
at org.checkerframework.javacutil.AbstractTypeProcessor$AttributionTaskListener.finished(AbstractTypeProcessor.java:188)
at jdk.compiler/com.sun.tools.javac.api.ClientCodeWrapper$WrappedTaskListener.finished(ClientCodeWrapper.java:854)
at jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:132)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1394)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1351)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:946)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:317)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:176)
at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:64)
at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:50)
2 errors
Writing a full canonical constructor instead compiles fine:
importorg.checkerframework.checker.index.qual.NonNegative;
importjava.util.List;
public record Foo( List<@NonNegativeInteger> bar ) {
publicFoo( List<@NonNegativeInteger> bar ) {
if ( bar.size() < 0 ) {
thrownewIllegalArgumentException();
}
this.bar = bar;
}
}
Removing the @NonNegative annotation also avoids the crash.
The text was updated successfully, but these errors were encountered:
tmarback
changed the title
Checker crashes on Record compact constructor if field has annotated generic type
Checker crashes on Record compact constructor if field has annotated generic parameter
Jul 17, 2023
If a record has a field whose type involves a generic parameter, and said parameter has an annotation on it, then creating a compact constructor causes Checker to crash. This code:
With the command
.\bin\javac.bat -processor nullness Foo.java -d out (Checker 3.36.0)
gives the following error:Writing a full canonical constructor instead compiles fine:
Removing the
@NonNegative
annotation also avoids the crash.The text was updated successfully, but these errors were encountered: