Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

jreversepro.revengine
Class JBranchTable  view JBranchTable download JBranchTable.java

java.lang.Object
  extended byjreversepro.revengine.JBranchTable
All Implemented Interfaces:
BranchConstants, jreversepro.common.JJvmOpcodes

public class JBranchTable
extends java.lang.Object
implements BranchConstants, jreversepro.common.JJvmOpcodes

JBranchTable manages the objects of JGotoEntry and JBranchEntry.


Field Summary
(package private)  java.util.List branches
          Branches is a list, with the individual elemens containing 'JBranchEntry'.
(package private)  java.util.Map gotos
          gotos Key - StartPc ( java.lang.Integer ) Value - TargetPc ( Absolute target -java.lang.Integer).
(package private)  jreversepro.reflect.JMethod method
          Method reference
(package private)  java.util.Vector mJSRTarget
          It is a Vector of 'Integer's.
(package private)  java.util.Map mMonitor
          Map of monitor instructions.
(package private)  java.util.List switches
          List of switch instructions.
 
Fields inherited from interface jreversepro.revengine.BranchConstants
TYPE_BRANCH, TYPE_CASE, TYPE_CATCH, TYPE_CATCH_ANY, TYPE_DO_WHILE, TYPE_ELSE, TYPE_ELSE_IF, TYPE_GOTO, TYPE_IF, TYPE_INVALID, TYPE_JSR, TYPE_RET, TYPE_SWITCH, TYPE_SYNC, TYPE_TRY, TYPE_TRY_ANY, TYPE_WHILE
 
