| package org.checkerframework.checker.nullness; |
| |
| 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.CFAbstractValue; |
| import org.checkerframework.javacutil.Pair; |
| |
| /** Boilerplate code to glue together all the parts the KeyFor dataflow classes. */ |
| public class KeyForAnalysis extends CFAbstractAnalysis<KeyForValue, KeyForStore, KeyForTransfer> { |
| |
| public KeyForAnalysis( |
| BaseTypeChecker checker, |
| KeyForAnnotatedTypeFactory factory, |
| List<Pair<VariableElement, KeyForValue>> fieldValues, |
| int maxCountBeforeWidening) { |
| super(checker, factory, fieldValues, maxCountBeforeWidening); |
| } |
| |
| public KeyForAnalysis( |
| BaseTypeChecker checker, |
| KeyForAnnotatedTypeFactory factory, |
| List<Pair<VariableElement, KeyForValue>> fieldValues) { |
| super(checker, factory, fieldValues); |
| } |
| |
| @Override |
| public KeyForStore createEmptyStore(boolean sequentialSemantics) { |
| return new KeyForStore(this, sequentialSemantics); |
| } |
| |
| @Override |
| public KeyForStore createCopiedStore(KeyForStore store) { |
| return new KeyForStore(store); |
| } |
| |
| @Override |
| public KeyForValue createAbstractValue( |
| Set<AnnotationMirror> annotations, TypeMirror underlyingType) { |
| |
| if (!CFAbstractValue.validateSet(annotations, underlyingType, qualifierHierarchy)) { |
| return null; |
| } |
| return new KeyForValue(this, annotations, underlyingType); |
| } |
| } |