edu.umd.cs.findbugs.ba
public abstract class Frame<ValueType> extends Object
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.
See Also: FrameDataflowAnalysis
Constructor Summary | |
---|---|
Frame(int numLocals)
Constructor. |
Method Summary | |
---|---|
Collection<ValueType> | allSlots() |
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 | getArgument(InvokeInstruction ins, ConstantPoolGen cpg, int i, SignatureParser sigParser)
Get the ith argument passed to given method invocation.
|
BitSet | getArgumentSet(InvokeInstruction invokeInstruction, ConstantPoolGen cpg, DataflowValueChooser<ValueType> chooser)
Get set of arguments passed to a method invocation which match given
predicate.
|
int | getArgumentSlot(int i, int numArguments)
Get the stack slot that will contain given method argument. |
ValueType | getInstance(Instruction ins, ConstantPoolGen cpg)
Get the value corresponding to the object instance used in the given
instruction. |
int | getInstanceSlot(Instruction ins, ConstantPoolGen cpg)
Get the slot the object instance referred to by given instruction is
located in.
|
int | getInstanceStackLocation(Instruction ins, ConstantPoolGen cpg)
Get the stack location (counting down from top of stack, starting at 0)
containing the object instance referred to by given instruction. |
int | getLastUpdateTimestamp() |
int | getNumArguments(InvokeInstruction ins, ConstantPoolGen cpg)
Get the number of arguments passed to given method invocation.
|
int | getNumArgumentsIncludingObjectInstance(InvokeInstruction ins, ConstantPoolGen cpg)
Get the number of arguments passed to given method invocation, including
the object instance if the call is to an instance method.
|
int | getNumLocals()
Get the number of locals. |
int | getNumSlots()
Get the number of slots (locals plus stack values). |
ValueType | getOperand(StackConsumer ins, ConstantPoolGen cpg, int i)
Get the ith operand used by given instruction.
|
int | getStackDepth()
Get the depth of the Java operand stack. |
int | getStackLocation(int loc)
Get a the location in the frame of a value on the 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 | setLastUpdateTimestamp(int lastUpdateTimestamp) |
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.
|
protected String | valueToString(ValueType value)
Subclasses may override this if they want to do something special to
convert Value objects to Strings. |
Parameters: numLocals number of local variable slots in the method
Returns: an unmodifiable Collection of the local variable and operand stack slots
Parameters: other the Frame to make this object the same as
Parameters: ins the method invocation instruction cpg the ConstantPoolGen for the class containing the method i index of the argument; 0 for the first argument, etc.
Returns: the ith argument
Throws: DataflowAnalysisException
Parameters: invokeInstruction the InvokeInstruction cpg the ConstantPoolGen chooser predicate to choose which argument values should be in the returned set
Returns: BitSet specifying which arguments match the predicate, indexed by argument number (starting from 0)
Throws: DataflowAnalysisException
Parameters: i the argument index: 0 for first arg, etc. numArguments total number of arguments to the called method
Returns: slot containing the argument value
Parameters: ins the instruction cpg the ConstantPoolGen for the method
Parameters: ins the Instruction cpg the ConstantPoolGen for the method
Returns: stack slot the object instance is in
Throws: DataflowAnalysisException
The value returned may be passed to getStackValue(int).
Parameters: ins the Instruction cpg the ConstantPoolGen for the method
Returns: stack location (counting down from top of stack, starting at 0) containing the object instance
Throws: DataflowAnalysisException
Returns: Returns the lastUpdateTimestamp.
Parameters: ins the method invocation instruction cpg the ConstantPoolGen for the class containing the method
Returns: number of arguments; note that this excludes the object instance for instance methods
Throws: DataflowAnalysisException
Parameters: ins the method invocation instruction cpg the ConstantPoolGen for the class containing the method
Returns: number of arguments, including object instance if appropriate
Throws: DataflowAnalysisException
Parameters: ins the instruction, which must be a StackConsumer cpg the ConstantPoolGen i index of operand to get: 0 for the first operand, etc.
Returns: the ith operand used by the given instruction
Throws: DataflowAnalysisException
Parameters: loc the stack location, counting downwards from the top (location 0)
Parameters: loc the stack location, counting downwards from the top (location 0)
Throws: DataflowAnalysisException if the Java operand stack is empty
Parameters: n the slot to get the value of
Returns: the value in the slot
Returns: the value that was popped
Throws: DataflowAnalysisException if the Java operand stack is empty
Parameters: value the ValueType to push
Parameters: other the other Frame
Returns: true if the frames are the same, false otherwise
Parameters: lastUpdateTimestamp The lastUpdateTimestamp to set.
Parameters: n the slot in which to set a new value value the value to set