public abstract class AbstractCFG<I,T extends IBasicBlock<I>> extends java.lang.Object implements ControlFlowGraph<I,T>, MinimalCFG<T>, com.ibm.wala.shrikeBT.Constants
ControlFlowGraph implementations.ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VOLATILE, CONSTANT_Class, CONSTANT_Double, CONSTANT_FieldRef, CONSTANT_Float, CONSTANT_Integer, CONSTANT_InterfaceMethodRef, CONSTANT_InvokeDynamic, CONSTANT_Long, CONSTANT_MethodHandle, CONSTANT_MethodRef, CONSTANT_MethodType, CONSTANT_NameAndType, CONSTANT_String, CONSTANT_Utf8, indexedTypes, indexedTypes_T, MAYBE, NO, OP_aaload, OP_aastore, OP_aconst_null, OP_aload, OP_aload_0, OP_aload_1, OP_aload_2, OP_aload_3, OP_anewarray, OP_areturn, OP_arraylength, OP_astore, OP_astore_0, OP_astore_1, OP_astore_2, OP_astore_3, OP_athrow, OP_baload, OP_bastore, OP_bipush, OP_caload, OP_castore, OP_checkcast, OP_d2f, OP_d2i, OP_d2l, OP_dadd, OP_daload, OP_dastore, OP_dcmpg, OP_dcmpl, OP_dconst_0, OP_dconst_1, OP_ddiv, OP_dload, OP_dload_0, OP_dload_1, OP_dload_2, OP_dload_3, OP_dmul, OP_dneg, OP_drem, OP_dreturn, OP_dstore, OP_dstore_0, OP_dstore_1, OP_dstore_2, OP_dstore_3, OP_dsub, OP_dup, OP_dup_x1, OP_dup_x2, OP_dup2, OP_dup2_x1, OP_dup2_x2, OP_f2d, OP_f2i, OP_f2l, OP_fadd, OP_faload, OP_fastore, OP_fcmpg, OP_fcmpl, OP_fconst_0, OP_fconst_1, OP_fconst_2, OP_fdiv, OP_fload, OP_fload_0, OP_fload_1, OP_fload_2, OP_fload_3, OP_fmul, OP_fneg, OP_frem, OP_freturn, OP_fstore, OP_fstore_0, OP_fstore_1, OP_fstore_2, OP_fstore_3, OP_fsub, OP_getfield, OP_getstatic, OP_goto, OP_goto_w, OP_i2b, OP_i2c, OP_i2d, OP_i2f, OP_i2l, OP_i2s, OP_iadd, OP_iaload, OP_iand, OP_iastore, OP_iconst_0, OP_iconst_1, OP_iconst_2, OP_iconst_3, OP_iconst_4, OP_iconst_5, OP_iconst_m1, OP_idiv, OP_if_acmpeq, OP_if_acmpne, OP_if_icmpeq, OP_if_icmpge, OP_if_icmpgt, OP_if_icmple, OP_if_icmplt, OP_if_icmpne, OP_ifeq, OP_ifge, OP_ifgt, OP_ifle, OP_iflt, OP_ifne, OP_ifnonnull, OP_ifnull, OP_iinc, OP_iload, OP_iload_0, OP_iload_1, OP_iload_2, OP_iload_3, OP_imul, OP_ineg, OP_instanceof, OP_invokedynamic, OP_invokeinterface, OP_invokespecial, OP_invokestatic, OP_invokevirtual, OP_ior, OP_irem, OP_ireturn, OP_ishl, OP_ishr, OP_istore, OP_istore_0, OP_istore_1, OP_istore_2, OP_istore_3, OP_isub, OP_iushr, OP_ixor, OP_jsr, OP_jsr_w, OP_l2d, OP_l2f, OP_l2i, OP_ladd, OP_laload, OP_land, OP_lastore, OP_lcmp, OP_lconst_0, OP_lconst_1, OP_ldc, OP_ldc_w, OP_ldc2_w, OP_ldiv, OP_lload, OP_lload_0, OP_lload_1, OP_lload_2, OP_lload_3, OP_lmul, OP_lneg, OP_lookupswitch, OP_lor, OP_lrem, OP_lreturn, OP_lshl, OP_lshr, OP_lstore, OP_lstore_0, OP_lstore_1, OP_lstore_2, OP_lstore_3, OP_lsub, OP_lushr, OP_lxor, OP_monitorenter, OP_monitorexit, OP_multianewarray, OP_new, OP_newarray, OP_nop, OP_pop, OP_pop2, OP_putfield, OP_putstatic, OP_ret, OP_return, OP_saload, OP_sastore, OP_sipush, OP_swap, OP_tableswitch, OP_wide, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TYPE_boolean, TYPE_boolean_index, TYPE_byte, TYPE_byte_index, TYPE_char, TYPE_char_index, TYPE_Class, TYPE_double, TYPE_double_index, TYPE_Error, TYPE_Exception, TYPE_float, TYPE_float_index, TYPE_int, TYPE_int_index, TYPE_long, TYPE_long_index, TYPE_MethodHandle, TYPE_MethodType, TYPE_null, TYPE_Object, TYPE_Object_index, TYPE_RuntimeException, TYPE_short, TYPE_short_index, TYPE_String, TYPE_Throwable, TYPE_unknown, TYPE_void, YES| Modifier | Constructor and Description |
|---|---|
protected |
AbstractCFG(IMethod method) |
| Modifier and Type | Method and Description |
|---|---|
void |
addEdge(T src,
T dst) |
void |
addExceptionalEdge(T src,
T dst) |
void |
addNode(T n) |
void |
addNormalEdge(T src,
T dst) |
boolean |
containsNode(T N) |
T |
entry()
Return the entry basic block for the CFG.
|
abstract boolean |
equals(java.lang.Object o) |
T |
exit()
Return the exit basic block for the CFG.
|
com.ibm.wala.util.intset.BitVector |
getCatchBlocks()
Returns the catchBlocks.
|
java.util.Collection<T> |
getExceptionalPredecessors(T b)
The order of blocks returned should be arbitrary but deterministic.
|
java.util.List<T> |
getExceptionalSuccessors(T b)
The order of blocks returned must indicate the exception-handling scope.
|
com.ibm.wala.util.intset.FixedSizeBitVector |
getExceptionalToExit() |
int |
getMaxNumber() |
IMethod |
getMethod() |
T |
getNode(int number) |
java.util.Collection<T> |
getNormalPredecessors(T b)
The order of blocks returned should be arbitrary but deterministic.
|
java.util.Collection<T> |
getNormalSuccessors(T b)
The order of blocks returned should be arbitrary but deterministic.
|
com.ibm.wala.util.intset.FixedSizeBitVector |
getNormalToExit() |
int |
getNumber(T N) |
int |
getNumberOfExceptionalIn(T N) |
int |
getNumberOfExceptionalOut(int number) |
int |
getNumberOfExceptionalOut(T N) |
int |
getNumberOfNodes() |
int |
getNumberOfNormalIn(T N) |
int |
getNumberOfNormalOut(T N) |
int |
getPredNodeCount(T N) |
com.ibm.wala.util.intset.IntSet |
getPredNodeNumbers(T node) |
java.util.Iterator<T> |
getPredNodes(T N) |
int |
getSuccNodeCount(T N) |
com.ibm.wala.util.intset.IntSet |
getSuccNodeNumbers(T node) |
java.util.Iterator<T> |
getSuccNodes(T N) |
boolean |
hasEdge(T src,
T dst) |
boolean |
hasExceptionalEdge(T src,
T dst) |
abstract int |
hashCode() |
boolean |
hasNormalEdge(T src,
T dst) |
protected void |
init()
subclasses must call this before calling addEdge, but after creating the nodes
|
boolean |
isCatchBlock(int i) |
java.util.Iterator<T> |
iterateNodes(com.ibm.wala.util.intset.IntSet s) |
java.util.Iterator<T> |
iterator() |
void |
removeAllIncidentEdges(T node) |
void |
removeEdge(T src,
T dst) |
void |
removeIncomingEdges(T node) |
void |
removeNode(T n) |
void |
removeNodeAndEdges(T N) |
void |
removeOutgoingEdges(T node) |
protected void |
setCatchBlock(int i)
record that basic block i is a catch block
|
java.util.stream.Stream<T> |
stream() |
java.lang.String |
toString() |
clone, finalize, getClass, notify, notifyAll, wait, wait, waitgetBlockForInstruction, getInstructions, getProgramCounterprotected AbstractCFG(IMethod method)
protected void init()
public abstract boolean equals(java.lang.Object o)
equals in class java.lang.Objectpublic abstract int hashCode()
hashCode in class java.lang.Objectpublic T entry()
entry in interface MinimalCFG<T extends IBasicBlock<I>>public T exit()
exit in interface MinimalCFG<T extends IBasicBlock<I>>public int getPredNodeCount(T N)
getPredNodeCount in interface com.ibm.wala.util.graph.EdgeManager<T extends IBasicBlock<I>>public int getNumberOfNormalIn(T N)
public int getNumberOfExceptionalIn(T N)
public int getNumberOfExceptionalOut(int number)
number - number of a basic block in this cfgpublic int getNumberOfNormalOut(T N)
public int getNumberOfExceptionalOut(T N)
public java.util.Iterator<T> getPredNodes(T N)
getPredNodes in interface com.ibm.wala.util.graph.EdgeManager<T extends IBasicBlock<I>>public int getSuccNodeCount(T N)
getSuccNodeCount in interface com.ibm.wala.util.graph.EdgeManager<T extends IBasicBlock<I>>public java.util.Iterator<T> getSuccNodes(T N)
getSuccNodes in interface com.ibm.wala.util.graph.EdgeManager<T extends IBasicBlock<I>>public void addNode(T n)
addNode in interface com.ibm.wala.util.graph.NodeManager<T extends IBasicBlock<I>>public int getMaxNumber()
getMaxNumber in interface com.ibm.wala.util.graph.NumberedNodeManager<T extends IBasicBlock<I>>public T getNode(int number)
getNode in interface com.ibm.wala.util.graph.NumberedNodeManager<T extends IBasicBlock<I>>public int getNumber(T N)
getNumber in interface com.ibm.wala.util.graph.NumberedNodeManager<T extends IBasicBlock<I>>public int getNumberOfNodes()
getNumberOfNodes in interface com.ibm.wala.util.graph.NodeManager<T extends IBasicBlock<I>>public java.util.Iterator<T> iterator()
iterator in interface com.ibm.wala.util.graph.NodeManager<T extends IBasicBlock<I>>iterator in interface java.lang.Iterable<T extends IBasicBlock<I>>public java.util.stream.Stream<T> stream()
stream in interface com.ibm.wala.util.graph.NodeManager<T extends IBasicBlock<I>>public void addEdge(T src, T dst) throws com.ibm.wala.util.debug.UnimplementedError
addEdge in interface com.ibm.wala.util.graph.EdgeManager<T extends IBasicBlock<I>>com.ibm.wala.util.debug.UnimplementedErrorpublic void removeEdge(T src, T dst) throws java.lang.UnsupportedOperationException
removeEdge in interface com.ibm.wala.util.graph.EdgeManager<T extends IBasicBlock<I>>java.lang.UnsupportedOperationExceptionpublic boolean hasEdge(T src, T dst)
hasEdge in interface com.ibm.wala.util.graph.EdgeManager<T extends IBasicBlock<I>>public void addNormalEdge(T src, T dst)
java.lang.IllegalArgumentException - if src or dst is nullpublic void addExceptionalEdge(T src, T dst)
java.lang.IllegalArgumentException - if dst is nullpublic void removeNodeAndEdges(T N) throws com.ibm.wala.util.debug.UnimplementedError
removeNodeAndEdges in interface com.ibm.wala.util.graph.Graph<T extends IBasicBlock<I>>com.ibm.wala.util.debug.UnimplementedErrorpublic void removeNode(T n) throws com.ibm.wala.util.debug.UnimplementedError
removeNode in interface com.ibm.wala.util.graph.NodeManager<T extends IBasicBlock<I>>com.ibm.wala.util.debug.UnimplementedErrorpublic boolean containsNode(T N)
containsNode in interface com.ibm.wala.util.graph.NodeManager<T extends IBasicBlock<I>>public java.lang.String toString()
toString in class java.lang.Objectprotected void setCatchBlock(int i)
public boolean isCatchBlock(int i)
public com.ibm.wala.util.intset.BitVector getCatchBlocks()
getCatchBlocks in interface ControlFlowGraph<I,T extends IBasicBlock<I>>public IMethod getMethod()
getMethod in interface ControlFlowGraph<I,T extends IBasicBlock<I>>public void removeAllIncidentEdges(T node) throws com.ibm.wala.util.debug.UnimplementedError
removeAllIncidentEdges in interface com.ibm.wala.util.graph.EdgeManager<T extends IBasicBlock<I>>com.ibm.wala.util.debug.UnimplementedErrorpublic java.util.List<T> getExceptionalSuccessors(T b)
MinimalCFGgetExceptionalSuccessors in interface MinimalCFG<T extends IBasicBlock<I>>public java.util.Collection<T> getNormalSuccessors(T b)
MinimalCFGgetNormalSuccessors in interface MinimalCFG<T extends IBasicBlock<I>>public java.util.Iterator<T> iterateNodes(com.ibm.wala.util.intset.IntSet s)
iterateNodes in interface com.ibm.wala.util.graph.NumberedNodeManager<T extends IBasicBlock<I>>public void removeIncomingEdges(T node) throws com.ibm.wala.util.debug.UnimplementedError
removeIncomingEdges in interface com.ibm.wala.util.graph.EdgeManager<T extends IBasicBlock<I>>com.ibm.wala.util.debug.UnimplementedErrorpublic void removeOutgoingEdges(T node) throws com.ibm.wala.util.debug.UnimplementedError
removeOutgoingEdges in interface com.ibm.wala.util.graph.EdgeManager<T extends IBasicBlock<I>>com.ibm.wala.util.debug.UnimplementedErrorpublic com.ibm.wala.util.intset.FixedSizeBitVector getExceptionalToExit()
public com.ibm.wala.util.intset.FixedSizeBitVector getNormalToExit()
public java.util.Collection<T> getExceptionalPredecessors(T b)
MinimalCFGgetExceptionalPredecessors in interface MinimalCFG<T extends IBasicBlock<I>>public java.util.Collection<T> getNormalPredecessors(T b)
MinimalCFGgetNormalPredecessors in interface MinimalCFG<T extends IBasicBlock<I>>public com.ibm.wala.util.intset.IntSet getPredNodeNumbers(T node) throws com.ibm.wala.util.debug.UnimplementedError
getPredNodeNumbers in interface com.ibm.wala.util.graph.NumberedEdgeManager<T extends IBasicBlock<I>>com.ibm.wala.util.debug.UnimplementedErrorpublic com.ibm.wala.util.intset.IntSet getSuccNodeNumbers(T node)
getSuccNodeNumbers in interface com.ibm.wala.util.graph.NumberedEdgeManager<T extends IBasicBlock<I>>