jcaas.util
Class ControlGraph

java.lang.Object
  extended by jcaas.util.ControlGraph
All Implemented Interfaces:
org.apache.bcel.Constants

public class ControlGraph
extends java.lang.Object
implements org.apache.bcel.Constants


Field Summary
 
Fields inherited from interface org.apache.bcel.Constants
AALOAD, AASTORE, ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, ACCESS_NAMES, ACONST_NULL, ALOAD, ALOAD_0, ALOAD_1, ALOAD_2, ALOAD_3, ANEWARRAY, ANEWARRAY_QUICK, ARETURN, ARRAYLENGTH, ASTORE, ASTORE_0, ASTORE_1, ASTORE_2, ASTORE_3, ATHROW, ATTR_CODE, ATTR_CONSTANT_VALUE, ATTR_DEPRECATED, ATTR_EXCEPTIONS, ATTR_INNER_CLASSES, ATTR_LINE_NUMBER_TABLE, ATTR_LOCAL_VARIABLE_TABLE, ATTR_PMG, ATTR_SIGNATURE, ATTR_SOURCE_FILE, ATTR_STACK_MAP, ATTR_SYNTHETIC, ATTR_UNKNOWN, ATTRIBUTE_NAMES, BALOAD, BASTORE, BIPUSH, BREAKPOINT, CALOAD, CASTORE, CHECKCAST, CHECKCAST_QUICK, CLASS_TYPE_NAMES, CONSTANT_Class, CONSTANT_Double, CONSTANT_Fieldref, CONSTANT_Float, CONSTANT_Integer, CONSTANT_InterfaceMethodref, CONSTANT_Long, CONSTANT_Methodref, CONSTANT_NameAndType, CONSTANT_NAMES, CONSTANT_String, CONSTANT_Utf8, CONSTRUCTOR_NAME, CONSUME_STACK, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DLOAD_0, DLOAD_1, DLOAD_2, DLOAD_3, DMUL, DNEG, DREM, DRETURN, DSTORE, DSTORE_0, DSTORE_1, DSTORE_2, DSTORE_3, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAD_0, FLOAD_1, FLOAD_2, FLOAD_3, FMUL, FNEG, FREM, FRETURN, FSTORE, FSTORE_0, FSTORE_1, FSTORE_2, FSTORE_3, FSUB, GETFIELD, GETFIELD_QUICK, GETFIELD_QUICK_W, GETFIELD2_QUICK, GETSTATIC, GETSTATIC_QUICK, GETSTATIC2_QUICK, GOTO, GOTO_W, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILLEGAL_OPCODE, ILLEGAL_TYPE, ILOAD, ILOAD_0, ILOAD_1, ILOAD_2, ILOAD_3, IMPDEP1, IMPDEP2, IMUL, INEG, INSTANCEOF, INSTANCEOF_QUICK, INT2BYTE, INT2CHAR, INT2SHORT, INTERFACES_IMPLEMENTED_BY_ARRAYS, INVOKEINTERFACE, INVOKEINTERFACE_QUICK, INVOKENONVIRTUAL, INVOKENONVIRTUAL_QUICK, INVOKESPECIAL, INVOKESTATIC, INVOKESTATIC_QUICK, INVOKESUPER_QUICK, INVOKEVIRTUAL, INVOKEVIRTUAL_QUICK, INVOKEVIRTUAL_QUICK_W, INVOKEVIRTUALOBJECT_QUICK, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISTORE_0, ISTORE_1, ISTORE_2, ISTORE_3, ISUB, ITEM_Bogus, ITEM_Double, ITEM_Float, ITEM_InitObject, ITEM_Integer, ITEM_Long, ITEM_NAMES, ITEM_NewObject, ITEM_Null, ITEM_Object, IUSHR, IXOR, JSR, JSR_W, KNOWN_ATTRIBUTES, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDC_QUICK, LDC_W, LDC_W_QUICK, LDC2_W, LDC2_W_QUICK, LDIV, LLOAD, LLOAD_0, LLOAD_1, LLOAD_2, LLOAD_3, LMUL, LNEG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSTORE_0, LSTORE_1, LSTORE_2, LSTORE_3, LSUB, LUSHR, LXOR, MAJOR, MAJOR_1_1, MAJOR_1_2, MAJOR_1_3, MAX_ACC_FLAG, MAX_BYTE, MAX_CODE_SIZE, MAX_CP_ENTRIES, MAX_SHORT, MINOR, MINOR_1_1, MINOR_1_2, MINOR_1_3, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, MULTIANEWARRAY_QUICK, NEW, NEW_QUICK, NEWARRAY, NO_OF_OPERANDS, NOP, OPCODE_NAMES, POP, POP2, PRODUCE_STACK, PUSH, PUTFIELD, PUTFIELD_QUICK, PUTFIELD_QUICK_W, PUTFIELD2_QUICK, PUTSTATIC, PUTSTATIC_QUICK, PUTSTATIC2_QUICK, RESERVED, RET, RETURN, SALOAD, SASTORE, SHORT_TYPE_NAMES, SIPUSH, STATIC_INITIALIZER_NAME, SWAP, SWITCH, T_ADDRESS, T_ARRAY, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_OBJECT, T_REFERENCE, T_SHORT, T_UNKNOWN, T_VOID, TABLESWITCH, TYPE_NAMES, TYPE_OF_OPERANDS, UNDEFINED, UNPREDICTABLE, WIDE
 
