edu.umd.cs.findbugs.ba

Class FrameDataflowAnalysis<ValueType,FrameType>

public abstract class FrameDataflowAnalysis<ValueType,FrameType extends Frame<ValueType>> extends ForwardDataflowAnalysis<FrameType>

A convenient base class for dataflow analysis classes which use Frames as values.

Author: David Hovemeyer

See Also: Frame DataflowAnalysis

Constructor Summary
FrameDataflowAnalysis(DepthFirstSearch dfs)
Method Summary
voidcopy(FrameType source, FrameType dest)
voidinitResultFact(FrameType result)
booleanisTop(FrameType fact)
voidmakeFactTop(FrameType fact)
protected voidmergeInto(FrameType other, FrameType result)
Merge one frame into another.
protected abstract voidmergeValues(FrameType otherFrame, FrameType resultFrame, int slot)
Merge the values contained in a given slot of two Frames.
protected FrameTypemodifyFrame(FrameType orig, FrameType copy)
Create a modifiable copy of a frame.
booleansame(FrameType fact1, FrameType fact2)

Constructor Detail

FrameDataflowAnalysis

public FrameDataflowAnalysis(DepthFirstSearch dfs)

Method Detail

copy

public void copy(FrameType source, FrameType dest)

initResultFact

public void initResultFact(FrameType result)

isTop

public boolean isTop(FrameType fact)

makeFactTop

public void makeFactTop(FrameType fact)

mergeInto

protected void mergeInto(FrameType other, FrameType result)
Merge one frame into another.

Parameters: other the frame to merge with the result result the result frame, which is modified to be the merge of the two frames

mergeValues

protected abstract void mergeValues(FrameType otherFrame, FrameType resultFrame, int slot)
Merge the values contained in a given slot of two Frames.

Parameters: otherFrame a Frame resultFrame a Frame which will contain the resulting merged value slot a slot in both frames

Throws: DataflowAnalysisException

modifyFrame

protected final FrameType modifyFrame(FrameType orig, FrameType copy)
Create a modifiable copy of a frame. This is useful for meetInto(), if the frame needs to be modified in a path-sensitive fashion. A typical usage pattern is:

 FrameType copy = null;
 if (someCondition()) {
     copy = modifyFrame(fact, copy);
     // modify copy
 }
 if (someOtherCondition()) {
     copy = modifyFrame(fact, copy);
     // modify copy
 }
 if (copy != null)
     fact = copy;
 

mergeInto(fact, result);

The advantage of using modifyFrame() is that new code can be added before or after other places where the frame is modified, and the code will remain correct.

Parameters: orig the original frame copy the modifiable copy (returned by a previous call to modifyFrame()), or null if this is the first time modifyFrame() is being called

Returns: a modifiable copy of fact

same

public boolean same(FrameType fact1, FrameType fact2)
FindBugs™ is licenced under the LGPL. Copyright © 2006 University of Maryland.