Package edu.umd.cs.findbugs.detect
Class FindReturnRef
- java.lang.Object
-
- All Implemented Interfaces:
Detector
,Priorities
,org.apache.bcel.classfile.Visitor
public class FindReturnRef extends OpcodeStackDetector
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
FindReturnRef.CaptureKind
-
Nested classes/interfaces inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
OpcodeStackDetector.WithCustomJumpInfo
-
-
Field Summary
-
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 FindReturnRef(BugReporter bugReporter)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
afterOpcode(int seen)
Note that stack might be TOP when this method is called.private void
collectData(org.apache.bcel.classfile.JavaClass javaClass, org.apache.bcel.classfile.Method m)
private FindReturnRef.CaptureKind
getPotentialCapture(OpcodeStack.Item top)
private boolean
isFieldOf(XField field, ClassDescriptor clazz)
private boolean
isNestedField(XField field)
private boolean
nonPublicFieldOperand()
void
sawOpcode(int seen)
By default, this method will not be called when stack is TOP.void
visit(org.apache.bcel.classfile.JavaClass obj)
void
visit(org.apache.bcel.classfile.Method obj)
void
visitAfter(org.apache.bcel.classfile.JavaClass obj)
-
Methods inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
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, 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, 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
-
check
private boolean check
-
staticMethod
private boolean staticMethod
-
parameterCount
private int parameterCount
-
fieldUnderClone
private XField fieldUnderClone
-
paramUnderClone
private OpcodeStack.Item paramUnderClone
-
fieldCloneUnderCast
private XField fieldCloneUnderCast
-
paramCloneUnderCast
private OpcodeStack.Item paramCloneUnderCast
-
bufferFieldUnderDuplication
private XField bufferFieldUnderDuplication
-
bufferParamUnderDuplication
private OpcodeStack.Item bufferParamUnderDuplication
-
fieldUnderWrapToBuffer
private XField fieldUnderWrapToBuffer
-
paramUnderWrapToBuffer
private OpcodeStack.Item paramUnderWrapToBuffer
-
bufferFieldDuplicates
private final java.util.Map<OpcodeStack.Item,XField> bufferFieldDuplicates
-
bufferParamDuplicates
private final java.util.Map<OpcodeStack.Item,OpcodeStack.Item> bufferParamDuplicates
-
arrayFieldsWrappedToBuffers
private final java.util.Map<OpcodeStack.Item,XField> arrayFieldsWrappedToBuffers
-
arrayParamsWrappedToBuffers
private final java.util.Map<OpcodeStack.Item,OpcodeStack.Item> arrayParamsWrappedToBuffers
-
arrayFieldClones
private final java.util.Map<OpcodeStack.Item,XField> arrayFieldClones
-
arrayParamClones
private final java.util.Map<OpcodeStack.Item,OpcodeStack.Item> arrayParamClones
-
fieldValues
private final java.util.Map<XField,java.util.List<OpcodeStack.Item>> fieldValues
-
bugAccumulator
private final BugAccumulator bugAccumulator
-
BUFFER_CLASS_PATTERN
private static final java.util.regex.Pattern BUFFER_CLASS_PATTERN
-
DUPLICATE_METHODS_SIGNATURE_PATTERN
private static final java.util.regex.Pattern DUPLICATE_METHODS_SIGNATURE_PATTERN
-
WRAP_METHOD_SIGNATURE_PATTERN
private static final java.util.regex.Pattern WRAP_METHOD_SIGNATURE_PATTERN
-
-
Constructor Detail
-
FindReturnRef
public FindReturnRef(BugReporter bugReporter)
-
-
Method Detail
-
visitAfter
public void visitAfter(org.apache.bcel.classfile.JavaClass obj)
- Overrides:
visitAfter
in classPreorderVisitor
-
visit
public void visit(org.apache.bcel.classfile.JavaClass obj)
- Overrides:
visit
in classBetterVisitor
-
collectData
private void collectData(org.apache.bcel.classfile.JavaClass javaClass, org.apache.bcel.classfile.Method m)
-
visit
public void visit(org.apache.bcel.classfile.Method obj)
- Overrides:
visit
in classBetterVisitor
-
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)
-
isNestedField
private boolean isNestedField(XField field)
-
afterOpcode
public void afterOpcode(int seen)
Description copied from class:OpcodeStackDetector
Note that stack might be TOP when this method is called.
- Overrides:
afterOpcode
in classOpcodeStackDetector
- See Also:
OpcodeStackDetector.sawOpcode(int)
-
nonPublicFieldOperand
private boolean nonPublicFieldOperand()
-
getPotentialCapture
private FindReturnRef.CaptureKind getPotentialCapture(OpcodeStack.Item top)
-
isFieldOf
private boolean isFieldOf(XField field, ClassDescriptor clazz)
-
-