blob: 8b083e8c01c8ab92ee7a663c32e9086a65cb9260 [file] [log] [blame]
package org.checkerframework.framework.testchecker.nontopdefault;
import com.sun.source.tree.Tree;
import org.checkerframework.common.basetype.BaseTypeChecker;
import org.checkerframework.common.basetype.BaseTypeVisitor;
import org.checkerframework.framework.testchecker.nontopdefault.qual.NTDBottom;
import org.checkerframework.framework.testchecker.nontopdefault.qual.NTDMiddle;
import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedDeclaredType;
public class NTDVisitor extends BaseTypeVisitor<NTDAnnotatedTypeFactory> {
public NTDVisitor(BaseTypeChecker checker) {
super(checker);
}
// Because classes and interfaces are by default NTDMiddle, an override is defined here which
// allows references to be declared using any NDT type except NTDBottom.
@Override
public boolean isValidUse(
AnnotatedDeclaredType declarationType, AnnotatedDeclaredType useType, Tree tree) {
// eg for the statement "@NTDSide Double x;" the declarationType is @NTDMiddle
// Double, and the useType is @NTDSide Double
if (declarationType.getEffectiveAnnotation(NTDMiddle.class) != null
&& useType.getEffectiveAnnotation(NTDBottom.class) == null) {
return true;
} else {
// otherwise check the usage using super
return super.isValidUse(declarationType, useType, tree);
}
}
}