Package edu.umd.cs.findbugs.detect
Class MethodReturnCheck
- java.lang.Object
-
- All Implemented Interfaces:
Detector,Priorities,UseAnnotationDatabase,org.apache.bcel.classfile.Visitor
public class MethodReturnCheck extends OpcodeStackDetector implements UseAnnotationDatabase
Look for calls to methods where the return value is erroneously ignored. This detector is meant as a simpler and faster replacement for BCPMethodReturnCheck.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classMethodReturnCheck.State-
Nested classes/interfaces inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
OpcodeStackDetector.WithCustomJumpInfo
-
-
Field Summary
Fields Modifier and Type Field Description private static java.util.Set<java.lang.String>BDD_MOCKITO_VOID_STUBBING_METHODSprivate BugAccumulatorbugAccumulatorprivate intcallPCprivate XMethodcallSeenprivate CheckReturnAnnotationDatabasecheckReturnAnnotationDatabaseprivate static booleanDEBUGprivate static java.util.BitSetINVOKE_OPCODE_SETprivate static java.util.Set<java.lang.String>MOCKITO_VOID_STUBBING_METHODSprivate FindNoSideEffectMethods.NoSideEffectMethodsDatabasenoSideEffectMethods(package private) booleanpreviousOpcodeWasNEWprivate booleansawExcludedNSECallprivate booleansawMockitoInvokeprivate MethodReturnCheck.Statestate-
Fields inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
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 MethodReturnCheck(BugReporter bugReporter)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private booleanbadUseOfCompareResult(OpcodeStack.Item left, OpcodeStack.Item right)private booleanisCallBDDMockitoInvocation(XMethod method)private booleanisCallMockitoInvocation(XMethod method)private booleanisPop(int seen)private voidsawMethodCallWithIgnoredReturnValue()voidsawOpcode(int seen)By default, this method will not be called when stack is TOP.voidvisitAfter(org.apache.bcel.classfile.Code code)Called after visiting a code attributevoidvisitClassContext(ClassContext classContext)Visit the ClassContext for a class which should be analyzed for instances of bug patterns.-
Methods inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
afterOpcode, beforeOpcode, getStack, isUsingCustomUserValue, visitCode
-
Methods inherited from class edu.umd.cs.findbugs.BytecodeScanningDetector
getClassContext, report, shouldVisitCode
-
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, 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
-
DEBUG
private static final boolean DEBUG
-
INVOKE_OPCODE_SET
private static final java.util.BitSet INVOKE_OPCODE_SET
-
MOCKITO_VOID_STUBBING_METHODS
private static final java.util.Set<java.lang.String> MOCKITO_VOID_STUBBING_METHODS
-
BDD_MOCKITO_VOID_STUBBING_METHODS
private static final java.util.Set<java.lang.String> BDD_MOCKITO_VOID_STUBBING_METHODS
-
previousOpcodeWasNEW
boolean previousOpcodeWasNEW
-
bugAccumulator
private final BugAccumulator bugAccumulator
-
checkReturnAnnotationDatabase
private CheckReturnAnnotationDatabase checkReturnAnnotationDatabase
-
callSeen
private XMethod callSeen
-
state
private MethodReturnCheck.State state
-
callPC
private int callPC
-
noSideEffectMethods
private final FindNoSideEffectMethods.NoSideEffectMethodsDatabase noSideEffectMethods
-
sawExcludedNSECall
private boolean sawExcludedNSECall
-
sawMockitoInvoke
private boolean sawMockitoInvoke
-
-
Constructor Detail
-
MethodReturnCheck
public MethodReturnCheck(BugReporter bugReporter)
-
-
Method Detail
-
visitClassContext
public void visitClassContext(ClassContext classContext)
Description copied from interface:DetectorVisit the ClassContext for a class which should be analyzed for instances of bug patterns.- Specified by:
visitClassContextin interfaceDetector- Overrides:
visitClassContextin classBytecodeScanningDetector- Parameters:
classContext- the ClassContext
-
visitAfter
public void visitAfter(org.apache.bcel.classfile.Code code)
Description copied from class:PreorderVisitorCalled after visiting a code attribute- Overrides:
visitAfterin classPreorderVisitor- Parameters:
code- Code that was just visited
-
badUseOfCompareResult
private boolean badUseOfCompareResult(OpcodeStack.Item left, OpcodeStack.Item right)
-
sawOpcode
public void sawOpcode(int seen)
Description copied from class:OpcodeStackDetectorBy 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.
- Specified by:
sawOpcodein classOpcodeStackDetector- See Also:
OpcodeStackDetector.beforeOpcode(int)
-
isCallMockitoInvocation
private boolean isCallMockitoInvocation(XMethod method)
-
isCallBDDMockitoInvocation
private boolean isCallBDDMockitoInvocation(XMethod method)
-
sawMethodCallWithIgnoredReturnValue
private void sawMethodCallWithIgnoredReturnValue()
-
isPop
private boolean isPop(int seen)
-
-