Package edu.umd.cs.findbugs.detect
Class FindRefComparison
java.lang.Object
edu.umd.cs.findbugs.detect.FindRefComparison
- All Implemented Interfaces:
ExtendedTypes
,Detector
,Priorities
Find suspicious reference comparisons. This includes:
- Strings and other java.lang objects compared by reference equality
- Calls to equals(Object) where the argument is a different type than the receiver object
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class
Type representing a dynamically created String.static class
static class
static class
Type representing a String passed as a parameter.private static class
private static class
Type merger to use the extended String types.private static final class
static class
Type representing a static String.private static interface
private static class
A BugInstance and its WarningPropertySet. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final int
private final BugAccumulator
private final BugReporter
private ClassContext
private static final boolean
Classes that are suspicious if compared by reference.private static final org.apache.bcel.generic.Type
private static final org.apache.bcel.generic.Type
private static final BitSet
Set of opcodes that invoke instance methods on an object.private static final org.apache.bcel.generic.Type
private static final BitSet
Set of bytecodes using for prescreening.private static final boolean
private static final org.apache.bcel.generic.Type
private static final String
private static final byte
private static final byte
private static final byte
private final boolean
Fields inherited from interface edu.umd.cs.findbugs.ba.type.ExtendedTypes
T_AVAIL_TYPE, T_BOTTOM, T_DOUBLE_EXTRA, T_EXCEPTION, T_LONG_EXTRA, T_NULL, T_TOP
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 TypeMethodDescription(package private) void
addEqualsCheck
(String type, int pc) private void
analyzeMethod
(ClassContext classContext, org.apache.bcel.classfile.Method method) private void
checkEqualsComparison
(Location location, org.apache.bcel.classfile.JavaClass jclass, org.apache.bcel.classfile.Method method, org.apache.bcel.generic.MethodGen methodGen, org.apache.bcel.generic.ConstantPoolGen cpg, TypeDataflow typeDataflow) private boolean
checkForWeirdEquals
(String lhsSig, String rhsSig, Set<XMethod> targets) private void
checkRefComparison
(Location location, org.apache.bcel.classfile.JavaClass jclass, org.apache.bcel.classfile.Method method, org.apache.bcel.generic.MethodGen methodGen, FindRefComparison.RefComparisonTypeFrameModelingVisitor visitor, TypeDataflow typeDataflow, List<FindRefComparison.WarningWithProperties> stringComparisonList, List<FindRefComparison.WarningWithProperties> refComparisonList) private void
decorateWarnings
(LinkedList<FindRefComparison.WarningWithProperties> stringComparisonList, FindRefComparison.WarningDecorator warningDecorator) getInvokedMethod
(org.apache.bcel.generic.ConstantPoolGen cpg, org.apache.bcel.generic.InvokeInstruction inv) getMethodCalledAnnotation
(org.apache.bcel.generic.ConstantPoolGen cpg, org.apache.bcel.generic.InvokeInstruction inv) private void
handleStringComparison
(org.apache.bcel.classfile.JavaClass jclass, org.apache.bcel.classfile.Method method, org.apache.bcel.generic.MethodGen methodGen, FindRefComparison.RefComparisonTypeFrameModelingVisitor visitor, List<FindRefComparison.WarningWithProperties> stringComparisonList, Location location, org.apache.bcel.generic.Type lhsType, org.apache.bcel.generic.Type rhsType) private void
handleSuspiciousRefComparison
(org.apache.bcel.classfile.JavaClass jclass, org.apache.bcel.classfile.Method method, org.apache.bcel.generic.MethodGen methodGen, List<FindRefComparison.WarningWithProperties> refComparisonList, Location location, String lhs, org.apache.bcel.generic.ReferenceType lhsType, org.apache.bcel.generic.ReferenceType rhsType) private void
inspectLocation
(org.apache.bcel.classfile.JavaClass jclass, org.apache.bcel.generic.ConstantPoolGen cpg, org.apache.bcel.classfile.Method method, org.apache.bcel.generic.MethodGen methodGen, LinkedList<FindRefComparison.WarningWithProperties> refComparisonList, LinkedList<FindRefComparison.WarningWithProperties> stringComparisonList, FindRefComparison.RefComparisonTypeFrameModelingVisitor visitor, TypeDataflow typeDataflow, Location location) (package private) boolean
void
report()
This method is called after all classes to be visited.private void
reportBest
(ClassContext classContext, org.apache.bcel.classfile.Method method, LinkedList<FindRefComparison.WarningWithProperties> warningList, boolean relaxed) void
visitClassContext
(ClassContext classContext) Visit the ClassContext for a class which should be analyzed for instances of bug patterns.
-
Field Details
-
DEBUG
private static final boolean DEBUG -
REPORT_ALL_REF_COMPARISONS
private static final boolean REPORT_ALL_REF_COMPARISONS- See Also:
-
BASE_ES_PRIORITY
private static final int BASE_ES_PRIORITY -
DEFAULT_SUSPICIOUS_SET
Classes that are suspicious if compared by reference. -
invokeInstanceSet
Set of opcodes that invoke instance methods on an object. -
prescreenSet
Set of bytecodes using for prescreening. -
T_DYNAMIC_STRING
private static final byte T_DYNAMIC_STRING- See Also:
-
T_STATIC_STRING
private static final byte T_STATIC_STRING- See Also:
-
T_PARAMETER_STRING
private static final byte T_PARAMETER_STRING- See Also:
-
STRING_SIGNATURE
- See Also:
-
dynamicStringTypeInstance
private static final org.apache.bcel.generic.Type dynamicStringTypeInstance -
staticStringTypeInstance
private static final org.apache.bcel.generic.Type staticStringTypeInstance -
emptyStringTypeInstance
private static final org.apache.bcel.generic.Type emptyStringTypeInstance -
parameterStringTypeInstance
private static final org.apache.bcel.generic.Type parameterStringTypeInstance -
bugReporter
-
bugAccumulator
-
classContext
-
suspiciousSet
-
testingEnabled
private final boolean testingEnabled -
comparedForEqualityInThisMethod
-
-
Constructor Details
-
FindRefComparison
-
-
Method Details
-
visitClassContext
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
- Parameters:
classContext
- the ClassContext
-
analyzeMethod
private void analyzeMethod(ClassContext classContext, org.apache.bcel.classfile.Method method) throws CFGBuilderException, DataflowAnalysisException -
mightBeLaterCheckedUsingEquals
-
inspectLocation
private void inspectLocation(org.apache.bcel.classfile.JavaClass jclass, org.apache.bcel.generic.ConstantPoolGen cpg, org.apache.bcel.classfile.Method method, org.apache.bcel.generic.MethodGen methodGen, LinkedList<FindRefComparison.WarningWithProperties> refComparisonList, LinkedList<FindRefComparison.WarningWithProperties> stringComparisonList, FindRefComparison.RefComparisonTypeFrameModelingVisitor visitor, TypeDataflow typeDataflow, Location location) throws DataflowAnalysisException - Throws:
DataflowAnalysisException
-
decorateWarnings
private void decorateWarnings(LinkedList<FindRefComparison.WarningWithProperties> stringComparisonList, FindRefComparison.WarningDecorator warningDecorator) -
reportBest
private void reportBest(ClassContext classContext, org.apache.bcel.classfile.Method method, LinkedList<FindRefComparison.WarningWithProperties> warningList, boolean relaxed) -
checkRefComparison
private void checkRefComparison(Location location, org.apache.bcel.classfile.JavaClass jclass, org.apache.bcel.classfile.Method method, org.apache.bcel.generic.MethodGen methodGen, FindRefComparison.RefComparisonTypeFrameModelingVisitor visitor, TypeDataflow typeDataflow, List<FindRefComparison.WarningWithProperties> stringComparisonList, List<FindRefComparison.WarningWithProperties> refComparisonList) throws DataflowAnalysisException - Throws:
DataflowAnalysisException
-
handleStringComparison
private void handleStringComparison(org.apache.bcel.classfile.JavaClass jclass, org.apache.bcel.classfile.Method method, org.apache.bcel.generic.MethodGen methodGen, FindRefComparison.RefComparisonTypeFrameModelingVisitor visitor, List<FindRefComparison.WarningWithProperties> stringComparisonList, Location location, org.apache.bcel.generic.Type lhsType, org.apache.bcel.generic.Type rhsType) -
handleSuspiciousRefComparison
private void handleSuspiciousRefComparison(org.apache.bcel.classfile.JavaClass jclass, org.apache.bcel.classfile.Method method, org.apache.bcel.generic.MethodGen methodGen, List<FindRefComparison.WarningWithProperties> refComparisonList, Location location, String lhs, org.apache.bcel.generic.ReferenceType lhsType, org.apache.bcel.generic.ReferenceType rhsType) -
addEqualsCheck
-
checkEqualsComparison
private void checkEqualsComparison(Location location, org.apache.bcel.classfile.JavaClass jclass, org.apache.bcel.classfile.Method method, org.apache.bcel.generic.MethodGen methodGen, org.apache.bcel.generic.ConstantPoolGen cpg, TypeDataflow typeDataflow) throws DataflowAnalysisException - Throws:
DataflowAnalysisException
-
getMethodCalledAnnotation
@CheckForNull public MethodAnnotation getMethodCalledAnnotation(org.apache.bcel.generic.ConstantPoolGen cpg, org.apache.bcel.generic.InvokeInstruction inv) -
getInvokedMethod
public MethodDescriptor getInvokedMethod(org.apache.bcel.generic.ConstantPoolGen cpg, org.apache.bcel.generic.InvokeInstruction inv) -
checkForWeirdEquals
-
report
public void report()Description copied from interface:Detector
This method is called after all classes to be visited. It should be used by any detectors which accumulate information over all visited classes to generate results.
-