| package org.checkerframework.checker.testchecker.wholeprograminference; |
| |
| import com.sun.source.tree.AnnotationTree; |
| import com.sun.tools.javac.tree.JCTree; |
| import com.sun.tools.javac.tree.TreeInfo; |
| import javax.lang.model.element.Element; |
| import javax.lang.model.element.ExecutableElement; |
| import org.checkerframework.checker.testchecker.wholeprograminference.qual.DefaultType; |
| import org.checkerframework.common.basetype.BaseTypeChecker; |
| import org.checkerframework.common.basetype.BaseTypeVisitor; |
| import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedExecutableType; |
| |
| /** Visitor for a simple type system to test whole-program inference using .jaif files. */ |
| public class WholeProgramInferenceTestVisitor |
| extends BaseTypeVisitor<WholeProgramInferenceTestAnnotatedTypeFactory> { |
| |
| public WholeProgramInferenceTestVisitor(BaseTypeChecker checker) { |
| super(checker); |
| } |
| |
| @Override |
| protected WholeProgramInferenceTestAnnotatedTypeFactory createTypeFactory() { |
| return new WholeProgramInferenceTestAnnotatedTypeFactory(checker); |
| } |
| |
| @Override |
| public Void visitAnnotation(AnnotationTree node, Void p) { |
| Element anno = TreeInfo.symbol((JCTree) node.getAnnotationType()); |
| if (anno.toString().equals(DefaultType.class.getName())) { |
| checker.reportError(node, "annotation.not.allowed.in.src", anno.toString()); |
| } |
| return super.visitAnnotation(node, p); |
| } |
| |
| @Override |
| protected void checkConstructorResult( |
| AnnotatedExecutableType constructorType, ExecutableElement constructorElement) { |
| // Skip this check. |
| } |
| } |