Constructor Summary
ControlGraph(org.apache.bcel.generic.MethodGen _method)
          Builds a ControlGraph for the given MethodGen object.
 
Method Summary
 boolean dominates(org.apache.bcel.generic.InstructionHandle dommer, org.apache.bcel.generic.InstructionHandle dommee)
          Returns true iff 'dommer' dominates 'dommee'.
 java.util.Set getPredecessors(org.apache.bcel.generic.InstructionHandle ih)
          Returns the set of InstructionHandles that could immediately preceed 'ih'.
 java.util.Set getReachable(org.apache.bcel.generic.InstructionHandle start)
          Returns the set of InstructionHandles reachable from this handle (includes start).
 java.util.Set getSuccessors(org.apache.bcel.generic.InstructionHandle ih)
          Returns the set of InstructionHandles that can possibly be executed immediately after 'ih'.
static void main(java.lang.String[] args)
           
 boolean postDominates(org.apache.bcel.generic.InstructionHandle pre, org.apache.bcel.generic.InstructionHandle post)
          Returns true iff 'post' postdominates 'pre'.
 boolean reachable(org.apache.bcel.generic.InstructionHandle from, org.apache.bcel.generic.InstructionHandle to)
          Returns true if there is a control flow path from 'from' to 'to' (inclusive).
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ControlGraph

public ControlGraph(org.apache.bcel.generic.MethodGen _method)
             throws java.lang.IllegalArgumentException
Builds a ControlGraph for the given MethodGen object. This ControlGraph represents the method behavior at the time the constructor is called. If the instruction list is changed after this object is created, this object is no longer valid.

Throws:
java.lang.IllegalArgumentException
Method Detail

getSuccessors

public java.util.Set getSuccessors(org.apache.bcel.generic.InstructionHandle ih)
Returns the set of InstructionHandles that can possibly be executed immediately after 'ih'.


getPredecessors

public java.util.Set getPredecessors(org.apache.bcel.generic.InstructionHandle ih)
Returns the set of InstructionHandles that could immediately preceed 'ih'.


reachable

public boolean reachable(org.apache.bcel.generic.InstructionHandle from,
                         org.apache.bcel.generic.InstructionHandle to)
Returns true if there is a control flow path from 'from' to 'to' (inclusive).


getReachable

public java.util.Set getReachable(org.apache.bcel.generic.InstructionHandle start)
Returns the set of InstructionHandles reachable from this handle (includes start).


dominates

public boolean dominates(org.apache.bcel.generic.InstructionHandle dommer,
                         org.apache.bcel.generic.InstructionHandle dommee)
Returns true iff 'dommer' dominates 'dommee'. (i.e. all control paths from the source to 'dommee' contain 'dommer')


postDominates

public boolean postDominates(org.apache.bcel.generic.InstructionHandle pre,
                             org.apache.bcel.generic.InstructionHandle post)
Returns true iff 'post' postdominates 'pre'. (i.e. all control paths from 'pre' to a sink must contain 'post')


main

public static void main(java.lang.String[] args)
                 throws java.lang.Throwable
Throws:
java.lang.Throwable