package checkers.lock;
import javax.lang.model.element.AnnotationMirror;
import checkers.basetype.BaseTypeChecker;
import checkers.lock.quals.GuardedBy;
import checkers.types.QualifierHierarchy;
import checkers.types.AnnotatedTypeMirror.AnnotatedDeclaredType;
import checkers.util.AnnotationUtils;
import checkers.util.GraphQualifierHierarchy;
/**
* A typechecker plug-in for the JCIP type system qualifier that finds (and
* verifies the absence of) locking and concurrency errors.
*
* @see GuardedBy
*/
public class LockChecker extends BaseTypeChecker {
@Override
protected QualifierHierarchy createQualifierHierarchy() {
AnnotationUtils annoFactory = AnnotationUtils.getInstance(env);
AnnotationMirror guardedBy = annoFactory.fromClass(GuardedBy.class);
AnnotationMirror unqualified = null;
GraphQualifierHierarchy.Factory factory=
new GraphQualifierHierarchy.Factory();
factory.addQualifier(guardedBy);
factory.addQualifier(unqualified);
factory.addSubtype(unqualified, guardedBy);
return factory.build();
}
@Override
public boolean isValidUse(AnnotatedDeclaredType declarationType,
AnnotatedDeclaredType useType) {
return true;
}
}