package org.checkerframework.framework.flow;

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.type.GenericAnnotatedTypeFactory;
import org.checkerframework.javacutil.Pair;

/** The default org.checkerframework.dataflow analysis used in the Checker Framework. */
public class CFAnalysis extends CFAbstractAnalysis<CFValue, CFStore, CFTransfer> {

  public CFAnalysis(
      BaseTypeChecker checker,
      GenericAnnotatedTypeFactory<CFValue, CFStore, CFTransfer, CFAnalysis> factory,
      List<Pair<VariableElement, CFValue>> fieldValues) {
    super(checker, factory, fieldValues);
  }

  @Override
  public CFStore createEmptyStore(boolean sequentialSemantics) {
    return new CFStore(this, sequentialSemantics);
  }

  @Override
  public CFStore createCopiedStore(CFStore s) {
    return new CFStore(s);
  }

  @Override
  public CFValue createAbstractValue(Set<AnnotationMirror> annotations, TypeMirror underlyingType) {
    return defaultCreateAbstractValue(this, annotations, underlyingType);
  }
}
