Package edu.umd.cs.findbugs.ba.npe
Class IsNullValueAnalysis
java.lang.Object
edu.umd.cs.findbugs.ba.BasicAbstractDataflowAnalysis<Fact>
edu.umd.cs.findbugs.ba.AbstractDataflowAnalysis<Fact>
edu.umd.cs.findbugs.ba.ForwardDataflowAnalysis<FrameType>
edu.umd.cs.findbugs.ba.FrameDataflowAnalysis<IsNullValue,IsNullValueFrame>
edu.umd.cs.findbugs.ba.npe.IsNullValueAnalysis
- All Implemented Interfaces:
DataflowAnalysis<IsNullValueFrame>
,EdgeTypes
,IsNullValueAnalysisFeatures
public class IsNullValueAnalysis
extends FrameDataflowAnalysis<IsNullValue,IsNullValueFrame>
implements EdgeTypes, IsNullValueAnalysisFeatures
A dataflow analysis to detect potential null pointer dereferences.
- Author:
- David Hovemeyer
- See Also:
-
Nested Class Summary
Nested Classes -
Field Summary
Fields inherited from interface edu.umd.cs.findbugs.ba.EdgeTypes
BACKEDGE_SOURCE_EDGE, BACKEDGE_TARGET_EDGE, CHECKED_EXCEPTIONS_FLAG, EXIT_EDGE, EXPLICIT_EXCEPTIONS_FLAG, FALL_THROUGH_EDGE, GOTO_EDGE, HANDLED_EXCEPTION_EDGE, IFCMP_EDGE, JSR_EDGE, RET_EDGE, RETURN_EDGE, START_EDGE, SWITCH_DEFAULT_EDGE, SWITCH_EDGE, UNHANDLED_EXCEPTION_EDGE, UNKNOWN_EDGE
Fields inherited from interface edu.umd.cs.findbugs.ba.npe.IsNullValueAnalysisFeatures
NCP_EXTRA_BRANCH, NO_SPLIT_DOWNGRADE_NSP, NO_SWITCH_DEFAULT_AS_EXCEPTION, UNKNOWN_VALUES_ARE_NSP, USE_TYPE_QUALIFIERS
-
Constructor Summary
ConstructorsConstructorDescriptionIsNullValueAnalysis
(MethodDescriptor descriptor, org.apache.bcel.generic.MethodGen methodGen, CFG cfg, ValueNumberDataflow vnaDataflow, TypeDataflow typeDataflow, DepthFirstSearch dfs, AssertionMethods assertionMethods) -
Method Summary
Modifier and TypeMethodDescriptionvoid
addLocationWhereValueBecomesNull
(LocationWhereValueBecomesNull locationWhereValueBecomesNull) Create empty (uninitialized) dataflow facts for one program point.void
endTransfer
(BasicBlock basicBlock, org.apache.bcel.generic.InstructionHandle end, IsNullValueFrame result) getFactAtMidEdge
(Edge edge) getForPointerEqualityCheck
(CFG cfg, ValueNumberDataflow vna) void
initEntryFact
(IsNullValueFrame result) Initialize the "entry" fact for the graph.void
meetInto
(IsNullValueFrame fact, Edge edge, IsNullValueFrame result) Meet a dataflow fact associated with an incoming edge into another fact.void
meetInto
(IsNullValueFrame fact, Edge edge, IsNullValueFrame result, boolean propagatePhiNodeInformation) protected void
mergeInto
(IsNullValueFrame other, IsNullValueFrame result) Merge one frame into another.protected void
mergeValues
(IsNullValueFrame otherFrame, IsNullValueFrame resultFrame, int slot) Merge the values contained in a given slot of two Frames.void
setClassAndMethod
(JavaClassAndMethod classAndMethod) void
Called before beginning an iteration of analysis.void
void
transfer
(BasicBlock basicBlock, org.apache.bcel.generic.InstructionHandle end, IsNullValueFrame start, IsNullValueFrame result) Transfer function for the analysis.void
transferInstruction
(org.apache.bcel.generic.InstructionHandle handle, BasicBlock basicBlock, IsNullValueFrame fact) Transfer function for a single instruction.Methods inherited from class edu.umd.cs.findbugs.ba.FrameDataflowAnalysis
copy, getFactAtPC, getFactBeforeExceptionCheck, getLastUpdateTimestamp, isFactValid, isTop, makeFactTop, modifyFrame, same, setLastUpdateTimestamp
Methods inherited from class edu.umd.cs.findbugs.ba.ForwardDataflowAnalysis
getBlockOrder, getDepthFirstSearch, isForwards
Methods inherited from class edu.umd.cs.findbugs.ba.AbstractDataflowAnalysis
getFactAfterLocation, getFactAtLocation
Methods inherited from class edu.umd.cs.findbugs.ba.BasicAbstractDataflowAnalysis
edgeTransfer, factToString, finishIteration, getFactOnEdge, getResultFact, getStartFact, resultFactIterator
-
Constructor Details
-
IsNullValueAnalysis
public IsNullValueAnalysis(MethodDescriptor descriptor, org.apache.bcel.generic.MethodGen methodGen, CFG cfg, ValueNumberDataflow vnaDataflow, TypeDataflow typeDataflow, DepthFirstSearch dfs, AssertionMethods assertionMethods)
-
-
Method Details
-
getForPointerEqualityCheck
@CheckForNull public static IsNullValueAnalysis.PointerEqualityCheck getForPointerEqualityCheck(CFG cfg, ValueNumberDataflow vna) -
setClassAndMethod
-
getClassAndMethod
-
createFact
Description copied from interface:DataflowAnalysis
Create empty (uninitialized) dataflow facts for one program point. A valid value will be copied into it before it is used.- Specified by:
createFact
in interfaceDataflowAnalysis<IsNullValueFrame>
-
initEntryFact
Description copied from interface:DataflowAnalysis
Initialize the "entry" fact for the graph.- Specified by:
initEntryFact
in interfaceDataflowAnalysis<IsNullValueFrame>
-
transfer
public void transfer(BasicBlock basicBlock, @CheckForNull org.apache.bcel.generic.InstructionHandle end, IsNullValueFrame start, IsNullValueFrame result) throws DataflowAnalysisException Description copied from interface:DataflowAnalysis
Transfer function for the analysis. Taking dataflow facts at start (which might be either the entry or exit of the block, depending on whether the analysis is forwards or backwards), modify result to be the facts at the other end of the block.- Specified by:
transfer
in interfaceDataflowAnalysis<IsNullValueFrame>
- Overrides:
transfer
in classAbstractDataflowAnalysis<IsNullValueFrame>
- Parameters:
basicBlock
- the basic blockend
- if nonnull, stop before considering this instruction; otherwise, consider all of the instructions in the basic blockstart
- dataflow facts at beginning of block (if forward analysis) or end of block (if backwards analysis)result
- resulting dataflow facts at other end of block- Throws:
DataflowAnalysisException
-
startTransfer
public void startTransfer() -
endTransfer
public void endTransfer(BasicBlock basicBlock, @CheckForNull org.apache.bcel.generic.InstructionHandle end, IsNullValueFrame result) throws DataflowAnalysisException - Throws:
DataflowAnalysisException
-
transferInstruction
public void transferInstruction(org.apache.bcel.generic.InstructionHandle handle, BasicBlock basicBlock, IsNullValueFrame fact) throws DataflowAnalysisException Description copied from class:AbstractDataflowAnalysis
Transfer function for a single instruction.- Specified by:
transferInstruction
in classAbstractDataflowAnalysis<IsNullValueFrame>
- Parameters:
handle
- the instructionbasicBlock
- the BasicBlock containing the instruction; needed to disambiguate instructions in inlined JSR subroutinesfact
- which should be modified based on the instruction- Throws:
DataflowAnalysisException
-
meetInto
public void meetInto(IsNullValueFrame fact, Edge edge, IsNullValueFrame result) throws DataflowAnalysisException Description copied from interface:DataflowAnalysis
Meet a dataflow fact associated with an incoming edge into another fact. This is used to determine the start fact for a basic block.- Specified by:
meetInto
in interfaceDataflowAnalysis<IsNullValueFrame>
- Parameters:
fact
- the predecessor fact (incoming edge)edge
- the edge from the predecessorresult
- the result fact- Throws:
DataflowAnalysisException
-
meetInto
public void meetInto(IsNullValueFrame fact, Edge edge, IsNullValueFrame result, boolean propagatePhiNodeInformation) throws DataflowAnalysisException - Throws:
DataflowAnalysisException
-
mergeInto
protected void mergeInto(IsNullValueFrame other, IsNullValueFrame result) throws DataflowAnalysisException Description copied from class:FrameDataflowAnalysis
Merge one frame into another.- Overrides:
mergeInto
in classFrameDataflowAnalysis<IsNullValue,
IsNullValueFrame> - Parameters:
other
- the frame to merge with the resultresult
- the result frame, which is modified to be the merge of the two frames- Throws:
DataflowAnalysisException
-
startIteration
public void startIteration()Description copied from interface:DataflowAnalysis
Called before beginning an iteration of analysis. Each iteration visits every basic block in the CFG.- Specified by:
startIteration
in interfaceDataflowAnalysis<IsNullValueFrame>
- Overrides:
startIteration
in classBasicAbstractDataflowAnalysis<IsNullValueFrame>
-
addLocationWhereValueBecomesNull
public void addLocationWhereValueBecomesNull(LocationWhereValueBecomesNull locationWhereValueBecomesNull) -
getLocationWhereValueBecomesNullSet
-
mergeValues
protected void mergeValues(IsNullValueFrame otherFrame, IsNullValueFrame resultFrame, int slot) throws DataflowAnalysisException Description copied from class:FrameDataflowAnalysis
Merge the values contained in a given slot of two Frames.- Specified by:
mergeValues
in classFrameDataflowAnalysis<IsNullValue,
IsNullValueFrame> - Parameters:
otherFrame
- a FrameresultFrame
- a Frame which will contain the resulting merged valueslot
- a slot in both frames- Throws:
DataflowAnalysisException
-
getFactAtMidEdge
- Throws:
DataflowAnalysisException
-