| 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; |
| |
| /** |
| * The analysis class for the non-null type system (serves as factory for the transfer function, |
| * stores and abstract values. |
| */ |
| public class NullnessAnalysis |
| extends CFAbstractAnalysis<NullnessValue, NullnessStore, NullnessTransfer> { |
| |
| public NullnessAnalysis( |
| BaseTypeChecker checker, |
| NullnessAnnotatedTypeFactory factory, |
| List<Pair<VariableElement, NullnessValue>> fieldValues) { |
| super(checker, factory, fieldValues); |
| } |
| |
| @Override |
| public NullnessStore createEmptyStore(boolean sequentialSemantics) { |
| return new NullnessStore(this, sequentialSemantics); |
| } |
| |
| @Override |
| public NullnessStore createCopiedStore(NullnessStore s) { |
| return new NullnessStore(s); |
| } |
| |
| @Override |
| public NullnessValue createAbstractValue( |
| Set<AnnotationMirror> annotations, TypeMirror underlyingType) { |
| if (!CFAbstractValue.validateSet(annotations, underlyingType, qualifierHierarchy)) { |
| return null; |
| } |
| return new NullnessValue(this, annotations, underlyingType); |
| } |
| } |