Package edu.umd.cs.findbugs.bcel
Class OpcodeStackDetector
- java.lang.Object
-
- All Implemented Interfaces:
Detector,Priorities,org.apache.bcel.classfile.Visitor
- Direct Known Subclasses:
AbstractAssertDetector,AppendingToAnObjectOutputStream,AtomicityProblem,BadResultSetAccess,BadSyntaxForRegularExpression,BuildStringPassthruGraph,ConfusionBetweenInheritedAndOuterMethod,ConstructorThrow,CovariantArrayAssignment,CrossSiteScripting,DateFormatStringChecker,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,OpcodeStackScanner.Scanner,OverridingEqualsNotSymmetrical,OverridingMethodsMustInvokeSuperDetector,PermissionsSuper,PutfieldScanner.Scanner,ReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass,ReflectionIncreaseAccessibility,RepeatedConditionals,ResourceInMultipleThreadsDetector,RuntimeExceptionCapture,SerializableIdiom,SharedVariableAtomicityDetector,StaticCalendarDetector,StringConcatenation,SwitchFallthrough,SynchronizationOnSharedBuiltinConstant,SynchronizeOnClassLiteralNotGetClass,SynchronizingOnContentsOfFieldToProtectField,TestingGround,TestingGround2,ThrowingExceptions,TypeReturnNull,UnnecessaryEnvUsage,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 classOpcodeStackDetector.WithCustomJumpInfo
-
Field Summary
Fields Modifier and Type Field Description private booleanisUsingCustomUserValueprotected OpcodeStackstack-
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 Modifier Constructor Description protectedOpcodeStackDetector()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidafterOpcode(int seen)Note that stack might be TOP when this method is called.booleanbeforeOpcode(int seen)return false if we should skip calling sawOpcodeOpcodeStackgetStack()booleanisUsingCustomUserValue()abstract voidsawOpcode(int seen)By default, this method will not be called when stack is TOP.voidvisitCode(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
getAnnotationParameterAsEnum, 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, visitRecord, visitRecordComponent, visitStackMapType
-
-
-
-
Field Detail
-
isUsingCustomUserValue
private final boolean isUsingCustomUserValue
-
stack
protected OpcodeStack stack
-
-
Method Detail
-
getStack
public OpcodeStack getStack()
-
visitCode
public final void visitCode(org.apache.bcel.classfile.Code obj)
- Specified by:
visitCodein interfaceorg.apache.bcel.classfile.Visitor- Overrides:
visitCodein classPreorderVisitor
-
beforeOpcode
@OverridingMethodsMustInvokeSuper public boolean beforeOpcode(int seen)
Description copied from class:DismantleBytecodereturn false if we should skip calling sawOpcode- Overrides:
beforeOpcodein classDismantleBytecode
-
afterOpcode
@OverridingMethodsMustInvokeSuper public void afterOpcode(int seen)
Note that stack might be TOP when this method is called.
- Overrides:
afterOpcodein 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:
sawOpcodein classDismantleBytecode- See Also:
beforeOpcode(int)
-
isUsingCustomUserValue
public final boolean isUsingCustomUserValue()
- Returns:
- true if this detector is annotated with
OpcodeStack.CustomUserValueand 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)
-
-