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 class
MethodReturnCheck.State
-
Nested classes/interfaces inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
OpcodeStackDetector.WithCustomJumpInfo
-
-
Field Summary
Fields Modifier and Type Field Description private BugAccumulator
bugAccumulator
private int
callPC
private XMethod
callSeen
private CheckReturnAnnotationDatabase
checkReturnAnnotationDatabase
private static boolean
DEBUG
private static java.util.BitSet
INVOKE_OPCODE_SET
private FindNoSideEffectMethods.NoSideEffectMethodsDatabase
noSideEffectMethods
(package private) boolean
previousOpcodeWasNEW
private boolean
sawExcludedNSECall
private boolean
sawMockitoInvoke
private MethodReturnCheck.State
state
-
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 boolean
badUseOfCompareResult(OpcodeStack.Item left, OpcodeStack.Item right)
private boolean
isCallMockitoVerifyInvocation(XMethod method)
private boolean
isPop(int seen)
private void
sawMethodCallWithIgnoredReturnValue()
void
sawOpcode(int seen)
By default, this method will not be called when stack is TOP.void
visitAfter(org.apache.bcel.classfile.Code code)
Called after visiting a code attributevoid
visitClassContext(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
-
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:Detector
Visit the ClassContext for a class which should be analyzed for instances of bug patterns.- Specified by:
visitClassContext
in interfaceDetector
- Overrides:
visitClassContext
in classBytecodeScanningDetector
- Parameters:
classContext
- the ClassContext
-
visitAfter
public void visitAfter(org.apache.bcel.classfile.Code code)
Description copied from class:PreorderVisitor
Called after visiting a code attribute- Overrides:
visitAfter
in 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:OpcodeStackDetector
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.
- Specified by:
sawOpcode
in classOpcodeStackDetector
- See Also:
OpcodeStackDetector.beforeOpcode(int)
-
isCallMockitoVerifyInvocation
private boolean isCallMockitoVerifyInvocation(XMethod method)
-
sawMethodCallWithIgnoredReturnValue
private void sawMethodCallWithIgnoredReturnValue()
-
isPop
private boolean isPop(int seen)
-
-