Class ValueNumberFrame

java.lang.Object
edu.umd.cs.findbugs.ba.Frame<ValueNumber>
edu.umd.cs.findbugs.ba.vna.ValueNumberFrame
All Implemented Interfaces:
ValueNumberAnalysisFeatures

public class ValueNumberFrame extends Frame<ValueNumber> implements ValueNumberAnalysisFeatures
A dataflow value representing a Java stack frame with value number information.
See Also:
  • Field Details

    • mergedValueList

      private ArrayList<ValueNumber> mergedValueList
    • availableLoadMap

      private ValueNumberFrame.AvailableLoadBiMap availableLoadMap
    • mergedLoads

      private Map<AvailableLoad,ValueNumber> mergedLoads
    • previouslyKnownAs

      private Map<ValueNumber,AvailableLoad> previouslyKnownAs
    • phiNodeForLoads

      public boolean phiNodeForLoads
    • USE_WRITTEN_OUTSIDE_OF_CONSTRUCTOR

      private static final boolean USE_WRITTEN_OUTSIDE_OF_CONSTRUCTOR
      See Also:
    • constructedUnmodifiableMap

      static int constructedUnmodifiableMap
    • reusedMap

      static int reusedMap
    • createdEmptyMap

      static int createdEmptyMap
    • madeImmutableMutable

      static int madeImmutableMutable
    • reusedMutableMap

      static int reusedMutableMap
  • Constructor Details

    • ValueNumberFrame

      public ValueNumberFrame(int numLocals)
  • Method Details

    • availableLoadMapAsString

      public String availableLoadMapAsString()
    • getLoad

      @CheckForNull public AvailableLoad getLoad(ValueNumber v)
    • getAvailableLoad

      public ValueNumber[] getAvailableLoad(AvailableLoad availableLoad)
      Look for an available load.
      Parameters:
      availableLoad - the AvailableLoad (reference and field)
      Returns:
      the value(s) available, or null if no matching entry is found
    • addAvailableLoad

      public void addAvailableLoad(AvailableLoad availableLoad, @Nonnull ValueNumber[] value)
      Add an available load.
      Parameters:
      availableLoad - the AvailableLoad (reference and field)
      value - the value(s) loaded
    • removeAllKeys

      private static void removeAllKeys(ValueNumberFrame.AvailableLoadBiMap map, Iterable<AvailableLoad> removeMe)
    • killLoadsOfField

      public void killLoadsOfField(XField field)
      Kill all loads of given field.
      Parameters:
      field - the field
    • killAllLoads

      public void killAllLoads()
      Kill all loads. This conservatively handles method calls where we don't really know what fields might be assigned.
    • killAllLoads

      public void killAllLoads(boolean primitiveOnly)
    • killAllLoadsExceptFor

      public void killAllLoadsExceptFor(@CheckForNull ValueNumber v)
    • killAllLoadsOf

      public void killAllLoadsOf(@CheckForNull ValueNumber v)
      Kill all loads. This conservatively handles method calls where we don't really know what fields might be assigned.
    • killLoadsOf

      public void killLoadsOf(Set<XField> fieldsToKill)
    • killLoadsWithSimilarName

      public void killLoadsWithSimilarName(String className, String methodName)
    • killAvailableLoads

      private void killAvailableLoads(HashSet<AvailableLoad> killMe)
    • extractPackageName

      private String extractPackageName(String className)
    • mergeAvailableLoadSets

      void mergeAvailableLoadSets(ValueNumberFrame other, ValueNumberFactory factory, MergeTree mergeTree)
    • getMergedValue

      ValueNumber getMergedValue(int slot)
    • setMergedValue

      void setMergedValue(int slot, ValueNumber value)
    • copyFrom

      public void copyFrom(Frame<ValueNumber> other)
      Description copied from class: Frame
      Make this Frame exactly the same as the one given as a parameter.
      Overrides:
      copyFrom in class Frame<ValueNumber>
      Parameters:
      other - the Frame to make this object the same as
    • assignAvailableLoadMap

      private void assignAvailableLoadMap(ValueNumberFrame other)
    • assignPreviouslyKnownAs

      private void assignPreviouslyKnownAs(ValueNumberFrame other)
    • toString

      public String toString()
      Description copied from class: Frame
      Convert to string.
      Overrides:
      toString in class Frame<ValueNumber>
    • valueToString

      private static String valueToString(ValueNumber[] valueNumberList)
    • fuzzyMatch

      public boolean fuzzyMatch(ValueNumber v1, ValueNumber v2)
    • veryFuzzyMatch

      public boolean veryFuzzyMatch(ValueNumber v1, ValueNumber v2)
    • fromMatchingLoads

      public boolean fromMatchingLoads(ValueNumber v1, ValueNumber v2)
    • fromMatchingFields

      public boolean fromMatchingFields(ValueNumber v1, ValueNumber v2)
    • haveMatchingFlags

      public boolean haveMatchingFlags(ValueNumber v1, ValueNumber v2)
      Returns:
      true if v1 and v2 have a flag in common
    • valueNumbersForLoads

      public Collection<ValueNumber> valueNumbersForLoads()
    • setAvailableLoadMap

      private void setAvailableLoadMap(ValueNumberFrame.AvailableLoadBiMap availableLoadMap)
    • getAvailableLoadMap

      private ValueNumberFrame.AvailableLoadBiMap getAvailableLoadMap()
    • getUpdateableAvailableLoadMap

      private ValueNumberFrame.AvailableLoadBiMap getUpdateableAvailableLoadMap()
    • setMergedLoads

      private void setMergedLoads(Map<AvailableLoad,ValueNumber> mergedLoads)
    • getMergedLoads

      private Map<AvailableLoad,ValueNumber> getMergedLoads()
    • getUpdateableMergedLoads

      private Map<AvailableLoad,ValueNumber> getUpdateableMergedLoads()
    • setPreviouslyKnownAs

      private void setPreviouslyKnownAs(Map<ValueNumber,AvailableLoad> previouslyKnownAs)
    • getPreviouslyKnownAs

      private Map<ValueNumber,AvailableLoad> getPreviouslyKnownAs()
    • getUpdateablePreviouslyKnownAs

      private Map<ValueNumber,AvailableLoad> getUpdateablePreviouslyKnownAs()
    • sameAs

      public boolean sameAs(Frame<ValueNumber> other)
      Description copied from class: Frame
      Return true if this stack frame is the same as the one given as a parameter.
      Overrides:
      sameAs in class Frame<ValueNumber>
      Parameters:
      other - the other Frame
      Returns:
      true if the frames are the same, false otherwise
    • hasAvailableLoads

      public boolean hasAvailableLoads()