blob: 5f19bc439c67746961305fbf0378a07512297f9e [file] [log] [blame]
package org.checkerframework.dataflow.analysis;
import java.util.List;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.checkerframework.dataflow.cfg.UnderlyingAST;
import org.checkerframework.dataflow.cfg.node.ReturnNode;
/**
* Interface of a backward transfer function for the abstract interpretation used for the backward
* flow analysis.
*
* <p><em>Important</em>: The individual transfer functions ( {@code visit*}) are allowed to use
* (and modify) the stores contained in the argument passed; the ownership is transferred from the
* caller to that function.
*
* @param <V> the abstract value type to be tracked by the analysis
* @param <S> the store type used in the analysis
*/
public interface BackwardTransferFunction<V extends AbstractValue<V>, S extends Store<S>>
extends TransferFunction<V, S> {
/**
* Returns the initial store that should be used at the normal exit block.
*
* @param underlyingAST the underlying AST of the given control flow graph
* @param returnNodes the return nodes of the given control flow graph if the underlying AST of
* this graph is a method. Otherwise will be set to {@code null}
* @return the initial store that should be used at the normal exit block
*/
S initialNormalExitStore(UnderlyingAST underlyingAST, @Nullable List<ReturnNode> returnNodes);
/**
* Returns the initial store that should be used at the exceptional exit block or given the
* underlying AST of a control flow graph.
*
* @param underlyingAST the underlying AST of the given control flow graph
* @return the initial store that should be used at the exceptional exit block
*/
S initialExceptionalExitStore(UnderlyingAST underlyingAST);
}