FindBugs™ 1.3.9

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.AnnotationVisitor
              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, NoteDirectlyRelevantTypeQualifiers

public abstract class DismantleBytecode
extends AnnotationVisitor


Field Summary
protected  byte[] codeBytes
           
protected  org.apache.bcel.classfile.LineNumberTable lineNumberTable
           
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
           
 
Fields inherited from interface org.apache.bcel.Constants
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_ENUM, 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_VARARGS, 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_ANNOTATION_DEFAULT, ATTR_CODE, ATTR_CONSTANT_VALUE, ATTR_DEPRECATED, ATTR_EXCEPTIONS, ATTR_INNER_CLASSES, ATTR_LINE_NUMBER_TABLE, ATTR_LOCAL_VARIABLE_TABLE, ATTR_LOCAL_VARIABLE_TYPE_TABLE, ATTR_PMG, ATTR_RUNTIMEINVISIBLE_ANNOTATIONS, ATTR_RUNTIMEINVISIBLE_PARAMETER_ANNOTATIONS, ATTR_RUNTIMEVISIBLE_ANNOTATIONS, ATTR_RUNTIMEVISIBLE_PARAMETER_ANNOTATIONS, 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, MAJOR_1_4, MAJOR_1_5, MAX_ACC_FLAG, MAX_BYTE, MAX_CODE_SIZE, MAX_CP_ENTRIES, MAX_SHORT, MINOR, MINOR_1_1, MINOR_1_2, MINOR_1_3, MINOR_1_4, MINOR_1_5, 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
 void afterOpcode(int seen)
           
static boolean areOppositeBranches(int opcode1, int opcode2)
           
 boolean atCatchBlock()
           
 boolean beforeOpcode(int seen)
          return false if we should skip calling sawOpcode
 int getBranchFallThrough()
           
 int getBranchOffset()
           
 int getBranchTarget()
           
 java.lang.String getClassConstantOperand()
          If the current opcode has a class constant operand, get the classname, slash-formatted.
 ClassDescriptor getClassDescriptorOperand()
           
 int getCodeByte(int offset)
           
 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()
          Deprecated. 
 FieldDescriptor getFieldDescriptorOperand()
           
 int getIntConstant()
           
 int getMaxPC()
           
 MethodDescriptor getMethodDescriptorOperand()
           
 java.lang.String getNameConstantOperand()
          If the current opcode has a reference constant operand, get its name
 int getNextOpcode()
           
 int getNextPC()
           
 int getOpcode()
           
 int getPC()
           
 int getPrevOpcode(int offset)
          return previous opcode;
 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()
           
 XClass getXClassOperand()
           
 XField getXFieldOperand()
           
 XMethod getXMethodOperand()
           
static boolean isBranch(int opcode)
          Return whether or not given opcode is a branch instruction.
 boolean isRegisterLoad()
           
 boolean isRegisterStore()
           
 boolean isRegisterStore(int opcode)
           
 boolean isReturn(int opcode)
           
static boolean isSwitch(int opcode)
          Return whether or not given opcode is a switch instruction.
 boolean isWideOpcode()
           
 void printOpCode(int seen)
           
 void sawBranchTo(int seen)
           
 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)
           
 void visit(org.apache.bcel.classfile.Code obj)
           
 
Methods inherited from class edu.umd.cs.findbugs.visitclass.AnnotationVisitor
visit, visitAnnotation, visitParameterAnnotation, visitSyntheticParameterAnnotation
 
Methods inherited from class edu.umd.cs.findbugs.visitclass.PreorderVisitor
amVisitingMainMethod, asUnsignedByte, doVisitMethod, getClassDescriptor, getClassName, getCode, getConstantPool, getDottedClassName, getDottedFieldSig, getDottedMethodSig, getDottedSuperclassName, getField, getFieldDescriptor, getFieldIsStatic, getFieldName, getFieldSig, getFullyQualifiedFieldName, getFullyQualifiedMethodName, getMethod, getMethodDescriptor, getMethodName, getMethodSig, getNumberArguments, getNumberMethodArguments, getPackageName, getSizeOfSurroundingTryBlock, getSizeOfSurroundingTryBlock, getSourceFile, getStringFromIndex, getSuperclassName, getSurroundingCaughtExceptions, getThisClass, getXClass, getXField, getXMethod, setupVisitorForClass, shouldVisit, visitAfter, visitCode, visitConstantPool, visitingField, visitingMethod, visitInnerClasses, visitJavaClass, visitLineNumberTable, visitLocalVariableTable
 
Methods inherited from class edu.umd.cs.findbugs.visitclass.BetterVisitor
clone, 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, visitLocalVariableTypeTable, visitMethod, visitSignature, visitSourceFile, visitStackMap, visitStackMapEntry, visitSynthetic, visitUnknown
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

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

codeBytes

protected byte[] codeBytes

lineNumberTable

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

DismantleBytecode

public DismantleBytecode()
Method Detail

getClassDescriptorOperand

public ClassDescriptor getClassDescriptorOperand()

getXClassOperand

@CheckForNull
public XClass getXClassOperand()

getMethodDescriptorOperand

public MethodDescriptor getMethodDescriptorOperand()

getXMethodOperand

@CheckForNull
public XMethod getXMethodOperand()

getFieldDescriptorOperand

public FieldDescriptor getFieldDescriptorOperand()

getXFieldOperand

@CheckForNull
public XField getXFieldOperand()

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

@Deprecated
public java.lang.String getDottedSigConstantOperand()
Deprecated. 

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

@SlashedClassName
public java.lang.String getClassConstantOperand()
If the current opcode has a class constant operand, get the classname, slash-formatted.


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()

isRegisterLoad

public boolean isRegisterLoad()

isRegisterStore

public boolean isRegisterStore()

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()

getPrevOpcode

public int getPrevOpcode(int offset)
return previous opcode;

Parameters:
offset - 0 for current opcode, 1 for one before that, etc.

isWideOpcode

public boolean isWideOpcode()

isBranch

public static boolean isBranch(int opcode)
Return whether or not given opcode is a branch instruction.

Parameters:
opcode - the opcode
Returns:
true if instruction is a branch, false if not

isSwitch

public static boolean isSwitch(int opcode)
Return whether or not given opcode is a switch instruction.

Parameters:
opcode - the opcode
Returns:
true if instruction is a switch, false if not

getSwitchOffsets

public int[] getSwitchOffsets()

getSwitchLabels

public int[] getSwitchLabels()

getMaxPC

public int getMaxPC()

getCodeByte

public int getCodeByte(int offset)

getOpcode

public int getOpcode()

atCatchBlock

public boolean atCatchBlock()

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)

sawBranchTo

public void sawBranchTo(int seen)

sawOffset

public void sawOffset(int seen)

beforeOpcode

public boolean beforeOpcode(int seen)
return false if we should skip calling sawOpcode


afterOpcode

public void afterOpcode(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()

printOpCode

public void printOpCode(int seen)

getNextPC

public int getNextPC()
Returns:
Returns the nextPC.

getNextOpcode

public int getNextOpcode()

isReturn

public boolean isReturn(int opcode)

areOppositeBranches

public static boolean areOppositeBranches(int opcode1,
                                          int opcode2)

isRegisterStore

public boolean isRegisterStore(int opcode)

FindBugs™ 1.3.9

FindBugs™ is licenced under the LGPL. Copyright © 2006 University of Maryland.