Package edu.umd.cs.findbugs.detect
Class FindOverridableMethodCall
- All Implemented Interfaces:
Detector
,Priorities
,org.apache.bcel.classfile.Visitor
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
OpcodeStackDetector.WithCustomJumpInfo
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final BugAccumulator
private final Map
<XMethod, FindOverridableMethodCall.CallerInfo> private final Map
<XMethod, FindOverridableMethodCall.CallerInfo> private final Map
<XMethod, FindOverridableMethodCall.CallerInfo> private static final String
private static final String
private static final String
private final Map
<Integer, FindOverridableMethodCall.CallerInfo> private final Map
<Integer, FindOverridableMethodCall.CallerInfo> private final Map
<Integer, FindOverridableMethodCall.CallerInfo> 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 -
Method Summary
Modifier and TypeMethodDescriptionprivate void
checkAndRecordCallBetweenNonOverridableMethods
(XMethod caller, XMethod callee) private void
checkAndRecordCallFromClone
(XMethod clone, XMethod callee, SourceLineAnnotation sourceLine) private void
checkAndRecordCallFromConstructor
(XMethod constructor, XMethod callee, SourceLineAnnotation sourceLine) private void
checkAndRecordCallFromReadObject
(XMethod readObject, XMethod callee, SourceLineAnnotation sourceLine) private void
checkAndRecordCallToOverridable
(XMethod caller, XMethod overridable) (package private) boolean
checkAndRecordDirectCase
(XMethod caller, XMethod method, String bugType, int priority, SourceLineAnnotation sourceLine) getIndirectCallerClone
(XMethod callee) getIndirectCallerConstructor
(XMethod callee) getIndirectCallerReadObject
(XMethod callee) getIndirectCallerSpecial
(XMethod callee, Map<XMethod, FindOverridableMethodCall.CallerInfo> map, Set<XMethod> visited) private XMethod
private XMethod
getIndirectlyCalledOverridable
(XMethod caller, Set<XMethod> visited) private boolean
private boolean
isSelfCall
(XMethod method) void
sawOpcode
(int seen) By default, this method will not be called when stack is TOP.private XMethod
superClone
(XClass clazz) void
visit
(org.apache.bcel.classfile.JavaClass obj) void
visitAfter
(org.apache.bcel.classfile.JavaClass obj) void
visitBootstrapMethods
(org.apache.bcel.classfile.BootstrapMethods obj) 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, 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, visitAnnotationDefault, visitAnnotationEntry, 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, 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 Details
-
callerConstructors
-
callerClones
-
callerReadObjects
-
callsToOverridable
-
callerToCalleeMap
-
calleeToCallerMap
-
refCallerConstructors
-
refCallerClones
-
refCallerReadObjects
-
refCalleeToCallerMap
-
CONSTRUCTOR_BUG
- See Also:
-
CLONE_BUG
- See Also:
-
READ_OBJECT_BUG
- See Also:
-
bugAccumulator
-
-
Constructor Details
-
FindOverridableMethodCall
-
-
Method Details
-
visit
public void visit(org.apache.bcel.classfile.JavaClass obj) - Overrides:
visit
in classBetterVisitor
-
visitBootstrapMethods
public void visitBootstrapMethods(org.apache.bcel.classfile.BootstrapMethods obj) - Specified by:
visitBootstrapMethods
in interfaceorg.apache.bcel.classfile.Visitor
- Overrides:
visitBootstrapMethods
in classPreorderVisitor
-
visitAfter
public void visitAfter(org.apache.bcel.classfile.JavaClass obj) - Overrides:
visitAfter
in classPreorderVisitor
-
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:
-
isCurrentMethodReadObject
private boolean isCurrentMethodReadObject() -
superClone
-
checkAndRecordDirectCase
boolean checkAndRecordDirectCase(XMethod caller, XMethod method, String bugType, int priority, SourceLineAnnotation sourceLine) -
isSelfCall
-
checkAndRecordCallFromConstructor
private void checkAndRecordCallFromConstructor(XMethod constructor, XMethod callee, SourceLineAnnotation sourceLine) -
checkAndRecordCallFromClone
private void checkAndRecordCallFromClone(XMethod clone, XMethod callee, SourceLineAnnotation sourceLine) -
checkAndRecordCallFromReadObject
private void checkAndRecordCallFromReadObject(XMethod readObject, XMethod callee, SourceLineAnnotation sourceLine) -
checkAndRecordCallToOverridable
-
checkAndRecordCallBetweenNonOverridableMethods
-
getIndirectlyCalledOverridable
-
getIndirectlyCalledOverridable
-
getIndirectCallerConstructor
-
getIndirectCallerClone
-
getIndirectCallerReadObject
-
getIndirectCallerSpecial
private FindOverridableMethodCall.CallerInfo getIndirectCallerSpecial(XMethod callee, Map<XMethod, FindOverridableMethodCall.CallerInfo> map) -
getIndirectCallerSpecial
private FindOverridableMethodCall.CallerInfo getIndirectCallerSpecial(XMethod callee, Map<XMethod, FindOverridableMethodCall.CallerInfo> map, Set<XMethod> visited)
-