blob: cec047533554c0b2c72623f46a054c5a3e0b4bd0 [file] [log] [blame]
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);
}
}