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. * * @author Stefan Heule */ 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); } }