|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectedu.umd.cs.findbugs.ba.Frame<ValueType>
public abstract class Frame<ValueType>
Generic class for representing a Java stack frame as a dataflow value.
A frame consists of "slots", which represent the local variables
and values on the Java operand stack.
Slots 0 .. getNumLocals() - 1
represent the local variables.
Slots getNumLocals()
.. getNumSlots() - 1
represent the Java operand stack.
Frame is parametized by "ValueType", which is the type of value to be stored in the Frame's slots. This type must form a lattice, according to the abstract mergeValues() operation in the corresponding analysis class (which should be derived from FrameDataflowAnalysis). When a Frame is constructed, all of its slots will contain null. The analysis is responsible for initializing created Frames with default values at the appropriate time. Typically, only initEntryFact() will need to do this.
A Frame may have the special "TOP" value. Such frames serve as the identity element for the meet operation operation.
A Frame may have the special "BOTTOM" value. The result of merging any frame with BOTTOM is BOTTOM.
FrameDataflowAnalysis
Field Summary | |
---|---|
private static int |
DEFAULT_STACK_CAPACITY
Default number of stack slots to preallocate space for. |
private boolean |
isBottom
Flag marking this frame as a special "BOTTOM" value. |
private boolean |
isTop
Flag marking this frame as a special "TOP" value. |
private int |
numLocals
Number of local variables in the method. |
private java.util.ArrayList<ValueType> |
slotList
Array storing the values of local variables and operand stack slots. |
private static boolean |
STACK_ONLY
|
Fields inherited from interface edu.umd.cs.findbugs.ba.Debug |
---|
CHECK_ASSERTIONS, VERIFY_INTEGRITY |
Constructor Summary | |
---|---|
Frame(int numLocals)
Constructor. |
Method Summary | |
---|---|
void |
clearStack()
Clear the Java operand stack. |
void |
copyFrom(Frame<ValueType> other)
Make this Frame exactly the same as the one given as a parameter. |
ValueType |
getInstance(org.apache.bcel.generic.Instruction ins,
org.apache.bcel.generic.ConstantPoolGen cpg)
Get the value corresponding to the object instance used in the given instruction. |
int |
getNumLocals()
Get the number of locals. |
int |
getNumSlots()
Get the number of slots (locals plus stack values). |
int |
getStackDepth()
Get the depth of the Java operand stack. |
ValueType |
getStackValue(int loc)
Get a value on the operand stack. |
void |
getTopStackWords(ValueType[] valueList)
Get the values on the top of the Java operand stack. |
ValueType |
getTopValue()
Get the value on the top of the Java operand stack. |
ValueType |
getValue(int n)
Get the value at the nth slot. |
boolean |
isBottom()
Return whether or not this object is the special "BOTTOM" value for Frames. |
boolean |
isTop()
Return whether or not this object the special "TOP" value for Frames. |
boolean |
isValid()
Is the frame valid (meaning it is not TOP or BOTTOM)? |
ValueType |
popValue()
Pop a value off of the Java operand stack. |
void |
pushValue(ValueType value)
Push a value onto the Java operand stack. |
boolean |
sameAs(Frame<ValueType> other)
Return true if this stack frame is the same as the one given as a parameter. |
void |
setBottom()
Make this Frame the special "BOTTOM" value. |
void |
setTop()
Make this frame the special "TOP" value. |
void |
setValid()
Set the Frame to be valid (neither TOP nor BOTTOM). |
void |
setValue(int n,
ValueType value)
Set the value at the nth slot. |
java.lang.String |
toString()
Convert to string. |
protected java.lang.String |
valueToString(ValueType value)
Subclasses may override this if they want to do something special to convert Value objects to Strings. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
private int numLocals
private java.util.ArrayList<ValueType> slotList
private boolean isTop
private boolean isBottom
private static final int DEFAULT_STACK_CAPACITY
private static final boolean STACK_ONLY
Constructor Detail |
---|
public Frame(int numLocals)
numLocals
- number of local variable slots in the methodMethod Detail |
---|
public boolean isTop()
public void setTop()
public boolean isBottom()
public void setBottom()
public void setValid()
public boolean isValid()
public void pushValue(ValueType value)
value
- the ValueType to pushpublic ValueType popValue() throws DataflowAnalysisException
DataflowAnalysisException
- if the Java operand stack is emptypublic ValueType getTopValue() throws DataflowAnalysisException
DataflowAnalysisException
- if the Java operand stack is emptypublic void getTopStackWords(ValueType[] valueList) throws DataflowAnalysisException
DataflowAnalysisException
public ValueType getStackValue(int loc) throws DataflowAnalysisException
loc
- the stack location, counting downwards from the
top (location 0)
DataflowAnalysisException
public ValueType getInstance(org.apache.bcel.generic.Instruction ins, org.apache.bcel.generic.ConstantPoolGen cpg) throws DataflowAnalysisException
ins
- the instructioncpg
- the ConstantPoolGen for the method
DataflowAnalysisException
public void clearStack()
public int getStackDepth()
public int getNumLocals()
public int getNumSlots()
public ValueType getValue(int n)
n
- the slot to get the value of
public void setValue(int n, ValueType value)
n
- the slot in which to set a new valuevalue
- the value to setpublic boolean sameAs(Frame<ValueType> other)
other
- the other Frame
public void copyFrom(Frame<ValueType> other)
other
- the Frame to make this object the same aspublic java.lang.String toString()
toString
in class java.lang.Object
protected java.lang.String valueToString(ValueType value)
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |