| package org.checkerframework.dataflow.cfg.block; |
| |
| /*>>> |
| import org.checkerframework.checker.nullness.qual.Nullable; |
| */ |
| |
| import org.checkerframework.dataflow.analysis.Store; |
| |
| /** |
| * Implementation of a non-special basic block. |
| * |
| * @author Stefan Heule |
| */ |
| public abstract class SingleSuccessorBlockImpl extends BlockImpl implements SingleSuccessorBlock { |
| |
| /** Internal representation of the successor. */ |
| protected /*@Nullable*/ BlockImpl successor; |
| |
| /** |
| * The rule below say that EACH store at the end of a single successor block flow to the |
| * corresponding store of the successor. |
| */ |
| protected Store.FlowRule flowRule = Store.FlowRule.EACH_TO_EACH; |
| |
| @Override |
| public /*@Nullable*/ Block getSuccessor() { |
| return successor; |
| } |
| |
| /** Set a basic block as the successor of this block. */ |
| public void setSuccessor(BlockImpl successor) { |
| this.successor = successor; |
| successor.addPredecessor(this); |
| } |
| |
| @Override |
| public Store.FlowRule getFlowRule() { |
| return flowRule; |
| } |
| |
| @Override |
| public void setFlowRule(Store.FlowRule rule) { |
| flowRule = rule; |
| } |
| } |