edu.umd.cs.findbugs.visitclass
Class DismantleBytecode

java.lang.Object
  extended by edu.umd.cs.findbugs.visitclass.BetterVisitor
      extended by edu.umd.cs.findbugs.visitclass.PreorderVisitor
          extended by edu.umd.cs.findbugs.visitclass.DismantleBytecode
All Implemented Interfaces:
Constants2, org.apache.bcel.classfile.Visitor, org.apache.bcel.Constants
Direct Known Subclasses:
BytecodeScanningDetector, CloneIdiom

public abstract class DismantleBytecode
extends PreorderVisitor
implements Constants2


Field Summary
private  int branchFallThrough
           
private  int branchOffset
           
private  int branchTarget
           
private  java.lang.String classConstantOperand
           
protected  byte[] codeBytes
           
private  org.apache.bcel.classfile.Constant constantRefOperand
           
private  int defaultSwitchOffset
           
private  java.lang.String dottedClassConstantOperand
           
private  java.lang.String dottedSigConstantOperand
           
private  double doubleConstant
           
private  float floatConstant
           
private  int intConstant
           
private static int INVALID_OFFSET
           
protected  org.apache.bcel.classfile.LineNumberTable lineNumberTable
           
private  long longConstant
           
static byte M_BR
           
static byte M_CP
           
static byte M_INT
          Meaning of bytecode operands
static byte M_PAD
           
static byte M_R
           
static byte M_UINT
           
(package private) static short[][] MEANING_OF_OPERANDS
          Meaning of bytecode operands
private  java.lang.String nameConstantOperand
           
private static java.lang.String NOT_AVAILABLE
           
private  int opcode
           
private  boolean opcodeIsWide
           
private  int PC
           
protected static int R_DOUBLE
           
protected static int R_FLOAT
           
protected static int R_INT
           
protected static int R_LONG
           
protected static int R_REF
           
private  java.lang.String refConstantOperand
           
private  boolean refFieldIsStatic
           
protected  int registerKind
           
private  int registerOperand
           
private static java.util.HashMap<java.lang.String,java.lang.String> replaceSlashesWithDotsCache
           
private  java.lang.String sigConstantOperand
           
private  java.lang.String stringConstantOperand
           
private  int[] switchLabels
           
private  int[] switchOffsets
           
 
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
DismantleBytecode()
           
 
Method Summary
 int getBranchFallThrough()
           
 int getBranchOffset()
           
 int getBranchTarget()
           
 java.lang.String getClassConstantOperand()
           
 org.apache.bcel.classfile.Constant getConstantRefOperand()
           
 int getDefaultSwitchOffset()
           
 java.lang.String getDottedClassConstantOperand()
          If the current opcode has a class operand, get the associated class constant, dot-formatted
 java.lang.String getDottedSigConstantOperand()
          If the current opcode has a reference constant operand, get its signature, dot-formatted
 int getIntConstant()
           
 java.lang.String getNameConstantOperand()
          If the current opcode has a reference constant operand, get its name
 int getPC()
           
 java.lang.String getRefConstantOperand()
          If the current opcode has a reference constant operand, get its string representation
 boolean getRefFieldIsStatic()
           
 int getRegisterOperand()
           
 java.lang.String getSigConstantOperand()
          If the current opcode has a reference constant operand, get its signature, slash-formatted
 java.lang.String getStringConstantOperand()
          If the current opcode has a string constant operand, get its name
 int[] getSwitchLabels()
           
 int[] getSwitchOffsets()
           
(package private) static java.lang.String replaceSlashesWithDots(java.lang.String c)
           
private  void resetState()
           
 void sawClass()
           
 void sawDouble(double seen)
           
 void sawField()
           
 void sawFloat(float seen)
           
 void sawIMethod()
           
 void sawInt(int seen)
           
 void sawLong(long seen)
           
 void sawMethod()
           
 void sawOffset(int seen)
           
 void sawOpcode(int seen)
           
 void sawRegister(int r)
           
 void sawString(java.lang.String seen)
           
private static void sortByOffset(int[] switchOffsets, int[] switchLabels)
           
 void visit(org.apache.bcel.classfile.Code obj)
           
 
Methods inherited from class edu.umd.cs.findbugs.visitclass.PreorderVisitor
asUnsignedByte, getClassName, getConstantPool, getDottedClassName, getDottedFieldSig, getDottedMethodSig, getDottedSuperclassName, getFieldIsStatic, getFieldName, getFieldSig, getFullyQualifiedFieldName, getFullyQualifiedMethodName, getMethod, getMethodName, getMethodSig, getPackageName, getSourceFile, getStringFromIndex, getSuperclassName, getThisClass, visitAfter, visitCode, visitConstantPool, visitingField, visitingMethod, visitInnerClasses, visitJavaClass, visitLineNumberTable, visitLocalVariableTable
 
Methods inherited from class edu.umd.cs.findbugs.visitclass.BetterVisitor
report, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visitCodeException, visitConstantClass, visitConstantDouble, visitConstantFieldref, visitConstantFloat, visitConstantInteger, visitConstantInterfaceMethodref, visitConstantLong, visitConstantMethodref, visitConstantNameAndType, visitConstantString, visitConstantUtf8, visitConstantValue, visitDeprecated, visitExceptionTable, visitField, visitInnerClass, visitLineNumber, visitLocalVariable, visitMethod, visitSignature, visitSourceFile, visitStackMap, visitStackMapEntry, visitSynthetic, visitUnknown
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

