Package edu.umd.cs.findbugs.detect
Class FindOverridableMethodCall
- java.lang.Object
-
- All Implemented Interfaces:
Detector
,Priorities
,org.apache.bcel.classfile.Visitor
public class FindOverridableMethodCall extends OpcodeStackDetector
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
FindOverridableMethodCall.CallerInfo
-
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 MultiMap<XMethod,XMethod>
calleeToCallerMap
private java.util.Map<XMethod,FindOverridableMethodCall.CallerInfo>
callerClones
private java.util.Map<XMethod,FindOverridableMethodCall.CallerInfo>
callerConstructors
private java.util.Map<XMethod,FindOverridableMethodCall.CallerInfo>
callerReadObjects
private MultiMap<XMethod,XMethod>
callerToCalleeMap
private java.util.Map<XMethod,XMethod>
callsToOverridable
private MultiMap<java.lang.Integer,XMethod>
refCalleeToCallerMap
private java.util.Map<java.lang.Integer,FindOverridableMethodCall.CallerInfo>
refCallerClones
private java.util.Map<java.lang.Integer,FindOverridableMethodCall.CallerInfo>
refCallerConstructors
private java.util.Map<java.lang.Integer,FindOverridableMethodCall.CallerInfo>
refCallerReadObjects
-
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 FindOverridableMethodCall(BugReporter bugReporter)
-
Method Summary
-
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 Detail
-
callerConstructors
private final java.util.Map<XMethod,FindOverridableMethodCall.CallerInfo> callerConstructors
-
callerClones
private final java.util.Map<XMethod,FindOverridableMethodCall.CallerInfo> callerClones
-
callerReadObjects
private final java.util.Map<XMethod,FindOverridableMethodCall.CallerInfo> callerReadObjects
-
refCallerConstructors
private final java.util.Map<java.lang.Integer,FindOverridableMethodCall.CallerInfo> refCallerConstructors
-
refCallerClones
private final java.util.Map<java.lang.Integer,FindOverridableMethodCall.CallerInfo> refCallerClones
-
refCallerReadObjects
private final java.util.Map<java.lang.Integer,FindOverridableMethodCall.CallerInfo> refCallerReadObjects
-
bugAccumulator
private final BugAccumulator bugAccumulator
-
-
Constructor Detail
-
FindOverridableMethodCall
public FindOverridableMethodCall(BugReporter bugReporter)
-
-
Method Detail
-
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:
OpcodeStackDetector.beforeOpcode(int)
-
isCurrentMethodReadObject
private boolean isCurrentMethodReadObject()
-
checkDirectCase
boolean checkDirectCase(XMethod caller, XMethod method, java.lang.String message, int priority, SourceLineAnnotation sourceLine)
-
shouldIgnoreCallInReadObject
private boolean shouldIgnoreCallInReadObject(XMethod method)
-
reportIfOverridableCallInReadObject
private boolean reportIfOverridableCallInReadObject(XMethod caller, XMethod method, SourceLineAnnotation sourceLine)
-
checkAndRecordCallFromConstructor
private boolean checkAndRecordCallFromConstructor(XMethod constructor, XMethod callee, SourceLineAnnotation sourceLine)
-
checkAndRecordCallFromClone
private boolean checkAndRecordCallFromClone(XMethod clone, XMethod callee, SourceLineAnnotation sourceLine)
-
checkAndRecordCallFromReadObject
private void checkAndRecordCallFromReadObject(XMethod readObject, XMethod callee, SourceLineAnnotation sourceLine)
-
checkAndRecordCallToOverridable
private boolean checkAndRecordCallToOverridable(XMethod caller, XMethod overridable)
-
checkAndRecordCallBetweenNonOverridableMethods
private boolean checkAndRecordCallBetweenNonOverridableMethods(XMethod caller, XMethod callee)
-
getIndirectlyCalledOverridable
private XMethod getIndirectlyCalledOverridable(XMethod caller, java.util.Set<XMethod> visited)
-
getIndirectCallerConstructor
private FindOverridableMethodCall.CallerInfo getIndirectCallerConstructor(XMethod callee)
-
getIndirectCallerClone
private FindOverridableMethodCall.CallerInfo getIndirectCallerClone(XMethod callee)
-
getIndirectCallerReadObject
private FindOverridableMethodCall.CallerInfo getIndirectCallerReadObject(XMethod callee)
-
getIndirectCallerSpecial
private FindOverridableMethodCall.CallerInfo getIndirectCallerSpecial(XMethod callee, java.util.Map<XMethod,FindOverridableMethodCall.CallerInfo> map)
-
getIndirectCallerSpecial
private FindOverridableMethodCall.CallerInfo getIndirectCallerSpecial(XMethod callee, java.util.Map<XMethod,FindOverridableMethodCall.CallerInfo> map, java.util.Set<XMethod> visited)
-
-