package org.checkerframework.dataflow.cfg.block;

import java.util.Map;
import java.util.Set;

import javax.lang.model.type.TypeMirror;

import org.checkerframework.dataflow.cfg.node.Node;

/**
 * Represents a basic block that contains exactly one {@link Node} which can
 * throw an exception. This block has exactly one non-exceptional successor, and
 * one or more exceptional successors.
 *
 * <p>
 *
 * The following invariant holds.
 *
 * <pre>
 * getNode().getBlock() == this
 * </pre>
 *
 * @author Stefan Heule
 *
 */
public interface ExceptionBlock extends SingleSuccessorBlock {

    /**
     * @return The node of this block.
     */
    Node getNode();

    /**
     * @return The list of exceptional successor blocks as an unmodifiable map.
     */
    Map<TypeMirror, Set<Block>> getExceptionalSuccessors();

}
