|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectedu.umd.cs.findbugs.ba.AbstractFrameModelingVisitor<ValueNumber,ValueNumberFrame>
edu.umd.cs.findbugs.ba.ValueNumberFrameModelingVisitor
public class ValueNumberFrameModelingVisitor
Visitor which models the effects of bytecode instructions on value numbers of values in the operand stack frames.
ValueNumber
,
ValueNumberFrame
,
ValueNumberAnalysis
Field Summary | |
---|---|
private ValueNumberCache |
cache
|
private java.util.HashMap<java.lang.String,ValueNumber> |
classObjectValueMap
|
private java.util.IdentityHashMap<org.apache.bcel.generic.InstructionHandle,ValueNumber> |
constantValueMap
|
private static ValueNumber[] |
EMPTY_INPUT_VALUE_LIST
|
private ValueNumberFactory |
factory
|
private org.apache.bcel.generic.InstructionHandle |
handle
|
private LoadedFieldSet |
loadedFieldSet
|
private RepositoryLookupFailureCallback |
lookupFailureCallback
|
private org.apache.bcel.generic.MethodGen |
methodGen
|
private java.util.HashMap<ValueNumber,java.lang.String> |
stringConstantMap
|
Fields inherited from interface edu.umd.cs.findbugs.ba.Debug |
---|
CHECK_ASSERTIONS, VERIFY_INTEGRITY |
Fields inherited from interface edu.umd.cs.findbugs.ba.ValueNumberAnalysisFeatures |
---|
REDUNDANT_LOAD_ELIMINATION, RLE_DEBUG |
Constructor Summary | |
---|---|
ValueNumberFrameModelingVisitor(org.apache.bcel.generic.MethodGen methodGen,
ValueNumberFactory factory,
ValueNumberCache cache,
LoadedFieldSet loadedFieldSet,
RepositoryLookupFailureCallback lookupFailureCallback)
Constructor. |
Method Summary | |
---|---|
private void |
checkConsumedAndProducedValues(org.apache.bcel.generic.Instruction ins,
ValueNumber[] consumedValueList,
ValueNumber[] producedValueList)
|
private boolean |
doForwardSubstitution()
Determine whether forward substitution should be performed for the heap location referenced by the current instruction. |
private boolean |
doRedundantLoadElimination()
Determine whether redundant load elimination should be performed for the heap location referenced by the current instruction. |
private ValueNumber |
getClassObjectValue(java.lang.String className)
Get the ValueNumber for given class's Class object. |
ValueNumber |
getDefaultValue()
Produce a "default" value. |
private ValueNumber[] |
getOutputValues(ValueNumber[] inputValueList,
int numWordsProduced)
Get output values for current instruction from the ValueNumberCache. |
private ValueNumber[] |
getOutputValues(ValueNumber[] inputValueList,
int numWordsProduced,
int flags)
|
private void |
loadInstanceField(InstanceField instanceField,
org.apache.bcel.generic.Instruction obj)
Load an instance field. |
private void |
loadStaticField(StaticField staticField,
org.apache.bcel.generic.Instruction obj)
Load a static field. |
void |
modelNormalInstruction(org.apache.bcel.generic.Instruction ins,
int numWordsConsumed,
int numWordsProduced)
This is the default instruction modeling method. |
private ValueNumber[] |
popInputValues(int numWordsConsumed)
Pop the input values for the given instruction from the current frame. |
private void |
pushOutputValues(ValueNumber[] outputValueList)
Push given output values onto the current frame. |
void |
setHandle(org.apache.bcel.generic.InstructionHandle handle)
Set the instruction handle of the instruction currently being visited. |
private void |
storeInstanceField(InstanceField instanceField,
org.apache.bcel.generic.Instruction obj,
boolean pushStoredValue)
Store an instance field. |
private void |
storeStaticField(StaticField staticField,
org.apache.bcel.generic.Instruction obj,
boolean pushStoredValue)
Store a static field. |
void |
visitGETFIELD(org.apache.bcel.generic.GETFIELD obj)
|
void |
visitGETSTATIC(org.apache.bcel.generic.GETSTATIC obj)
|
void |
visitINVOKESTATIC(org.apache.bcel.generic.INVOKESTATIC obj)
|
void |
visitLDC(org.apache.bcel.generic.LDC obj)
|
void |
visitPUTFIELD(org.apache.bcel.generic.PUTFIELD obj)
|
void |
visitPUTSTATIC(org.apache.bcel.generic.PUTSTATIC obj)
|
private static java.lang.String |
vlts(ValueNumber[] vl)
|
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
private org.apache.bcel.generic.MethodGen methodGen
private ValueNumberFactory factory
private ValueNumberCache cache
private LoadedFieldSet loadedFieldSet
private java.util.HashMap<java.lang.String,ValueNumber> classObjectValueMap
private java.util.IdentityHashMap<org.apache.bcel.generic.InstructionHandle,ValueNumber> constantValueMap
private java.util.HashMap<ValueNumber,java.lang.String> stringConstantMap
private RepositoryLookupFailureCallback lookupFailureCallback
private org.apache.bcel.generic.InstructionHandle handle
private static final ValueNumber[] EMPTY_INPUT_VALUE_LIST
Constructor Detail |
---|
public ValueNumberFrameModelingVisitor(org.apache.bcel.generic.MethodGen methodGen, ValueNumberFactory factory, ValueNumberCache cache, LoadedFieldSet loadedFieldSet, RepositoryLookupFailureCallback lookupFailureCallback)
methodGen
- the method being analyzedfactory
- factory for ValueNumbers for the methodcache
- cache of input/output transformations for each instructionloadedFieldSet
- fields loaded/stored by each instruction and entire methodlookupFailureCallback
- callback to use to report class lookup failuresMethod Detail |
---|
public ValueNumber getDefaultValue()
AbstractFrameModelingVisitor
getDefaultValue
in class AbstractFrameModelingVisitor<ValueNumber,ValueNumberFrame>
public void setHandle(org.apache.bcel.generic.InstructionHandle handle)
private boolean doRedundantLoadElimination()
private boolean doForwardSubstitution()
private void checkConsumedAndProducedValues(org.apache.bcel.generic.Instruction ins, ValueNumber[] consumedValueList, ValueNumber[] producedValueList)
public void modelNormalInstruction(org.apache.bcel.generic.Instruction ins, int numWordsConsumed, int numWordsProduced)
modelNormalInstruction
in class AbstractFrameModelingVisitor<ValueNumber,ValueNumberFrame>
public void visitGETFIELD(org.apache.bcel.generic.GETFIELD obj)
visitGETFIELD
in interface org.apache.bcel.generic.Visitor
visitGETFIELD
in class AbstractFrameModelingVisitor<ValueNumber,ValueNumberFrame>
public void visitPUTFIELD(org.apache.bcel.generic.PUTFIELD obj)
visitPUTFIELD
in interface org.apache.bcel.generic.Visitor
visitPUTFIELD
in class AbstractFrameModelingVisitor<ValueNumber,ValueNumberFrame>
public void visitGETSTATIC(org.apache.bcel.generic.GETSTATIC obj)
visitGETSTATIC
in interface org.apache.bcel.generic.Visitor
visitGETSTATIC
in class AbstractFrameModelingVisitor<ValueNumber,ValueNumberFrame>
public void visitPUTSTATIC(org.apache.bcel.generic.PUTSTATIC obj)
visitPUTSTATIC
in interface org.apache.bcel.generic.Visitor
visitPUTSTATIC
in class AbstractFrameModelingVisitor<ValueNumber,ValueNumberFrame>
public void visitINVOKESTATIC(org.apache.bcel.generic.INVOKESTATIC obj)
visitINVOKESTATIC
in interface org.apache.bcel.generic.Visitor
visitINVOKESTATIC
in class AbstractFrameModelingVisitor<ValueNumber,ValueNumberFrame>
public void visitLDC(org.apache.bcel.generic.LDC obj)
visitLDC
in interface org.apache.bcel.generic.Visitor
visitLDC
in class AbstractFrameModelingVisitor<ValueNumber,ValueNumberFrame>
private ValueNumber[] popInputValues(int numWordsConsumed)
private void pushOutputValues(ValueNumber[] outputValueList)
private ValueNumber[] getOutputValues(ValueNumber[] inputValueList, int numWordsProduced)
private ValueNumber[] getOutputValues(ValueNumber[] inputValueList, int numWordsProduced, int flags)
private static java.lang.String vlts(ValueNumber[] vl)
private void loadInstanceField(InstanceField instanceField, org.apache.bcel.generic.Instruction obj)
instanceField
- the fieldobj
- the Instruction loading the fieldprivate void loadStaticField(StaticField staticField, org.apache.bcel.generic.Instruction obj)
staticField
- the fieldobj
- the Instruction loading the fieldprivate void storeInstanceField(InstanceField instanceField, org.apache.bcel.generic.Instruction obj, boolean pushStoredValue)
instanceField
- the fieldobj
- the instruction which stores the fieldpushStoredValue
- push the stored value onto the stack
(because we are modeling an inner-class field access method)private void storeStaticField(StaticField staticField, org.apache.bcel.generic.Instruction obj, boolean pushStoredValue)
staticField
- the static fieldobj
- the instruction which stores the fieldpushStoredValue
- push the stored value onto the stack
(because we are modeling an inner-class field access method)private ValueNumber getClassObjectValue(java.lang.String className)
className
- the class
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |