Class DismantleBytecode
java.lang.Object
edu.umd.cs.findbugs.visitclass.BetterVisitor
edu.umd.cs.findbugs.visitclass.PreorderVisitor
edu.umd.cs.findbugs.visitclass.AnnotationVisitor
edu.umd.cs.findbugs.visitclass.DismantleBytecode
- All Implemented Interfaces:
org.apache.bcel.classfile.Visitor
- Direct Known Subclasses:
BytecodeScanningDetector, CloneIdiom, NoteDirectlyRelevantTypeQualifiers
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate intprivate intprivate intprivate Stringprotected byte[]private org.apache.bcel.classfile.Constantprivate intprivate intprivate Stringprivate doubleprivate floatprivate static final NumberFormatprivate intprivate static final intprivate booleanprivate booleanprotected org.apache.bcel.classfile.LineNumberTableprivate longstatic final bytestatic final bytestatic final byteMeaning of bytecode operandsstatic final bytestatic final bytestatic final byte(package private) static final byte[][]Meaning of bytecode operandsprivate Stringprivate intprivate static final Stringprivate intprivate booleanprivate intprivate final int[]private Stringprivate ClassDescriptorprivate FieldDescriptorprivate MethodDescriptorprivate XClassprivate XFieldprivate XMethodprivate booleanprivate intprivate Stringprivate intprivate Stringprivate int[]private int[]Fields inherited from class AnnotationVisitor
DEBUGFields inherited from class PreorderVisitor
argumentSignature, visitMethodsInCallOrder -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidafterOpcode(int seen) static booleanareOppositeBranches(int opcode1, int opcode2) booleanbooleanbeforeOpcode(int seen) return false if we should skip calling sawOpcodeintintintIf the current opcode has a class constant operand, get the classname, slash-formatted.intgetCodeByte(int offset) org.apache.bcel.classfile.ConstantintIf the current opcode has a class operand, get the associated class constant, dot-formattedintlongintgetMaxPC()If the current opcode has a reference constant operand, get its nameintgetNextCodeByte(int offset) intintintintgetPC()intgetPrevOpcode(int offset) return previous opcode;Deprecated.private XClassbooleanintIf the current opcode has a reference constant operand, get its signature, slash-formattedIf the current opcode has a string constant operand, get its nameint[]int[]static booleanisBranch(int opcode) Return whether or not given opcode is a branch instruction.booleanbooleanbooleanbooleanisRegisterStore(int opcode) booleanisReturn(int opcode) booleanisShift(int opcode) static booleanisSwitch(int opcode) Return whether or not given opcode is a switch instruction.booleanvoidprintOpCode(int seen) private voidvoidsawBranchTo(int targetPC) voidsawClass()voidsawDouble(double seen) voidsawField()voidsawFloat(float seen) voidvoidsawInt(int seen) voidsawLong(long seen) voidvoidsawOpcode(int seen) voidsawRegister(int r) voidprivate static voidsortByOffset(int[] switchOffsets, int[] switchLabels) voidvisit(org.apache.bcel.classfile.Code obj) Methods inherited from class AnnotationVisitor
getAnnotationParameterAsEnum, getAnnotationParameterAsString, getAnnotationParameterAsStringArray, visitAnnotation, visitAnnotation, visitParameterAnnotation, visitParameterAnnotation, visitSyntheticParameterAnnotationMethods inherited from class PreorderVisitor
amVisitingMainMethod, asUnsignedByte, doVisitMethod, getClassDescriptor, getClassName, getCode, getConstantPool, getDottedClassName, getDottedFieldSig, getDottedMethodSig, getDottedSuperclassName, getField, getFieldDescriptor, getFieldIsStatic, getFieldName, getFieldSig, getFullyQualifiedFieldName, getFullyQualifiedMethodName, getMethod, getMethodDescriptor, getMethodName, getMethodSig, getMethodVisitOrder, getNumberArguments, getNumberMethodArguments, getPackageName, getSizeOfSurroundingTryBlock, getSizeOfSurroundingTryBlock, getSourceFile, getStringFromIndex, getSuperclassName, getSurroundingCaughtExceptions, getSurroundingCaughtExceptions, getSurroundingCaughtExceptionTypes, getSurroundingTryBlock, getSurroundingTryBlock, getThisClass, getXClass, getXField, getXMethod, hasInterestingClass, hasInterestingMethod, isVisitMethodsInCallOrder, setupVisitorForClass, setVisitMethodsInCallOrder, shouldVisit, toString, visitAfter, visitAfter, visitAnnotationDefault, visitAnnotationEntry, visitBootstrapMethods, visitCode, visitConstantInvokeDynamic, visitConstantMethodHandle, visitConstantMethodType, visitConstantModule, visitConstantPackage, visitConstantPool, visitEnclosingMethod, visitingField, visitingMethod, visitInnerClasses, visitJavaClass, visitLineNumberTable, visitLocalVariableTable, visitMethodParameters, visitParameterAnnotationEntry, visitStackMap, visitStackMapEntryMethods inherited from class 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, visit, visitCodeException, visitConstantClass, visitConstantDouble, visitConstantFieldref, visitConstantFloat, visitConstantInteger, visitConstantInterfaceMethodref, visitConstantLong, visitConstantMethodref, visitConstantNameAndType, visitConstantString, visitConstantUtf8, visitConstantValue, visitDeprecated, visitExceptionTable, visitField, visitInnerClass, visitLineNumber, visitLocalVariable, visitLocalVariableTypeTable, visitMethod, visitSignature, visitSourceFile, visitSynthetic, visitUnknownMethods inherited from class Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.apache.bcel.classfile.Visitor
visitConstantDynamic, visitMethodParameter, visitModule, visitModuleExports, visitModuleMainClass, visitModuleOpens, visitModulePackages, visitModuleProvides, visitModuleRequires, visitNestHost, visitNestMembers, visitRecord, visitRecordComponent, visitStackMapType
-
Field Details
-
opcode
private int opcode -
opcodeIsWide
private boolean opcodeIsWide -
PC
private int PC -
nextPC
private int nextPC -
branchOffset
private int branchOffset -
branchTarget
private int branchTarget -
branchFallThrough
private int branchFallThrough -
switchOffsets
private int[] switchOffsets -
switchLabels
private int[] switchLabels -
prevOpcode
private final int[] prevOpcode -
currentPosInPrevOpcodeBuffer
private int currentPosInPrevOpcodeBuffer -
sizePrevOpcodeBuffer
private int sizePrevOpcodeBuffer -
defaultSwitchOffset
private int defaultSwitchOffset -
classConstantOperand
-
referencedClass
-
referencedXClass
-
referencedMethod
-
referencedXMethod
-
referencedField
-
referencedXField
-
dottedClassConstantOperand
-
nameConstantOperand
-
sigConstantOperand
-
stringConstantOperand
-
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 -
isRegisterLoad
private boolean isRegisterLoad -
isRegisterStore
private boolean isRegisterStore -
INVALID_OFFSET
private static final int INVALID_OFFSET- See Also:
-
NOT_AVAILABLE
- See Also:
-
M_INT
public static final byte M_INTMeaning of bytecode operands- See Also:
-
M_UINT
public static final byte M_UINT- See Also:
-
M_CP
public static final byte M_CP- See Also:
-
M_R
public static final byte M_R- See Also:
-
M_BR
public static final byte M_BR- See Also:
-
M_PAD
public static final byte M_PAD- See Also:
-
MEANING_OF_OPERANDS
static final byte[][] MEANING_OF_OPERANDSMeaning of bytecode operands -
codeBytes
protected byte[] codeBytes -
lineNumberTable
protected org.apache.bcel.classfile.LineNumberTable lineNumberTable -
formatter
-
-
Constructor Details
-
DismantleBytecode
public DismantleBytecode()
-
-
Method Details
-
getClassDescriptorOperand
-
getXClassOperand
-
isMethodCall
public boolean isMethodCall() -
getMethodDescriptorOperand
-
getXMethodOperand
-
getFieldDescriptorOperand
-
getXFieldOperand
-
getDottedClassConstantOperand
If the current opcode has a class operand, get the associated class constant, dot-formatted -
getRefConstantOperand
Deprecated.If the current opcode has a reference constant operand, get its string representation -
getNameConstantOperand
If the current opcode has a reference constant operand, get its name -
getSigConstantOperand
If the current opcode has a reference constant operand, get its signature, slash-formatted -
getClassConstantOperand
If the current opcode has a class constant operand, get the classname, slash-formatted. -
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() -
getLongConstant
public long getLongConstant() -
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() -
resetState
private void resetState() -
sortByOffset
private static void sortByOffset(int[] switchOffsets, int[] switchLabels) -
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:
visitin classBetterVisitor
-
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 targetPC) -
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
-
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() -
getNextCodeByte
public int getNextCodeByte(int offset) -
isReturn
public boolean isReturn(int opcode) -
isShift
public boolean isShift(int opcode) -
areOppositeBranches
public static boolean areOppositeBranches(int opcode1, int opcode2) -
isRegisterStore
public boolean isRegisterStore(int opcode) -
getReferencedXClass
- Returns:
- Returns the referencedXClass.
-