checker-framework
checker-framework copied to clipboard
NPE: Cannot invoke "javax.lang.model.element.AnnotationMirror.getAnnotationType()" because "annotation" is null
Command
javac -J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \
-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \
-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED \
-processor org.checkerframework.checker.nullness.NullnessChecker \
-cp checker-framework/checker/dist/checker.jar -Aignorejdkastub Test.java
File
import org.checkerframework.checker.nullness.qual.*;
import java.util.*;
public class Test {
public static Integer compare(Object x, Object y) { return 0; }
static public <T> void test(
Collection<List<T>> p1,
Comparator<Object> defaultComparator) throws Exception {
Collections.min(p1, switch (1) {
case 1 -> Test::compare;
default -> defaultComparator;
});
}
}
Actual behavior
error: Cannot invoke "javax.lang.model.element.AnnotationMirror.getAnnotationType()" because "annotation" is null
; The Checker Framework crashed. Please report the crash. Version: Checker Framework 3.48.2-SNAPSHOT, branch master, 2024-10-20, commit b7d9092, dirty=true.
Compilation unit: Test.java
Last visited tree at line 10 column 27:
Collections.min(p1, switch (1) {
Exception: java.lang.NullPointerException: Cannot invoke "javax.lang.model.element.AnnotationMirror.getAnnotationType()" because "annotation" is null; java.lang.NullPointerException: Cannot invoke "javax.lang.model.element.AnnotationMirror.getAnnotationType()" because "annotation" is null
at org.checkerframework.javacutil.AnnotationUtils.annotationName(AnnotationUtils.java:78)
at org.checkerframework.framework.type.ElementQualifierHierarchy.getQualifierKind(ElementQualifierHierarchy.java:176)
at org.checkerframework.framework.type.MostlyNoElementQualifierHierarchy.isSubtypeQualifiers(MostlyNoElementQualifierHierarchy.java:57)
at org.checkerframework.framework.type.QualifierHierarchy.isSubtypeShallow(QualifierHierarchy.java:200)
at org.checkerframework.framework.util.AtmLubVisitor.lubPrimaryOnBoundedType(AtmLubVisitor.java:351)
at org.checkerframework.framework.util.AtmLubVisitor.visitTypevar_Typevar(AtmLubVisitor.java:310)
at org.checkerframework.framework.util.AtmLubVisitor.visitTypevar_Typevar(AtmLubVisitor.java:33)
at org.checkerframework.framework.util.AtmCombo.accept(AtmCombo.java:613)
at org.checkerframework.framework.type.visitor.AbstractAtmComboVisitor.visit(AbstractAtmComboVisitor.java:34)
at org.checkerframework.framework.util.AtmLubVisitor.lubTypeArgument(AtmLubVisitor.java:263)
at org.checkerframework.framework.util.AtmLubVisitor.visitDeclared_Declared(AtmLubVisitor.java:208)
at org.checkerframework.framework.util.AtmLubVisitor.visitDeclared_Declared(AtmLubVisitor.java:33)
at org.checkerframework.framework.util.AtmCombo.accept(AtmCombo.java:313)
at org.checkerframework.framework.type.visitor.AbstractAtmComboVisitor.visit(AbstractAtmComboVisitor.java:34)
at org.checkerframework.framework.util.AtmLubVisitor.lubWildcard(AtmLubVisitor.java:275)
at org.checkerframework.framework.util.AtmLubVisitor.lubTypeArgument(AtmLubVisitor.java:253)
at org.checkerframework.framework.util.AtmLubVisitor.visitDeclared_Declared(AtmLubVisitor.java:208)
at org.checkerframework.framework.util.AtmLubVisitor.visitDeclared_Declared(AtmLubVisitor.java:33)
at org.checkerframework.framework.util.AtmCombo.accept(AtmCombo.java:313)
at org.checkerframework.framework.type.visitor.AbstractAtmComboVisitor.visit(AbstractAtmComboVisitor.java:34)
at org.checkerframework.framework.util.AtmLubVisitor.lub(AtmLubVisitor.java:72)
at org.checkerframework.framework.util.AnnotatedTypes.leastUpperBound(AnnotatedTypes.java:856)
at org.checkerframework.framework.type.TypeFromExpressionVisitor.lambda$visitSwitchExpressionTree17$1(TypeFromExpressionVisitor.java:217)
at org.checkerframework.javacutil.SwitchExpressionScanner$FunctionalSwitchExpressionScanner.combineResults(SwitchExpressionScanner.java:177)
at org.checkerframework.javacutil.SwitchExpressionScanner.scanSwitchExpression(SwitchExpressionScanner.java:91)
at org.checkerframework.framework.type.TypeFromExpressionVisitor.visitSwitchExpressionTree17(TypeFromExpressionVisitor.java:220)
at org.checkerframework.framework.type.TypeFromExpressionVisitor.defaultAction(TypeFromExpressionVisitor.java:190)
at org.checkerframework.framework.type.TypeFromExpressionVisitor.defaultAction(TypeFromExpressionVisitor.java:79)
at jdk.compiler/com.sun.source.util.SimpleTreeVisitor.visitSwitchExpression(SimpleTreeVisitor.java:307)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCSwitchExpression.accept(JCTree.java:1450)
at jdk.compiler/com.sun.source.util.SimpleTreeVisitor.visit(SimpleTreeVisitor.java:80)
at org.checkerframework.framework.type.TypeFromTree.fromExpression(TypeFromTree.java:41)
at org.checkerframework.framework.type.AnnotatedTypeFactory.fromExpression(AnnotatedTypeFactory.java:1734)
at org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:1404)
at org.checkerframework.common.basetype.BaseTypeVisitor.validateTypeOf(BaseTypeVisitor.java:4825)
at org.checkerframework.common.basetype.BaseTypeVisitor.commonAssignmentCheck(BaseTypeVisitor.java:3093)
at org.checkerframework.common.basetype.BaseTypeVisitor.checkArguments(BaseTypeVisitor.java:3683)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitMethodInvocation(BaseTypeVisitor.java:1843)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitMethodInvocation(BaseTypeVisitor.java:189)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1873)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at org.checkerframework.framework.source.SourceVisitor.scan(SourceVisitor.java:92)
at org.checkerframework.common.basetype.BaseTypeVisitor.scan(BaseTypeVisitor.java:408)
at org.checkerframework.common.basetype.BaseTypeVisitor.scan(BaseTypeVisitor.java:189)
at jdk.compiler/com.sun.source.util.TreeScanner.visitExpressionStatement(TreeScanner.java:504)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1652)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at org.checkerframework.framework.source.SourceVisitor.scan(SourceVisitor.java:92)
at org.checkerframework.common.basetype.BaseTypeVisitor.scan(BaseTypeVisitor.java:408)
at org.checkerframework.common.basetype.BaseTypeVisitor.scan(BaseTypeVisitor.java:189)
at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:110)
at jdk.compiler/com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:271)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1145)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at org.checkerframework.framework.source.SourceVisitor.scan(SourceVisitor.java:92)
at org.checkerframework.common.basetype.BaseTypeVisitor.scan(BaseTypeVisitor.java:408)
at org.checkerframework.common.basetype.BaseTypeVisitor.scan(BaseTypeVisitor.java:189)
at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:95)
at jdk.compiler/com.sun.source.util.TreeScanner.visitMethod(TreeScanner.java:223)
at org.checkerframework.framework.source.SourceVisitor.visitMethod(SourceVisitor.java:110)
at org.checkerframework.common.basetype.BaseTypeVisitor.processMethodTree(BaseTypeVisitor.java:1058)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitMethod(BaseTypeVisitor.java:954)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitMethod(BaseTypeVisitor.java:189)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:989)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at org.checkerframework.framework.source.SourceVisitor.scan(SourceVisitor.java:92)
at org.checkerframework.common.basetype.BaseTypeVisitor.scan(BaseTypeVisitor.java:408)
at org.checkerframework.common.basetype.BaseTypeVisitor.scan(BaseTypeVisitor.java:189)
at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:95)
at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:110)
at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:118)
at jdk.compiler/com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:202)
at org.checkerframework.framework.source.SourceVisitor.visitClass(SourceVisitor.java:98)
at org.checkerframework.common.basetype.BaseTypeVisitor.processClassTree(BaseTypeVisitor.java:603)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitClass(BaseTypeVisitor.java:558)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitClass(BaseTypeVisitor.java:189)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:896)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:66)
at org.checkerframework.framework.source.SourceVisitor.visit(SourceVisitor.java:86)
at org.checkerframework.framework.source.SourceChecker.typeProcess(SourceChecker.java:1347)
at org.checkerframework.framework.source.SourceChecker.typeProcess(SourceChecker.java:1268)
at org.checkerframework.javacutil.AbstractTypeProcessor$AttributionTaskListener.finished(AbstractTypeProcessor.java:188)
at jdk.compiler/com.sun.tools.javac.api.ClientCodeWrapper$WrappedTaskListener.finished(ClientCodeWrapper.java:876)
at jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:133)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1432)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1389)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:977)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:319)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:178)
at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:66)
at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:52)
error: Cannot invoke "javax.lang.model.element.AnnotationMirror.getAnnotationType()" because "annotation" is null
; The Checker Framework crashed. Please report the crash. Version: Checker Framework 3.48.2-SNAPSHOT, branch master, 2024-10-20, commit b7d9092, dirty=true.
Compilation unit: Test.java
Last visited tree at line 10 column 27:
Collections.min(p1, switch (1) {
Exception: java.lang.NullPointerException: Cannot invoke "javax.lang.model.element.AnnotationMirror.getAnnotationType()" because "annotation" is null; java.lang.NullPointerException: Cannot invoke "javax.lang.model.element.AnnotationMirror.getAnnotationType()" because "annotation" is null
at org.checkerframework.javacutil.AnnotationUtils.annotationName(AnnotationUtils.java:78)
at org.checkerframework.framework.type.ElementQualifierHierarchy.getQualifierKind(ElementQualifierHierarchy.java:176)
at org.checkerframework.framework.type.MostlyNoElementQualifierHierarchy.isSubtypeQualifiers(MostlyNoElementQualifierHierarchy.java:57)
at org.checkerframework.framework.type.QualifierHierarchy.isSubtypeShallow(QualifierHierarchy.java:200)
at org.checkerframework.framework.util.AtmLubVisitor.lubPrimaryOnBoundedType(AtmLubVisitor.java:351)
at org.checkerframework.framework.util.AtmLubVisitor.visitTypevar_Typevar(AtmLubVisitor.java:310)
at org.checkerframework.framework.util.AtmLubVisitor.visitTypevar_Typevar(AtmLubVisitor.java:33)
at org.checkerframework.framework.util.AtmCombo.accept(AtmCombo.java:613)
at org.checkerframework.framework.type.visitor.AbstractAtmComboVisitor.visit(AbstractAtmComboVisitor.java:34)
at org.checkerframework.framework.util.AtmLubVisitor.lubTypeArgument(AtmLubVisitor.java:263)
at org.checkerframework.framework.util.AtmLubVisitor.visitDeclared_Declared(AtmLubVisitor.java:208)
at org.checkerframework.framework.util.AtmLubVisitor.visitDeclared_Declared(AtmLubVisitor.java:33)
at org.checkerframework.framework.util.AtmCombo.accept(AtmCombo.java:313)
at org.checkerframework.framework.type.visitor.AbstractAtmComboVisitor.visit(AbstractAtmComboVisitor.java:34)
at org.checkerframework.framework.util.AtmLubVisitor.lubWildcard(AtmLubVisitor.java:275)
at org.checkerframework.framework.util.AtmLubVisitor.lubTypeArgument(AtmLubVisitor.java:253)
at org.checkerframework.framework.util.AtmLubVisitor.visitDeclared_Declared(AtmLubVisitor.java:208)
at org.checkerframework.framework.util.AtmLubVisitor.visitDeclared_Declared(AtmLubVisitor.java:33)
at org.checkerframework.framework.util.AtmCombo.accept(AtmCombo.java:313)
at org.checkerframework.framework.type.visitor.AbstractAtmComboVisitor.visit(AbstractAtmComboVisitor.java:34)
at org.checkerframework.framework.util.AtmLubVisitor.lub(AtmLubVisitor.java:72)
at org.checkerframework.framework.util.AnnotatedTypes.leastUpperBound(AnnotatedTypes.java:856)
at org.checkerframework.framework.type.TypeFromExpressionVisitor.lambda$visitSwitchExpressionTree17$1(TypeFromExpressionVisitor.java:217)
at org.checkerframework.javacutil.SwitchExpressionScanner$FunctionalSwitchExpressionScanner.combineResults(SwitchExpressionScanner.java:177)
at org.checkerframework.javacutil.SwitchExpressionScanner.scanSwitchExpression(SwitchExpressionScanner.java:91)
at org.checkerframework.framework.type.TypeFromExpressionVisitor.visitSwitchExpressionTree17(TypeFromExpressionVisitor.java:220)
at org.checkerframework.framework.type.TypeFromExpressionVisitor.defaultAction(TypeFromExpressionVisitor.java:190)
at org.checkerframework.framework.type.TypeFromExpressionVisitor.defaultAction(TypeFromExpressionVisitor.java:79)
at jdk.compiler/com.sun.source.util.SimpleTreeVisitor.visitSwitchExpression(SimpleTreeVisitor.java:307)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCSwitchExpression.accept(JCTree.java:1450)
at jdk.compiler/com.sun.source.util.SimpleTreeVisitor.visit(SimpleTreeVisitor.java:80)
at org.checkerframework.framework.type.TypeFromTree.fromExpression(TypeFromTree.java:41)
at org.checkerframework.framework.type.AnnotatedTypeFactory.fromExpression(AnnotatedTypeFactory.java:1734)
at org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:1404)
at org.checkerframework.common.basetype.BaseTypeVisitor.validateTypeOf(BaseTypeVisitor.java:4825)
at org.checkerframework.common.basetype.BaseTypeVisitor.commonAssignmentCheck(BaseTypeVisitor.java:3093)
at org.checkerframework.checker.nullness.NullnessVisitor.commonAssignmentCheck(NullnessVisitor.java:218)
at org.checkerframework.common.basetype.BaseTypeVisitor.checkArguments(BaseTypeVisitor.java:3683)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitMethodInvocation(BaseTypeVisitor.java:1843)
at org.checkerframework.checker.nullness.NullnessVisitor.visitMethodInvocation(NullnessVisitor.java:546)
at org.checkerframework.checker.nullness.NullnessVisitor.visitMethodInvocation(NullnessVisitor.java:67)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1873)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at org.checkerframework.framework.source.SourceVisitor.scan(SourceVisitor.java:92)
at org.checkerframework.common.basetype.BaseTypeVisitor.scan(BaseTypeVisitor.java:408)
at org.checkerframework.common.basetype.BaseTypeVisitor.scan(BaseTypeVisitor.java:189)
at jdk.compiler/com.sun.source.util.TreeScanner.visitExpressionStatement(TreeScanner.java:504)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1652)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at org.checkerframework.framework.source.SourceVisitor.scan(SourceVisitor.java:92)
at org.checkerframework.common.basetype.BaseTypeVisitor.scan(BaseTypeVisitor.java:408)
at org.checkerframework.common.basetype.BaseTypeVisitor.scan(BaseTypeVisitor.java:189)
at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:110)
at jdk.compiler/com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:271)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1145)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at org.checkerframework.framework.source.SourceVisitor.scan(SourceVisitor.java:92)
at org.checkerframework.common.basetype.BaseTypeVisitor.scan(BaseTypeVisitor.java:408)
at org.checkerframework.common.basetype.BaseTypeVisitor.scan(BaseTypeVisitor.java:189)
at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:95)
at jdk.compiler/com.sun.source.util.TreeScanner.visitMethod(TreeScanner.java:223)
at org.checkerframework.framework.source.SourceVisitor.visitMethod(SourceVisitor.java:110)
at org.checkerframework.common.basetype.BaseTypeVisitor.processMethodTree(BaseTypeVisitor.java:1058)
at org.checkerframework.checker.initialization.InitializationVisitor.processMethodTree(InitializationVisitor.java:293)
at org.checkerframework.checker.nullness.NullnessVisitor.processMethodTree(NullnessVisitor.java:528)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitMethod(BaseTypeVisitor.java:954)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitMethod(BaseTypeVisitor.java:189)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:989)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at org.checkerframework.framework.source.SourceVisitor.scan(SourceVisitor.java:92)
at org.checkerframework.common.basetype.BaseTypeVisitor.scan(BaseTypeVisitor.java:408)
at org.checkerframework.common.basetype.BaseTypeVisitor.scan(BaseTypeVisitor.java:189)
at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:95)
at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:110)
at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:118)
at jdk.compiler/com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:202)
at org.checkerframework.framework.source.SourceVisitor.visitClass(SourceVisitor.java:98)
at org.checkerframework.common.basetype.BaseTypeVisitor.processClassTree(BaseTypeVisitor.java:603)
at org.checkerframework.checker.initialization.InitializationVisitor.processClassTree(InitializationVisitor.java:246)
at org.checkerframework.checker.nullness.NullnessVisitor.processClassTree(NullnessVisitor.java:592)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitClass(BaseTypeVisitor.java:558)
at org.checkerframework.common.basetype.BaseTypeVisitor.visitClass(BaseTypeVisitor.java:189)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:896)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:66)
at org.checkerframework.framework.source.SourceVisitor.visit(SourceVisitor.java:86)
at org.checkerframework.framework.source.SourceChecker.typeProcess(SourceChecker.java:1347)
at org.checkerframework.javacutil.AbstractTypeProcessor$AttributionTaskListener.finished(AbstractTypeProcessor.java:188)
at jdk.compiler/com.sun.tools.javac.api.ClientCodeWrapper$WrappedTaskListener.finished(ClientCodeWrapper.java:876)
at jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:133)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1432)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1389)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:977)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:319)
at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:178)
at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:66)
at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:52)
2 errors
(This is a note for fixing this in the future.)
There's a bug in AtmLubVisitor#lubTypeArgument where when lubing:
@Tainted List<T extends @Tainted Object> and @Tainted Object is
capture#01 extends @Tainted Object super @Tainted List<T extends @Tainted Object> ends up with no annotations the bounds of T.