blob: 2148e060cd32a9448b311ac02b83910455b55755 [file] [log] [blame]
package org.checkerframework.dataflow.cfg.block;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.lang.model.type.TypeMirror;
import org.checkerframework.dataflow.cfg.node.Node;
/**
* Base class of the {@link Block} implementation hierarchy.
*
* @author Stefan Heule
*
*/
public class ExceptionBlockImpl extends SingleSuccessorBlockImpl implements
ExceptionBlock {
/** Set of exceptional successors. */
protected Map<TypeMirror, Set<Block>> exceptionalSuccessors;
public ExceptionBlockImpl() {
type = BlockType.EXCEPTION_BLOCK;
exceptionalSuccessors = new HashMap<>();
}
/** The node of this block. */
protected Node node;
/**
* Set the node.
*/
public void setNode(Node c) {
node = c;
c.setBlock(this);
}
@Override
public Node getNode() {
return node;
}
/**
* Add an exceptional successor.
*/
public void addExceptionalSuccessor(BlockImpl b,
TypeMirror cause) {
if (exceptionalSuccessors == null) {
exceptionalSuccessors = new HashMap<>();
}
Set<Block> blocks = exceptionalSuccessors.get(cause);
if (blocks == null) {
blocks = new HashSet<Block>();
exceptionalSuccessors.put(cause, blocks);
}
blocks.add(b);
b.addPredecessor(this);
}
@Override
public Map<TypeMirror, Set<Block>> getExceptionalSuccessors() {
if (exceptionalSuccessors == null) {
return Collections.emptyMap();
}
return Collections.unmodifiableMap(exceptionalSuccessors);
}
@Override
public String toString() {
return "ExceptionBlock(" + node + ")";
}
}