Package edu.umd.cs.findbugs.bcel
Class OpcodeStackDetector
- All Implemented Interfaces:
Detector
,Priorities
,org.apache.bcel.classfile.Visitor
- Direct Known Subclasses:
AbstractAssertDetector
,AppendingToAnObjectOutputStream
,AtomicityProblem
,BadResultSetAccess
,BadSyntaxForRegularExpression
,BuildStringPassthruGraph
,ConfusionBetweenInheritedAndOuterMethod
,ConstructorThrow
,CovariantArrayAssignment
,CrossSiteScripting
,DefaultEncodingDetector
,DontAssertInstanceofInTests
,DontUseFloatsAsLoopCounters
,DumbMethods
,EqualsOperandShouldHaveClassCompatibleWithThis
,ExplicitSerialization
,FieldItemSummary
,FindBadEndOfStreamCheck
,FindBadForLoop
,FindComparatorProblems
,FindDoubleCheck
,FindFieldSelfAssignment
,FindFloatEquality
,FindHEmismatch
,FindInstanceLockOnSharedStaticData
,FindNonShortCircuit
,FindNoSideEffectMethods
,FindNullDerefsInvolvingNonShortCircuitEvaluation
,FindOverridableMethodCall
,FindPotentialSecurityCheckBasedOnUntrustedSource
,FindPublicAttributes
,FindPuzzlers
,FindReturnRef
,FindSelfComparison
,FindVulnerableSecurityCheckMethods
,FormatStringChecker
,FunctionsThatMightBeMistakenForProcedures
,IncompatMask
,InefficientIndexOf
,InefficientInitializationInsideLoop
,InfiniteLoop
,InfiniteRecursiveLoop
,InitializeNonnullFieldsInConstructor
,IntCast2LongAsInstant
,LostLoggerDueToWeakReference
,MethodReturnCheck
,MultipleInstantiationsOfSingletons
,MultithreadedInstanceAccess
,MutableEnum
,Noise
,NumberConstructor
,OpcodeStackDetector.WithCustomJumpInfo
,OverridingEqualsNotSymmetrical
,OverridingMethodsMustInvokeSuperDetector
,PermissionsSuper
,ReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass
,ReflectionIncreaseAccessibility
,RepeatedConditionals
,RuntimeExceptionCapture
,SerializableIdiom
,StaticCalendarDetector
,StringConcatenation
,SwitchFallthrough
,SynchronizationOnSharedBuiltinConstant
,SynchronizeOnClassLiteralNotGetClass
,SynchronizingOnContentsOfFieldToProtectField
,TestingGround
,TestingGround2
,ThrowingExceptions
,TypeReturnNull
,UnnecessaryEnvUsage
,UnreadFields
,URLProblems
Base class for Detectors that want to scan the bytecode of a method and use
an opcode stack.
- See Also:
-
Nested Class Summary
-
Field Summary
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
-
Method Summary
Modifier and TypeMethodDescriptionvoid
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 sawOpcodegetStack()
final boolean
abstract void
sawOpcode
(int seen) By default, this method will not be called when stack is TOP.final 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, getSurroundingCaughtExceptionTypes, 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
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.apache.bcel.classfile.Visitor
visitConstantDynamic, visitMethodParameter, visitModule, visitModuleExports, visitModuleMainClass, visitModuleOpens, visitModulePackages, visitModuleProvides, visitModuleRequires, visitNestHost, visitNestMembers, visitStackMapType
-
Field Details
-
stack
-
-
Constructor Details
-
OpcodeStackDetector
public OpcodeStackDetector()
-
-
Method Details
-
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
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:
-
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:
-