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,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,OverridingEqualsNotSymmetrical,OverridingMethodsMustInvokeSuperDetector,PermissionsSuper,ReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass,ReflectionIncreaseAccessibility,RepeatedConditionals,ResourceInMultipleThreadsDetector,RuntimeExceptionCapture,SerializableIdiom,SharedVariableAtomicityDetector,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
Nested Classes -
Field Summary
FieldsFields inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode
codeBytes, lineNumberTable, M_BR, M_CP, M_INT, M_PAD, M_R, M_UINTFields inherited from interface edu.umd.cs.findbugs.Priorities
EXP_PRIORITY, HIGH_PRIORITY, IGNORE_PRIORITY, LOW_PRIORITY, NORMAL_PRIORITY -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidafterOpcode(int seen) Note that stack might be TOP when this method is called.booleanbeforeOpcode(int seen) return false if we should skip calling sawOpcodegetStack()final booleanabstract voidsawOpcode(int seen) By default, this method will not be called when stack is TOP.final voidvisitCode(org.apache.bcel.classfile.Code obj) Methods inherited from class edu.umd.cs.findbugs.BytecodeScanningDetector
getClassContext, report, shouldVisitCode, visitClassContextMethods 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, visitMethods inherited from class edu.umd.cs.findbugs.visitclass.AnnotationVisitor
getAnnotationParameterAsEnum, getAnnotationParameterAsString, getAnnotationParameterAsStringArray, visitAnnotation, visitAnnotation, visitParameterAnnotation, visitParameterAnnotation, visitSyntheticParameterAnnotationMethods 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, visitStackMapEntryMethods 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, visitUnknownMethods inherited from class java.lang.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
-
stack
-
-
Constructor Details
-
OpcodeStackDetector
protected OpcodeStackDetector()
-
-
Method Details
-
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
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:
-
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:
-