What steps will reproduce the problem?
./scripts/inference.py --checker ostrusted.OsTrustedChecker --mode roundtrip-typecheck --log-level FINE --solver checkers.inference.solver.MaxSat2TypeSolver bar.java
Contents of bar.java:
import ostrusted.quals.OsTrusted;
class bar {
void foo(@OsTrusted String @OsTrusted [] s){}
}
What is the expected output? What do you see instead?
Expect inference and typechecking to complete without errors. See an IllegalArgumentException instead (stack trace below).
What steps will reproduce the problem? ./scripts/inference.py --checker ostrusted.OsTrustedChecker --mode roundtrip-typecheck --log-level FINE --solver checkers.inference.solver.MaxSat2TypeSolver bar.java
Contents of bar.java:
import ostrusted.quals.OsTrusted; class bar { void foo(@OsTrusted String @OsTrusted [] s){} }
What is the expected output? What do you see instead? Expect inference and typechecking to complete without errors. See an IllegalArgumentException instead (stack trace below).
What version of the product are you using?
Stack trace:
error: SourceChecker.typeProcess: unexpected Throwable (IllegalArgumentException) while processing bar.java; message: Unexpected tree (@OsTrusted() String @OsTrusted() [] s) for type (@OsTrusted String @OsTrusted []) Compilation unit: bar.java Exception: java.lang.IllegalArgumentException: Unexpected tree (@OsTrusted() String @OsTrusted() [] s) for type (@OsTrusted String @OsTrusted []); Stack trace: checkers.inference.VariableAnnotator.visitArray(VariableAnnotator.java:859) checkers.inference.VariableAnnotator.visitArray(VariableAnnotator.java:91) org.checkerframework.framework.type.AnnotatedTypeMirror$AnnotatedArrayType.accept(AnnotatedTypeMirror.java:1348) org.checkerframework.framework.type.visitor.AnnotatedTypeScanner.scan(AnnotatedTypeScanner.java:99) org.checkerframework.framework.type.visitor.AnnotatedTypeScanner.visit(AnnotatedTypeScanner.java:89) checkers.inference.VariableAnnotator.visitTogether(VariableAnnotator.java:1422) checkers.inference.VariableAnnotator.handleMethodDeclaration(VariableAnnotator.java:1357) checkers.inference.VariableAnnotator.visitExecutable(VariableAnnotator.java:1189) checkers.inference.VariableAnnotator.visitExecutable(VariableAnnotator.java:91) org.checkerframework.framework.type.AnnotatedTypeMirror$AnnotatedExecutableType.accept(AnnotatedTypeMirror.java:1083) org.checkerframework.framework.type.visitor.AnnotatedTypeScanner.scan(AnnotatedTypeScanner.java:99) org.checkerframework.framework.type.visitor.AnnotatedTypeScanner.visit(AnnotatedTypeScanner.java:89) checkers.inference.InferenceTreeAnnotator.visitMethod(InferenceTreeAnnotator.java:195) checkers.inference.InferenceTreeAnnotator.visitMethod(InferenceTreeAnnotator.java:55) com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:800) com.sun.source.util.SimpleTreeVisitor.visit(SimpleTreeVisitor.java:53) org.checkerframework.framework.type.treeannotator.ListTreeAnnotator.defaultAction(ListTreeAnnotator.java:38) org.checkerframework.framework.type.treeannotator.ListTreeAnnotator.defaultAction(ListTreeAnnotator.java:21) com.sun.source.util.SimpleTreeVisitor.visitMethod(SimpleTreeVisitor.java:77) org.checkerframework.framework.type.treeannotator.TreeAnnotator.visitMethod(TreeAnnotator.java:35) org.checkerframework.framework.type.treeannotator.TreeAnnotator.visitMethod(TreeAnnotator.java:17) com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:800) com.sun.source.util.SimpleTreeVisitor.visit(SimpleTreeVisitor.java:53) checkers.inference.InferenceAnnotatedTypeFactory.annotateImplicit(InferenceAnnotatedTypeFactory.java:466) org.checkerframework.framework.type.GenericAnnotatedTypeFactory.annotateImplicit(GenericAnnotatedTypeFactory.java:882) org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:722) org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:1826) org.checkerframework.framework.type.TypesIntoElements.storeMethod(TypesIntoElements.java:91) org.checkerframework.framework.type.TypesIntoElements.store(TypesIntoElements.java:80) org.checkerframework.framework.type.AnnotatedTypeFactory.postProcessClassTree(AnnotatedTypeFactory.java:750) org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:735) org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:1805) org.checkerframework.framework.type.GenericAnnotatedTypeFactory.performFlowAnalysis(GenericAnnotatedTypeFactory.java:604) checkers.inference.InferenceAnnotatedTypeFactory.performFlowAnalysis(InferenceAnnotatedTypeFactory.java:442) org.checkerframework.framework.type.GenericAnnotatedTypeFactory.checkAndPerformFlowAnalysis(GenericAnnotatedTypeFactory.java:931) checkers.inference.InferenceAnnotatedTypeFactory.annotateImplicit(InferenceAnnotatedTypeFactory.java:477) org.checkerframework.framework.type.GenericAnnotatedTypeFactory.annotateImplicit(GenericAnnotatedTypeFactory.java:882) org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:722) org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:1805) org.checkerframework.common.basetype.BaseTypeVisitor.visitClass(BaseTypeVisitor.java:296) org.checkerframework.common.basetype.BaseTypeVisitor.visitClass(BaseTypeVisitor.java:173) com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:720) com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:50) org.checkerframework.framework.source.SourceVisitor.visit(SourceVisitor.java:70) org.checkerframework.framework.source.SourceChecker.typeProcess(SourceChecker.java:890) org.checkerframework.common.basetype.BaseTypeChecker.typeProcess(BaseTypeChecker.java:452) org.checkerframework.javacutil.AbstractTypeProcessor$AttributionTaskListener.finished(AbstractTypeProcessor.java:205) com.sun.tools.javac.api.ClientCodeWrapper$WrappedTaskListener.finished(ClientCodeWrapper.java:681) com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:111) com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1342) com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1296) com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:901) com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:860) com.sun.tools.javac.main.Main.compile(Main.java:523) com.sun.tools.javac.main.Main.compile(Main.java:381) com.sun.tools.javac.main.Main.compile(Main.java:370) com.sun.tools.javac.main.Main.compile(Main.java:361) checkers.inference.CheckerFrameworkUtil.invokeCheckerFramework(CheckerFrameworkUtil.java:12) checkers.inference.InferenceMain.startCheckerFramework(InferenceMain.java:159) checkers.inference.InferenceMain.run(InferenceMain.java:112) checkers.inference.InferenceCli.main(InferenceCli.java:92)