Class BackwardTypeQualifierDataflowAnalysis
java.lang.Object
edu.umd.cs.findbugs.ba.BasicAbstractDataflowAnalysis<TypeQualifierValueSet>
edu.umd.cs.findbugs.ba.AbstractDataflowAnalysis<TypeQualifierValueSet>
edu.umd.cs.findbugs.ba.jsr305.TypeQualifierDataflowAnalysis
edu.umd.cs.findbugs.ba.jsr305.BackwardTypeQualifierDataflowAnalysis
- All Implemented Interfaces:
DataflowAnalysis<TypeQualifierValueSet>
Backwards type qualifier dataflow analysis.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final DepthFirstSearchprivate ForwardTypeQualifierDataflowprivate static final booleanprivate final ReverseDepthFirstSearchFields inherited from class TypeQualifierDataflowAnalysis
cfg, cpg, DEBUG_VERBOSE, typeQualifierValue, vnaDataflow, xmethod -
Constructor Summary
ConstructorsConstructorDescriptionBackwardTypeQualifierDataflowAnalysis(DepthFirstSearch dfs, ReverseDepthFirstSearch rdfs, XMethod xmethod, CFG cfg, ValueNumberDataflow vnaDataflow, org.apache.bcel.generic.ConstantPoolGen cpg, TypeQualifierValue<?> typeQualifierValue) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionvoidedgeTransfer(Edge edge, TypeQualifierValueSet fact) Edge transfer function.getBlockOrder(CFG cfg1) Return the BlockOrder specifying the order in which BasicBlocks should be visited in the main dataflow loop.booleanReturns true if the analysis is forwards, false if backwards.private voidmodelArguments(Location location) private voidmodelFieldStore(Location location) private voidmodelReturn(TypeQualifierAnnotation returnValueAnnotation, Location location) protected voidpropagateAcrossPhiNode(TypeQualifierValueSet fact, ValueNumber sourceVN, ValueNumber targetVN) private voidpruneConflictingValues(TypeQualifierValueSet fact, TypeQualifierValueSet forwardFact) private voidvoidThis method must be called before the dataflow analysis is executed.voidsetForwardTypeQualifierDataflow(ForwardTypeQualifierDataflow forwardTypeQualifierDataflow) voidtransferInstruction(org.apache.bcel.generic.InstructionHandle handle, BasicBlock basicBlock, TypeQualifierValueSet fact) Transfer function for a single instruction.Methods inherited from class TypeQualifierDataflowAnalysis
copy, createFact, getSourceSinkInfoSet, initEntryFact, isFactValid, isIdentifyFunctionForTypeQualifiers, isTop, makeFactTop, meetInto, primitiveType, registerSourceSink, sameMethods inherited from class AbstractDataflowAnalysis
getFactAfterLocation, getFactAtLocation, transferMethods inherited from class BasicAbstractDataflowAnalysis
factToString, finishIteration, getFactOnEdge, getLastUpdateTimestamp, getResultFact, getStartFact, resultFactIterator, setLastUpdateTimestamp, startIteration
-
Field Details
-
PRUNE_CONFLICTING_VALUES
private static final boolean PRUNE_CONFLICTING_VALUES- See Also:
-
dfs
-
rdfs
-
forwardTypeQualifierDataflow
-
-
Constructor Details
-
BackwardTypeQualifierDataflowAnalysis
public BackwardTypeQualifierDataflowAnalysis(DepthFirstSearch dfs, ReverseDepthFirstSearch rdfs, XMethod xmethod, CFG cfg, ValueNumberDataflow vnaDataflow, org.apache.bcel.generic.ConstantPoolGen cpg, TypeQualifierValue<?> typeQualifierValue) Constructor.- Parameters:
dfs- DepthFirstSearch on the analyzed methodrdfs- ReverseDepthFirstSearch on the analyzed methodxmethod- XMethod for the analyzed methodcfg- CFG of the analyzed methodvnaDataflow- ValueNumberDataflow on the analyzed methodcpg- ConstantPoolGen of the analyzed methodtypeQualifierValue- TypeQualifierValue representing type qualifier the analysis should check
-
-
Method Details
-
setForwardTypeQualifierDataflow
public void setForwardTypeQualifierDataflow(ForwardTypeQualifierDataflow forwardTypeQualifierDataflow) - Parameters:
forwardTypeQualifierDataflow- The forwardTypeQualifierDataflow to set.
-
edgeTransfer
Description copied from interface:DataflowAnalysisEdge transfer function. Modify the given fact that is true on the (logical) edge source to modify it so that it is true at the (logical) edge target.A do-nothing implementation is legal, and appropriate for analyses where branches are not significant.
- Specified by:
edgeTransferin interfaceDataflowAnalysis<TypeQualifierValueSet>- Overrides:
edgeTransferin classTypeQualifierDataflowAnalysis- Parameters:
edge- the Edgefact- a dataflow fact- Throws:
DataflowAnalysisException
-
transferInstruction
public void transferInstruction(org.apache.bcel.generic.InstructionHandle handle, BasicBlock basicBlock, TypeQualifierValueSet fact) throws DataflowAnalysisException Description copied from class:AbstractDataflowAnalysisTransfer function for a single instruction.- Overrides:
transferInstructionin classTypeQualifierDataflowAnalysis- 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
-
pruneConflictingValues
-
getBlockOrder
Description copied from interface:DataflowAnalysisReturn the BlockOrder specifying the order in which BasicBlocks should be visited in the main dataflow loop.- Parameters:
cfg1- the CFG upon which we're performing dataflow analysis
-
isForwards
public boolean isForwards()Description copied from interface:DataflowAnalysisReturns true if the analysis is forwards, false if backwards. -
registerSourceSinkLocations
Description copied from class:TypeQualifierDataflowAnalysisThis method must be called before the dataflow analysis is executed.- Specified by:
registerSourceSinkLocationsin classTypeQualifierDataflowAnalysis- Throws:
DataflowAnalysisException
-
registerInstructionSinks
- Throws:
DataflowAnalysisException
-
modelReturn
private void modelReturn(TypeQualifierAnnotation returnValueAnnotation, Location location) throws DataflowAnalysisException - Throws:
DataflowAnalysisException
-
modelFieldStore
- Throws:
DataflowAnalysisException
-
modelArguments
- Throws:
DataflowAnalysisException
-
propagateAcrossPhiNode
protected void propagateAcrossPhiNode(TypeQualifierValueSet fact, ValueNumber sourceVN, ValueNumber targetVN) - Specified by:
propagateAcrossPhiNodein classTypeQualifierDataflowAnalysis
-