
org.checkerframework.dataflow.analysis.TransferFunction Maven / Gradle / Ivy
package org.checkerframework.dataflow.analysis;
/*>>>
import org.checkerframework.checker.nullness.qual.Nullable;
*/
import java.util.List;
import org.checkerframework.dataflow.cfg.UnderlyingAST;
import org.checkerframework.dataflow.cfg.node.LocalVariableNode;
import org.checkerframework.dataflow.cfg.node.Node;
import org.checkerframework.dataflow.cfg.node.NodeVisitor;
/**
* Interface of a transfer function for the abstract interpretation used for the flow analysis.
*
* A transfer function consists of the following components:
*
*
* - A method {@code initialStore} that determines which initial store should be used in the
* org.checkerframework.dataflow analysis.
*
- A function for every {@link Node} type that determines the behavior of the
* org.checkerframework.dataflow analysis in that case. This method takes a {@link Node} and
* an incoming store, and produces a {@link RegularTransferResult}.
*
*
* Important: The individual transfer functions ( {@code visit*}) are allowed to use
* (and modify) the stores contained in the argument passed; the ownership is transfered from the
* caller to that function.
*
* @author Stefan Heule
* @param the {@link Store} used to keep track of intermediate results
*/
public interface TransferFunction, S extends Store>
extends NodeVisitor, TransferInput> {
/**
* @return the initial store to be used by the org.checkerframework.dataflow analysis. {@code
* parameters} is only set if the underlying AST is a method.
*/
S initialStore(UnderlyingAST underlyingAST, /*@Nullable*/ List parameters);
}