| package org.checkerframework.checker.lock; |
| |
| import java.util.List; |
| import java.util.Set; |
| import javax.lang.model.element.AnnotationMirror; |
| import javax.lang.model.element.VariableElement; |
| import javax.lang.model.type.TypeMirror; |
| import org.checkerframework.common.basetype.BaseTypeChecker; |
| import org.checkerframework.framework.flow.CFAbstractAnalysis; |
| import org.checkerframework.framework.flow.CFStore; |
| import org.checkerframework.framework.flow.CFValue; |
| import org.checkerframework.javacutil.Pair; |
| |
| /** |
| * The analysis class for the lock type system. |
| * |
| * <p>This class extends {@link CFAbstractAnalysis} so that {@link LockStore} is used rather than |
| * {@link CFStore}. |
| */ |
| public class LockAnalysis extends CFAbstractAnalysis<CFValue, LockStore, LockTransfer> { |
| |
| public LockAnalysis( |
| BaseTypeChecker checker, |
| LockAnnotatedTypeFactory factory, |
| List<Pair<VariableElement, CFValue>> fieldValues) { |
| super(checker, factory, fieldValues); |
| } |
| |
| @Override |
| public LockTransfer createTransferFunction() { |
| return new LockTransfer(this, (LockChecker) checker); |
| } |
| |
| @Override |
| public LockStore createEmptyStore(boolean sequentialSemantics) { |
| return new LockStore(this, sequentialSemantics); |
| } |
| |
| @Override |
| public LockStore createCopiedStore(LockStore s) { |
| return new LockStore(this, s); |
| } |
| |
| @Override |
| public CFValue createAbstractValue(Set<AnnotationMirror> annotations, TypeMirror underlyingType) { |
| return defaultCreateAbstractValue(this, annotations, underlyingType); |
| } |
| } |