Fields inherited from interface jreversepro.common.JJvmOpcodes
OPCODE_AALOAD, OPCODE_AASTORE, OPCODE_ACONST_NULL, OPCODE_ALOAD, OPCODE_ALOAD_0, OPCODE_ALOAD_1, OPCODE_ALOAD_2, OPCODE_ALOAD_3, OPCODE_ANEWARRAY, OPCODE_ARETURN, OPCODE_ARRAYLENGTH, OPCODE_ASTORE, OPCODE_ASTORE_0, OPCODE_ASTORE_1, OPCODE_ASTORE_2, OPCODE_ASTORE_3, OPCODE_ATHROW, OPCODE_BALOAD, OPCODE_BASTORE, OPCODE_BIPUSH, OPCODE_CALOAD, OPCODE_CASTORE, OPCODE_CHECKCAST, OPCODE_D2F, OPCODE_D2I, OPCODE_D2L, OPCODE_DADD, OPCODE_DALOAD, OPCODE_DASTORE, OPCODE_DCMPG, OPCODE_DCMPL, OPCODE_DCONST_0, OPCODE_DCONST_1, OPCODE_DDIV, OPCODE_DLOAD, OPCODE_DLOAD_0, OPCODE_DLOAD_1, OPCODE_DLOAD_2, OPCODE_DLOAD_3, OPCODE_DMUL, OPCODE_DNEG, OPCODE_DREM, OPCODE_DRETURN, OPCODE_DSTORE, OPCODE_DSTORE_0, OPCODE_DSTORE_1, OPCODE_DSTORE_2, OPCODE_DSTORE_3, OPCODE_DSUB, OPCODE_DUP, OPCODE_DUP_X1, OPCODE_DUP_X2, OPCODE_DUP2, OPCODE_DUP2_X1, OPCODE_DUP2_X2, OPCODE_F2D, OPCODE_F2I, OPCODE_F2L, OPCODE_FADD, OPCODE_FALOAD, OPCODE_FASTORE, OPCODE_FCMPG, OPCODE_FCMPL, OPCODE_FCONST_0, OPCODE_FCONST_1, OPCODE_FCONST_2, OPCODE_FDIV, OPCODE_FLOAD, OPCODE_FLOAD_0, OPCODE_FLOAD_1, OPCODE_FLOAD_2, OPCODE_FLOAD_3, OPCODE_FMUL, OPCODE_FNEG, OPCODE_FREM, OPCODE_FRETURN, OPCODE_FSTORE, OPCODE_FSTORE_0, OPCODE_FSTORE_1, OPCODE_FSTORE_2, OPCODE_FSTORE_3, OPCODE_FSUB, OPCODE_GETFIELD, OPCODE_GETSTATIC, OPCODE_GOTO, OPCODE_GOTOW, OPCODE_I2B, OPCODE_I2C, OPCODE_I2D, OPCODE_I2F, OPCODE_I2L, OPCODE_I2S, OPCODE_IADD, OPCODE_IALOAD, OPCODE_IAND, OPCODE_IASTORE, OPCODE_ICONST_0, OPCODE_ICONST_1, OPCODE_ICONST_2, OPCODE_ICONST_3, OPCODE_ICONST_4, OPCODE_ICONST_5, OPCODE_ICONST_M1, OPCODE_IDIV, OPCODE_IF_ACMPEQ, OPCODE_IF_ACMPNE, OPCODE_IF_ICMPEQ, OPCODE_IF_ICMPGE, OPCODE_IF_ICMPGT, OPCODE_IF_ICMPLE, OPCODE_IF_ICMPLT, OPCODE_IF_ICMPNE, OPCODE_IFEQ, OPCODE_IFGE, OPCODE_IFGT, OPCODE_IFLE, OPCODE_IFLT, OPCODE_IFNE, OPCODE_IFNONNULL, OPCODE_IFNULL, OPCODE_IINC, OPCODE_ILOAD, OPCODE_ILOAD_0, OPCODE_ILOAD_1, OPCODE_ILOAD_2, OPCODE_ILOAD_3, OPCODE_IMUL, OPCODE_INEG, OPCODE_INSTANCEOF, OPCODE_INVOKEINTERFACE, OPCODE_INVOKESPECIAL, OPCODE_INVOKESTATIC, OPCODE_INVOKEVIRTUAL, OPCODE_IOR, OPCODE_IREM, OPCODE_IRETURN, OPCODE_ISHL, OPCODE_ISHR, OPCODE_ISTORE, OPCODE_ISTORE_0, OPCODE_ISTORE_1, OPCODE_ISTORE_2, OPCODE_ISTORE_3, OPCODE_ISUB, OPCODE_IUSHR, OPCODE_IXOR, OPCODE_JSR, OPCODE_JSRW, OPCODE_L2D, OPCODE_L2F, OPCODE_L2I, OPCODE_LADD, OPCODE_LALOAD, OPCODE_LAND, OPCODE_LASTORE, OPCODE_LCMP, OPCODE_LCONST_0, OPCODE_LCONST_1, OPCODE_LDC, OPCODE_LDC_W, OPCODE_LDC2_W, OPCODE_LDIV, OPCODE_LLOAD, OPCODE_LLOAD_0, OPCODE_LLOAD_1, OPCODE_LLOAD_2, OPCODE_LLOAD_3, OPCODE_LMUL, OPCODE_LNEG, OPCODE_LOOKUPSWITCH, OPCODE_LOR, OPCODE_LREM, OPCODE_LRETURN, OPCODE_LSHL, OPCODE_LSHR, OPCODE_LSTORE, OPCODE_LSTORE_0, OPCODE_LSTORE_1, OPCODE_LSTORE_2, OPCODE_LSTORE_3, OPCODE_LSUB, OPCODE_LUSHR, OPCODE_LXOR, OPCODE_MONITORENTER, OPCODE_MONITOREXIT, OPCODE_MULTIANEWARRAY, OPCODE_NEW, OPCODE_NEWARRAY, OPCODE_NOP, OPCODE_POP, OPCODE_POP2, OPCODE_PUTFIELD, OPCODE_PUTSTATIC, OPCODE_RET, OPCODE_RETURN, OPCODE_SALOAD, OPCODE_SASTORE, OPCODE_SIPUSH, OPCODE_SWAP, OPCODE_TABLESWITCH, OPCODE_WIDE, OPCODE_XXXUNUSEDXXX
 
Constructor Summary
JBranchTable(jreversepro.reflect.JMethod method)
           
 
Method Summary
 void add(JBranchEntry ent)
          Adds a new branch entry to the list of branches.
 void addGotoEntry(int startPc, int targetPc)
          Adds a Goto entry to the internal data structure.
 void addJSRPc(int targetPc)
          This adds the pc given as input as a JSR target.
 void addMonitorPc(int aMonitorPc, java.lang.String aMonObject)
          Adds a monitor Pc.
 void addRetPc(int retPc)
          When a RET instruction is encountered we add a branch with the last element of the JSR target lists.
 void addSwitch(JSwitchTable switchEntry)
          Adds the switch entries and the case entries under the same to the branch table.
 void addTryBlocks(java.util.List excTryTable)
          List of JException entries.
 java.lang.String branchesToString()
          Stringifies the braches alone.
static JBranchEntry contains(java.util.List listBranchEntries, int type)
          Returns the first branch in the mentioned branchlist that matches the particular type.
 void deleteElse(int startElse)
          Delete the branch that corresponds to a else ..
 java.lang.String doesMonitorBegin(int monitorBeginPc)
          Returns the monitor type for the monitor that begins with Pc.
