edu.umd.cs.findbugs.ba
Class LoadedFieldSet

java.lang.Object
  extended by edu.umd.cs.findbugs.ba.LoadedFieldSet

public class LoadedFieldSet
extends java.lang.Object

Object which stores which fields are loaded and stored by the instructions in a method (including through inner-class access methods), and also which fields are loaded/stored by the overall method. The main purpose is for doing redundant load elimination and forward substitution more efficiently, but it might be useful in other situations.

Author:
David Hovemeyer

Nested Class Summary
static class LoadedFieldSet.LoadStoreCount
          Count number of times a field is loaded and/or stored in the method.
 
Field Summary
private  java.util.Map<org.apache.bcel.generic.InstructionHandle,XField> handleToFieldMap
           
private  java.util.BitSet loadHandleSet
           
private  java.util.Map<XField,LoadedFieldSet.LoadStoreCount> loadStoreCountMap
           
private  org.apache.bcel.generic.MethodGen methodGen
           
 
Constructor Summary
LoadedFieldSet(org.apache.bcel.generic.MethodGen methodGen)
          Constructor.
 
Method Summary
 void addLoad(org.apache.bcel.generic.InstructionHandle handle, XField field)
          Add a load of given field at given instruction.
 void addStore(org.apache.bcel.generic.InstructionHandle handle, XField field)
          Add a store of given field at given instruction.
 XField getField(org.apache.bcel.generic.InstructionHandle handle)
          Get the field loaded or stored at given instruction, if any.
 LoadedFieldSet.LoadStoreCount getLoadStoreCount(XField field)
          Get the number of times given field is loaded and stored within the method.
 boolean instructionIsLoad(org.apache.bcel.generic.InstructionHandle handle)
          Return whether or not the given instruction is a load.
 boolean isLoaded(XField field)
          Return whether or not the given field is loaded by any instruction in the method.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

methodGen

private org.apache.bcel.generic.MethodGen methodGen

loadStoreCountMap

private java.util.Map<XField,LoadedFieldSet.LoadStoreCount> loadStoreCountMap

handleToFieldMap

private java.util.Map<org.apache.bcel.generic.InstructionHandle,XField> handleToFieldMap

loadHandleSet

private java.util.BitSet loadHandleSet
Constructor Detail

LoadedFieldSet

public LoadedFieldSet(org.apache.bcel.generic.MethodGen methodGen)
Constructor. Constructs an empty object.

Parameters:
methodGen - the method being analyzed for loads/stores
Method Detail

getLoadStoreCount

public LoadedFieldSet.LoadStoreCount getLoadStoreCount(XField field)
Get the number of times given field is loaded and stored within the method.

Parameters:
field - the field
Returns:
the load/store count object

addLoad

public void addLoad(org.apache.bcel.generic.InstructionHandle handle,
                    XField field)
Add a load of given field at given instruction.

Parameters:
handle - the instruction
field - the field

addStore

public void addStore(org.apache.bcel.generic.InstructionHandle handle,
                     XField field)
Add a store of given field at given instruction.

Parameters:
handle - the instruction
field - the field

getField

public XField getField(org.apache.bcel.generic.InstructionHandle handle)
Get the field loaded or stored at given instruction, if any.

Parameters:
handle - the instruction
Returns:
the field loaded or stored at the instruction, or null if the instruction is not a load or store

isLoaded

public boolean isLoaded(XField field)
Return whether or not the given field is loaded by any instruction in the method.

Parameters:
field - the field
Returns:
true if the field is loaded somewhere in the method, false if it is never loaded

instructionIsLoad

public boolean instructionIsLoad(org.apache.bcel.generic.InstructionHandle handle)
Return whether or not the given instruction is a load.

Parameters:
handle - the instruction
Returns:
true if the instruction is a load, false if not