Package edu.umd.cs.findbugs.bcel
Class OpcodeStackDetector
- java.lang.Object
-
- All Implemented Interfaces:
Detector
,Priorities
,org.apache.bcel.classfile.Visitor
- Direct Known Subclasses:
AppendingToAnObjectOutputStream
,AtomicityProblem
,BadResultSetAccess
,BadSyntaxForRegularExpression
,BuildStringPassthruGraph
,ConfusionBetweenInheritedAndOuterMethod
,CovariantArrayAssignment
,CrossSiteScripting
,DefaultEncodingDetector
,DontAssertInstanceofInTests
,DumbMethods
,EqualsOperandShouldHaveClassCompatibleWithThis
,ExplicitSerialization
,FieldItemSummary
,FindBadForLoop
,FindComparatorProblems
,FindDoubleCheck
,FindFieldSelfAssignment
,FindFloatEquality
,FindHEmismatch
,FindNonShortCircuit
,FindNoSideEffectMethods
,FindNullDerefsInvolvingNonShortCircuitEvaluation
,FindPuzzlers
,FindReturnRef
,FindSelfComparison
,FormatStringChecker
,FunctionsThatMightBeMistakenForProcedures
,IncompatMask
,InefficientIndexOf
,InefficientInitializationInsideLoop
,InfiniteLoop
,InfiniteRecursiveLoop
,InitializeNonnullFieldsInConstructor
,IntCast2LongAsInstant
,LostLoggerDueToWeakReference
,MethodReturnCheck
,MultithreadedInstanceAccess
,MutableEnum
,Noise
,NumberConstructor
,OpcodeStackDetector.WithCustomJumpInfo
,OverridingEqualsNotSymmetrical
,OverridingMethodsMustInvokeSuperDetector
,ReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass
,RepeatedConditionals
,RuntimeExceptionCapture
,SerializableIdiom
,StaticCalendarDetector
,SwitchFallthrough
,SynchronizationOnSharedBuiltinConstant
,SynchronizeOnClassLiteralNotGetClass
,SynchronizingOnContentsOfFieldToProtectField
,TestingGround
,TestingGround2
,TypeReturnNull
,UnreadFields
,URLProblems
public abstract class OpcodeStackDetector extends BytecodeScanningDetector
Base class for Detectors that want to scan the bytecode of a method and use an opcode stack.- See Also:
BytecodeScanningDetector
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
OpcodeStackDetector.WithCustomJumpInfo
-
Field Summary
Fields Modifier and Type Field Description protected OpcodeStack
stack
-
Fields inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode
codeBytes, lineNumberTable, M_BR, M_CP, M_INT, M_PAD, M_R, M_UINT
-
Fields inherited from interface edu.umd.cs.findbugs.Priorities
EXP_PRIORITY, HIGH_PRIORITY, IGNORE_PRIORITY, LOW_PRIORITY, NORMAL_PRIORITY
-
-
Constructor Summary
Constructors Constructor Description OpcodeStackDetector()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
afterOpcode(int seen)
Note that stack might be TOP when this method is called.boolean
beforeOpcode(int seen)
return false if we should skip calling sawOpcodeOpcodeStack
getStack()
boolean
isUsingCustomUserValue()
abstract void
sawOpcode(int seen)
By default, this method will not be called when stack is TOP.void
visitCode(org.apache.bcel.classfile.Code obj)
-
Methods inherited from class edu.umd.cs.findbugs.BytecodeScanningDetector
getClassContext, report, shouldVisitCode, visitClassContext
-
Methods inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode
areOppositeBranches, atCatchBlock, getBranchFallThrough, getBranchOffset, getBranchTarget, getClassConstantOperand, getClassDescriptorOperand, getCodeByte, getConstantRefOperand, getDefaultSwitchOffset, getDottedClassConstantOperand, getFieldDescriptorOperand, getIntConstant, getLongConstant, getMaxPC, getMethodDescriptorOperand, getNameConstantOperand, getNextCodeByte, getNextOpcode, getNextPC, getOpcode, getPC, getPrevOpcode, getRefConstantOperand, getRefFieldIsStatic, getRegisterOperand, getSigConstantOperand, getStringConstantOperand, getSwitchLabels, getSwitchOffsets, getXClassOperand, getXFieldOperand, getXMethodOperand, isBranch, isMethodCall, isRegisterLoad, isRegisterStore, isRegisterStore, isReturn, isShift, isSwitch, isWideOpcode, printOpCode, sawBranchTo, sawClass, sawDouble, sawField, sawFloat, sawIMethod, sawInt, sawLong, sawMethod, sawRegister, sawString, visit
-
Methods inherited from class edu.umd.cs.findbugs.visitclass.AnnotationVisitor
getAnnotationParameterAsString, getAnnotationParameterAsStringArray, visitAnnotation, visitAnnotation, visitParameterAnnotation, 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, getMethodVisitOrder, getNumberArguments, getNumberMethodArguments, getPackageName, getSizeOfSurroundingTryBlock, getSizeOfSurroundingTryBlock, getSourceFile, getStringFromIndex, getSuperclassName, getSurroundingCaughtExceptions, getSurroundingCaughtExceptions, getSurroundingTryBlock, getSurroundingTryBlock, getThisClass, getXClass, getXField, getXMethod, hasInterestingClass, hasInterestingMethod, isVisitMethodsInCallOrder, setupVisitorForClass, setVisitMethodsInCallOrder, shouldVisit, toString, visitAfter, visitAfter, visitAnnotationDefault, visitAnnotationEntry, visitBootstrapMethods, visitConstantInvokeDynamic, visitConstantMethodHandle, visitConstantMethodType, visitConstantModule, visitConstantPackage, visitConstantPool, visitEnclosingMethod, visitingField, visitingMethod, visitInnerClasses, visitJavaClass, visitLineNumberTable, visitLocalVariableTable, visitMethodParameters, visitParameterAnnotationEntry, visitStackMap, visitStackMapEntry
-
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, 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, visitUnknown
-
-
-
-
Field Detail
-
stack
protected OpcodeStack stack
-
-
Method Detail
-
getStack
public OpcodeStack getStack()
-
visitCode
public final void visitCode(org.apache.bcel.classfile.Code obj)
- Specified by:
visitCode
in interfaceorg.apache.bcel.classfile.Visitor
- Overrides:
visitCode
in classPreorderVisitor
-
beforeOpcode
@OverridingMethodsMustInvokeSuper public boolean beforeOpcode(int seen)
Description copied from class:DismantleBytecode
return false if we should skip calling sawOpcode- Overrides:
beforeOpcode
in classDismantleBytecode
-
afterOpcode
@OverridingMethodsMustInvokeSuper public void afterOpcode(int seen)
Note that stack might be TOP when this method is called.
- Overrides:
afterOpcode
in classDismantleBytecode
- See Also:
sawOpcode(int)
-
sawOpcode
public abstract void sawOpcode(int seen)
By default, this method will not be called when stack is TOP. To change this behavior, override
#beforeOpcode(int)
and change to return true even if stack is TOP.see Using FindBugs for Research to learn lattice and what TOP means.
- Overrides:
sawOpcode
in classDismantleBytecode
- See Also:
beforeOpcode(int)
-
isUsingCustomUserValue
public final boolean isUsingCustomUserValue()
- Returns:
- true if this detector is annotated with
OpcodeStack.CustomUserValue
and thus should not reuse generic OpcodeStack information from an iterative evaluation of the opcode stack. Such detectors will not use iterative opcode stack evaluation. - See Also:
OpcodeStack.resetForMethodEntry(edu.umd.cs.findbugs.visitclass.DismantleBytecode)
-
-