protected  void finalize()
          Finalizer method.
 jreversepro.reflect.JInstruction findGotoIns(java.util.List byteIns, int start, int end)
           
 int findGotoTarget(int startPc)
          For the given pc return the target of the instruction.
 java.util.Map getGotoTable()
          Getter method for goto tables.
 void identifyMoreBranches()
          Identifies the else..if and else branches.
 boolean isJSRTarget(int currPc)
          Checks if the Pc passed as argument is the target for any JSR instructions.
 void setTables(java.util.List aBranches)
          Setter method for the branch tables.
 void sort()
          This sorts the list containing branches such that no branch overlaps with the one previously existing.
 java.util.List startsWith(int aInsIndex)
          Returns the list of branches that starts with the mentioned aInsIndex.
 java.lang.String toString()
          Convert this Object to a human-readable String.
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

branches

java.util.List branches
Branches is a list, with the individual elemens containing 'JBranchEntry'.


gotos

java.util.Map gotos
gotos Key - StartPc ( java.lang.Integer ) Value - TargetPc ( Absolute target -java.lang.Integer).


switches

java.util.List switches
List of switch instructions. Individual members are JInstruction.


mJSRTarget

java.util.Vector mJSRTarget
It is a Vector of 'Integer's. The integers are the target of the jump sub routine instruction.


mMonitor

java.util.Map mMonitor
Map of monitor instructions.


method

jreversepro.reflect.JMethod method
Method reference

Constructor Detail

JBranchTable

public JBranchTable(jreversepro.reflect.JMethod method)
Method Detail

setTables

public void setTables(java.util.List aBranches)
Setter method for the branch tables.


getGotoTable

public java.util.Map getGotoTable()
Getter method for goto tables.


addGotoEntry

public void addGotoEntry(int startPc,
                         int targetPc)
Adds a Goto entry to the internal data structure.


finalize

protected void finalize()
Finalizer method.


add

public void add(JBranchEntry ent)
Adds a new branch entry to the list of branches.


isJSRTarget

public boolean isJSRTarget(int currPc)
Checks if the Pc passed as argument is the target for any JSR instructions.


addJSRPc

public void addJSRPc(int targetPc)
This adds the pc given as input as a JSR target.


addRetPc

public void addRetPc(int retPc)
When a RET instruction is encountered we add a branch with the last element of the JSR target lists. JSR instructions signify 'synchronized' and catch..all blocks.


sort

public void sort()
This sorts the list containing branches such that no branch overlaps with the one previously existing. See JBranchComparator for more details.


addMonitorPc

public void addMonitorPc(int aMonitorPc,
                         java.lang.String aMonObject)
Adds a monitor Pc.


doesMonitorBegin

public java.lang.String doesMonitorBegin(int monitorBeginPc)
Returns the monitor type for the monitor that begins with Pc.


identifyMoreBranches

public void identifyMoreBranches()
                          throws RevEngineException
Identifies the else..if and else branches. Identifies catch.. branches.


addSwitch

public void addSwitch(JSwitchTable switchEntry)
Adds the switch entries and the case entries under the same to the branch table.


addTryBlocks

public void addTryBlocks(java.util.List excTryTable)
List of JException entries.


findGotoTarget

public int findGotoTarget(int startPc)
For the given pc return the target of the instruction. The instruction is a goto statement.


startsWith

public java.util.List startsWith(int aInsIndex)
                          throws RevEngineException
Returns the list of branches that starts with the mentioned aInsIndex.


deleteElse

public void deleteElse(int startElse)
Delete the branch that corresponds to a else .. branch starting with the given Pc


contains

public static JBranchEntry contains(java.util.List listBranchEntries,
                                    int type)
Returns the first branch in the mentioned branchlist that matches the particular type.


findGotoIns

public jreversepro.reflect.JInstruction findGotoIns(java.util.List byteIns,
                                                    int start,
                                                    int end)

branchesToString

public java.lang.String branchesToString()
Stringifies the braches alone.


toString

public java.lang.String toString()
Description copied from class: java.lang.Object
Convert this Object to a human-readable String. There are no limits placed on how long this String should be or what it should contain. We suggest you make it as intuitive as possible to be able to place it into System.out.println() 55 and such.

It is typical, but not required, to ensure that this method never completes abruptly with a java.lang.RuntimeException.

This method will be called when performing string concatenation with this object. If the result is null, string concatenation will instead use "null".

The default implementation returns getClass().getName() + "@" + Integer.toHexString(hashCode()).