blob: 91d9faa44f6905227a89be59828fde2c3d38b699 [file] [log] [blame]
package org.checkerframework.dataflow.cfg.builder;
import javax.lang.model.type.TypeMirror;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.checkerframework.dataflow.analysis.Store.FlowRule;
import org.checkerframework.dataflow.cfg.block.SingleSuccessorBlockImpl;
/* --------------------------------------------------------- */
/* Phase Two */
/* --------------------------------------------------------- */
/** Represents a missing edge that will be added later. */
class MissingEdge {
/** The source of the edge. */
final SingleSuccessorBlockImpl source;
/** The index (target?) of the edge. Null means go to exceptional exit. */
final @Nullable Integer index;
/** The cause exception type, for an exceptional edge; otherwise null. */
final @Nullable TypeMirror cause;
/** The flow rule for this edge. */
final @Nullable FlowRule flowRule;
/**
* Create a new MissingEdge.
*
* @param source the source of the edge
* @param index the index (target?) of the edge
*/
public MissingEdge(SingleSuccessorBlockImpl source, int index) {
this(source, index, null, FlowRule.EACH_TO_EACH);
}
/**
* Create a new MissingEdge.
*
* @param source the source of the edge
* @param index the index (target?) of the edge
* @param flowRule the flow rule for this edge
*/
public MissingEdge(SingleSuccessorBlockImpl source, int index, FlowRule flowRule) {
this(source, index, null, flowRule);
}
/**
* Create a new MissingEdge.
*
* @param source the source of the edge
* @param index the index (target?) of the edge; null means go to exceptional exit
* @param cause the cause exception type, for an exceptional edge; otherwise null
*/
public MissingEdge(
SingleSuccessorBlockImpl source, @Nullable Integer index, @Nullable TypeMirror cause) {
this(source, index, cause, FlowRule.EACH_TO_EACH);
}
/**
* Create a new MissingEdge.
*
* @param source the source of the edge
* @param index the index (target?) of the edge; null means go to exceptional exit
* @param cause the cause exception type, for an exceptional edge; otherwise null
* @param flowRule the flow rule for this edge
*/
public MissingEdge(
SingleSuccessorBlockImpl source,
@Nullable Integer index,
@Nullable TypeMirror cause,
FlowRule flowRule) {
assert (index != null) || (cause != null);
this.source = source;
this.index = index;
this.cause = cause;
this.flowRule = flowRule;
}
@Override
public String toString() {
return "MissingEdge(" + source + ", " + index + ", " + cause + ")";
}
}