Detector
, Priorities
AppendingToAnObjectOutputStream
, AtomicityProblem
, BadResultSetAccess
, BadSyntaxForRegularExpression
, BuildStringPassthruGraph
, CbeckMustOverrideSuperAnnotation
, ConfusionBetweenInheritedAndOuterMethod
, CovariantArrayAssignment
, CrossSiteScripting
, DefaultEncodingDetector
, 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
, ReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass
, RepeatedConditionals
, RuntimeExceptionCapture
, SerializableIdiom
, StaticCalendarDetector
, SwitchFallthrough
, SynchronizationOnSharedBuiltinConstant
, SynchronizeOnClassLiteralNotGetClass
, SynchronizingOnContentsOfFieldToProtectField
, TestingGround
, TestingGround2
, TypeReturnNull
, UnreadFields
, URLProblems
public abstract class OpcodeStackDetector extends BytecodeScanningDetector
BytecodeScanningDetector
Modifier and Type | Class | Description |
---|---|---|
static class |
OpcodeStackDetector.WithCustomJumpInfo |
Modifier and Type | Field | Description |
---|---|---|
protected OpcodeStack |
stack |
codeBytes, lineNumberTable, M_BR, M_CP, M_INT, M_PAD, M_R, M_UINT
EXP_PRIORITY, HIGH_PRIORITY, IGNORE_PRIORITY, LOW_PRIORITY, NORMAL_PRIORITY
Constructor | Description |
---|---|
OpcodeStackDetector() |
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 sawOpcode
|
OpcodeStack |
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) |
getAnnotationParameterAsString, getAnnotationParameterAsStringArray, visitAnnotation, visitAnnotation, visitParameterAnnotation, visitParameterAnnotation, visitSyntheticParameterAnnotation
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
getClassContext, report, shouldVisitCode, visitClassContext
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
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
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
protected OpcodeStack stack
public OpcodeStack getStack()
public final void visitCode(org.apache.bcel.classfile.Code obj)
visitCode
in class PreorderVisitor
@OverridingMethodsMustInvokeSuper public boolean beforeOpcode(int seen)
DismantleBytecode
beforeOpcode
in class DismantleBytecode
@OverridingMethodsMustInvokeSuper public void afterOpcode(int seen)
Note that stack might be TOP when this method is called.
afterOpcode
in class DismantleBytecode
sawOpcode(int)
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.
sawOpcode
in class DismantleBytecode
beforeOpcode(int)
public final boolean isUsingCustomUserValue()
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.OpcodeStack.resetForMethodEntry(edu.umd.cs.findbugs.visitclass.DismantleBytecode)
SpotBugs is licensed under the LGPL.