typetools / checker-framework-inference

Inference of pluggable types for Java
10 stars 33 forks source link

IllegalArgumentException when visiting annotation on an array during inference #2

Closed jthaine closed 8 years ago

jthaine commented 9 years ago

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)

smillst commented 8 years ago

2e001f01259cbb Fixes this issue