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 BugAccumulatorprivate final Map<XMethod, FindOverridableMethodCall.CallerInfo> private final Map<XMethod, FindOverridableMethodCall.CallerInfo> private final Map<XMethod, FindOverridableMethodCall.CallerInfo> 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
stackFields 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 TypeMethodDescriptionprivate booleancheckAndRecordCallBetweenNonOverridableMethods(XMethod caller, XMethod callee) private booleancheckAndRecordCallFromClone(XMethod clone, XMethod callee, SourceLineAnnotation sourceLine) private booleancheckAndRecordCallFromConstructor(XMethod constructor, XMethod callee, SourceLineAnnotation sourceLine) private voidcheckAndRecordCallFromReadObject(XMethod readObject, XMethod callee, SourceLineAnnotation sourceLine) private booleancheckAndRecordCallToOverridable(XMethod caller, XMethod overridable) (package private) booleancheckDirectCase(XMethod caller, XMethod method, String message, 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 XMethodprivate XMethodgetIndirectlyCalledOverridable(XMethod caller, Set<XMethod> visited) private booleanprivate booleanreportIfOverridableCallInReadObject(XMethod caller, XMethod method, SourceLineAnnotation sourceLine) voidsawOpcode(int seen) By default, this method will not be called when stack is TOP.private booleanshouldIgnoreCallInReadObject(XMethod method) private XMethodsuperClone(XClass clazz) voidvisit(org.apache.bcel.classfile.JavaClass obj) voidvisitAfter(org.apache.bcel.classfile.JavaClass obj) voidvisitBootstrapMethods(org.apache.bcel.classfile.BootstrapMethods obj) Methods inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
afterOpcode, beforeOpcode, getStack, isUsingCustomUserValue, visitCodeMethods 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
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, visitAnnotationDefault, visitAnnotationEntry, 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, 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
-
callerConstructors
-
callerClones
-
callerReadObjects
-
callsToOverridable
-
callerToCalleeMap
-
calleeToCallerMap
-
refCallerConstructors
-
refCallerClones
-
refCallerReadObjects
-
refCalleeToCallerMap
-
bugAccumulator
-
-
Constructor Details
-
FindOverridableMethodCall
-
-
Method Details
-
visit
public void visit(org.apache.bcel.classfile.JavaClass obj) - Overrides:
visitin classBetterVisitor
-
visitBootstrapMethods
public void visitBootstrapMethods(org.apache.bcel.classfile.BootstrapMethods obj) - Specified by:
visitBootstrapMethodsin interfaceorg.apache.bcel.classfile.Visitor- Overrides:
visitBootstrapMethodsin classPreorderVisitor
-
visitAfter
public void visitAfter(org.apache.bcel.classfile.JavaClass obj) - Overrides:
visitAfterin classPreorderVisitor
-
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:
-
isCurrentMethodReadObject
private boolean isCurrentMethodReadObject() -
superClone
-
checkDirectCase
boolean checkDirectCase(XMethod caller, XMethod method, String message, int priority, SourceLineAnnotation sourceLine) -
shouldIgnoreCallInReadObject
-
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
-
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)
-