Package edu.umd.cs.findbugs.detect
Class FindNullDeref
- java.lang.Object
-
- edu.umd.cs.findbugs.detect.FindNullDeref
-
- All Implemented Interfaces:
NullDerefAndRedundantComparisonCollector
,Detector
,Priorities
,UseAnnotationDatabase
public class FindNullDeref extends java.lang.Object implements Detector, UseAnnotationDatabase, NullDerefAndRedundantComparisonCollector
A Detector to find instructions where a NullPointerException might be raised. We also look for useless reference comparisons involving null and non-null values.- Author:
- David Hovemeyer, William Pugh
- See Also:
IsNullValueAnalysis
-
-
Field Summary
Fields Modifier and Type Field Description static java.util.Set<java.lang.String>
catchTypesForNull
static boolean
DEBUG
-
Fields inherited from interface edu.umd.cs.findbugs.Priorities
EXP_PRIORITY, HIGH_PRIORITY, IGNORE_PRIORITY, LOW_PRIORITY, NORMAL_PRIORITY
-
-
Constructor Summary
Constructors Constructor Description FindNullDeref(BugReporter bugReporter)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static boolean
catchesNull(org.apache.bcel.classfile.ConstantPool constantPool, org.apache.bcel.classfile.Code code, Location location)
void
foundGuaranteedNullDeref(java.util.Set<Location> assignedNullLocationSet, java.util.Set<Location> derefLocationSet, java.util.SortedSet<Location> doomedLocations, ValueNumberDataflow vna, ValueNumber refValue, BugAnnotation variableAnnotation, NullValueUnconditionalDeref deref, boolean npeIfStatementCovered)
Subclasses should override this method to capture values assigned null (or that become null through a comparison and branch) that are guaranteed to reach a dereference (ignoring implicit exception paths).void
foundNullDeref(Location location, ValueNumber valueNumber, IsNullValue refValue, ValueNumberFrame vnaFrame)
Deprecated.void
foundNullDeref(Location location, ValueNumber valueNumber, IsNullValue refValue, ValueNumberFrame vnaFrame, boolean isConsistent)
Subclasses should override this method to capture locations where a null pointer is dereferenced.void
foundRedundantNullCheck(Location location, RedundantBranch redundantBranch)
Subclasses should override this method to capture locations where a redundant null comparison is performed.boolean
isDuplicated(WarningPropertySet<WarningProperty> propertySet, int pc, boolean isConsistent)
static boolean
isThrower(BasicBlock target)
void
report()
This method is called after all classes to be visited.boolean
skipIfInsideCatchNull()
void
visitClassContext(ClassContext classContext)
Visit the ClassContext for a class which should be analyzed for instances of bug patterns.
-
-
-
Field Detail
-
DEBUG
public static final boolean DEBUG
-
catchTypesForNull
@StaticConstant public static final java.util.Set<java.lang.String> catchTypesForNull
-
-
Constructor Detail
-
FindNullDeref
public FindNullDeref(BugReporter bugReporter)
-
-
Method Detail
-
visitClassContext
public void visitClassContext(ClassContext classContext)
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
-
catchesNull
public static boolean catchesNull(org.apache.bcel.classfile.ConstantPool constantPool, org.apache.bcel.classfile.Code code, Location location)
-
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.
-
skipIfInsideCatchNull
public boolean skipIfInsideCatchNull()
-
foundNullDeref
public void foundNullDeref(Location location, ValueNumber valueNumber, IsNullValue refValue, ValueNumberFrame vnaFrame)
Deprecated.Description copied from interface:NullDerefAndRedundantComparisonCollector
Subclasses should override this method to capture locations where a null pointer is dereferenced.- Specified by:
foundNullDeref
in interfaceNullDerefAndRedundantComparisonCollector
- Parameters:
location
- the Location of the null dereferencevalueNumber
- the ValueNumber of the possibly-null valuerefValue
- the kind of possibly-null value dereferencedvnaFrame
- The ValueNumber Frame at the point where the dereference occurred
-
foundNullDeref
public void foundNullDeref(Location location, ValueNumber valueNumber, IsNullValue refValue, ValueNumberFrame vnaFrame, boolean isConsistent)
Description copied from interface:NullDerefAndRedundantComparisonCollector
Subclasses should override this method to capture locations where a null pointer is dereferenced.- Specified by:
foundNullDeref
in interfaceNullDerefAndRedundantComparisonCollector
- Parameters:
location
- the Location of the null dereferencevalueNumber
- the ValueNumber of the possibly-null valuerefValue
- the kind of possibly-null value dereferencedvnaFrame
- The ValueNumber Frame at the point where the dereference occurredisConsistent
- true if the refValue is identical at all clones of the same instruction
-
isDuplicated
public boolean isDuplicated(WarningPropertySet<WarningProperty> propertySet, int pc, boolean isConsistent)
-
isThrower
public static boolean isThrower(BasicBlock target)
-
foundRedundantNullCheck
public void foundRedundantNullCheck(Location location, RedundantBranch redundantBranch)
Description copied from interface:NullDerefAndRedundantComparisonCollector
Subclasses should override this method to capture locations where a redundant null comparison is performed.- Specified by:
foundRedundantNullCheck
in interfaceNullDerefAndRedundantComparisonCollector
- Parameters:
location
- the Location of the redundant null checkredundantBranch
- the RedundantBranch
-
foundGuaranteedNullDeref
public void foundGuaranteedNullDeref(@Nonnull java.util.Set<Location> assignedNullLocationSet, @Nonnull java.util.Set<Location> derefLocationSet, java.util.SortedSet<Location> doomedLocations, ValueNumberDataflow vna, ValueNumber refValue, @CheckForNull BugAnnotation variableAnnotation, NullValueUnconditionalDeref deref, boolean npeIfStatementCovered)
Description copied from interface:NullDerefAndRedundantComparisonCollector
Subclasses should override this method to capture values assigned null (or that become null through a comparison and branch) that are guaranteed to reach a dereference (ignoring implicit exception paths).- Specified by:
foundGuaranteedNullDeref
in interfaceNullDerefAndRedundantComparisonCollector
- Parameters:
assignedNullLocationSet
- set of locations where the value becomes nullderefLocationSet
- set of locations where dereferences occurdoomedLocations
- locations at which the value is doomedvna
- ValueNumberDataflowrefValue
- the null valuevariableAnnotation
- TODOderef
- TODOnpeIfStatementCovered
- true if doom location is a statement
-
-