blob: ab88878674ebf02f152a05d74e43a7c9e969fa7a [file] [log] [blame]
package org.checkerframework.framework.testchecker.h1h2checker;
import com.sun.source.tree.Tree;
import javax.lang.model.element.AnnotationMirror;
import org.checkerframework.common.basetype.BaseTypeChecker;
import org.checkerframework.common.basetype.BaseTypeValidator;
import org.checkerframework.common.basetype.BaseTypeVisitor;
import org.checkerframework.framework.testchecker.h1h2checker.quals.H1Invalid;
import org.checkerframework.framework.type.AnnotatedTypeFactory;
import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedDeclaredType;
import org.checkerframework.framework.util.AnnotatedTypes;
import org.checkerframework.javacutil.AnnotationBuilder;
public class H1H2Visitor extends BaseTypeVisitor<H1H2AnnotatedTypeFactory> {
public H1H2Visitor(BaseTypeChecker checker) {
super(checker);
}
@Override
protected BaseTypeValidator createTypeValidator() {
return new H1H2TypeValidator(checker, this, atypeFactory);
}
private final class H1H2TypeValidator extends BaseTypeValidator {
public H1H2TypeValidator(
BaseTypeChecker checker, BaseTypeVisitor<?> visitor, AnnotatedTypeFactory atypeFactory) {
super(checker, visitor, atypeFactory);
}
@Override
public Void visitDeclared(AnnotatedDeclaredType type, Tree p) {
AnnotationMirror h1Invalid = AnnotationBuilder.fromClass(elements, H1Invalid.class);
if (AnnotatedTypes.containsModifier(type, h1Invalid)) {
checker.reportError(
p,
// An error specific to this type system, with no corresponding text
// in a messages.properties file; this checker is just for testing.
"h1h2checker.h1invalid.forbidden",
type.getAnnotations(),
type.toString());
}
return super.visitDeclared(type, p);
}
}
}