opcode

private int opcode

opcodeIsWide

private boolean opcodeIsWide

PC

private int PC

branchOffset

private int branchOffset

branchTarget

private int branchTarget

branchFallThrough

private int branchFallThrough

switchOffsets

private int[] switchOffsets

switchLabels

private int[] switchLabels

defaultSwitchOffset

private int defaultSwitchOffset

classConstantOperand

private java.lang.String classConstantOperand

dottedClassConstantOperand

private java.lang.String dottedClassConstantOperand

nameConstantOperand

private java.lang.String nameConstantOperand

sigConstantOperand

private java.lang.String sigConstantOperand

dottedSigConstantOperand

private java.lang.String dottedSigConstantOperand

stringConstantOperand

private java.lang.String stringConstantOperand

refConstantOperand

private java.lang.String refConstantOperand

refFieldIsStatic

private boolean refFieldIsStatic

constantRefOperand

private org.apache.bcel.classfile.Constant constantRefOperand

intConstant

private int intConstant

longConstant

private long longConstant

floatConstant

private float floatConstant

doubleConstant

private double doubleConstant

registerOperand

private int registerOperand

INVALID_OFFSET

private static final int INVALID_OFFSET
See Also:
Constant Field Values

NOT_AVAILABLE

private static final java.lang.String NOT_AVAILABLE
See Also:
Constant Field Values

R_INT

protected static final int R_INT
See Also:
Constant Field Values

R_LONG

protected static final int R_LONG
See Also:
Constant Field Values

R_FLOAT

protected static final int R_FLOAT
See Also:
Constant Field Values

R_DOUBLE

protected static final int R_DOUBLE
See Also:
Constant Field Values

R_REF

protected static final int R_REF
See Also:
Constant Field Values

registerKind

protected int registerKind

replaceSlashesWithDotsCache

private static java.util.HashMap<java.lang.String,java.lang.String> replaceSlashesWithDotsCache

M_INT

public static final byte M_INT
Meaning of bytecode operands

See Also:
Constant Field Values

M_UINT

public static final byte M_UINT
See Also:
Constant Field Values

M_CP

public static final byte M_CP
See Also:
Constant Field Values

M_R

public static final byte M_R
See Also:
Constant Field Values

M_BR

public static final byte M_BR
See Also:
Constant Field Values

M_PAD

public static final byte M_PAD
See Also:
Constant Field Values

MEANING_OF_OPERANDS

static final short[][] MEANING_OF_OPERANDS
Meaning of bytecode operands


codeBytes

protected byte[] codeBytes

lineNumberTable

protected org.apache.bcel.classfile.LineNumberTable lineNumberTable
Constructor Detail

DismantleBytecode

public DismantleBytecode()
Method Detail

replaceSlashesWithDots

static java.lang.String replaceSlashesWithDots(java.lang.String c)

getDottedClassConstantOperand

public java.lang.String getDottedClassConstantOperand()
If the current opcode has a class operand, get the associated class constant, dot-formatted


getRefConstantOperand

public java.lang.String getRefConstantOperand()
If the current opcode has a reference constant operand, get its string representation


getNameConstantOperand

public java.lang.String getNameConstantOperand()
If the current opcode has a reference constant operand, get its name


getDottedSigConstantOperand

public java.lang.String getDottedSigConstantOperand()
If the current opcode has a reference constant operand, get its signature, dot-formatted


getSigConstantOperand

public java.lang.String getSigConstantOperand()
If the current opcode has a reference constant operand, get its signature, slash-formatted


getClassConstantOperand

public java.lang.String getClassConstantOperand()

getStringConstantOperand

public java.lang.String getStringConstantOperand()
If the current opcode has a string constant operand, get its name


getConstantRefOperand

public org.apache.bcel.classfile.Constant getConstantRefOperand()

getRegisterOperand

public int getRegisterOperand()

getIntConstant

public int getIntConstant()

getBranchOffset

public int getBranchOffset()

getBranchTarget

public int getBranchTarget()

getBranchFallThrough

public int getBranchFallThrough()

getDefaultSwitchOffset

public int getDefaultSwitchOffset()

getRefFieldIsStatic

public boolean getRefFieldIsStatic()

getPC

public int getPC()

getSwitchOffsets

public int[] getSwitchOffsets()

getSwitchLabels

public int[] getSwitchLabels()

resetState

private void resetState()

sortByOffset

private static void sortByOffset(int[] switchOffsets,
                                 int[] switchLabels)

visit

public void visit(org.apache.bcel.classfile.Code obj)
Overrides:
visit in class BetterVisitor

sawDouble

public void sawDouble(double seen)

sawFloat

public void sawFloat(float seen)

sawRegister

public void sawRegister(int r)

sawInt

public void sawInt(int seen)

sawLong

public void sawLong(long seen)

sawOffset

public void sawOffset(int seen)

sawOpcode

public void sawOpcode(int seen)

sawString

public void sawString(java.lang.String seen)

sawField

public void sawField()

sawMethod

public void sawMethod()

sawIMethod

public void sawIMethod()

sawClass

public void sawClass()