Class LockSet

java.lang.Object
edu.umd.cs.findbugs.ba.LockSet

public final class LockSet extends Object
Lock counts for values (as produced by ValueNumberAnalysis). A LockSet tells us the lock counts for all values in a method, insofar as we can accurately determine them.
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private int[]
    Lock counts are stored in an array.
    static final int
    An invalid lock count resulting from the meet of two different (inconsistent) lock counts.
    private static final int
     
    private int
    The lock count value to return for nonexistent lock entries.
    private static final int
     
    static final int
    An uninitialized lock value.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Constructor.
  • Method Summary

    Modifier and Type
    Method
    Description
    private void
    addEntry(int negatedIndex, int valueNumber, int lockCount)
     
    void
    Clear all entries out of this LockSet.
    boolean
    Determine whether or not this lock set contains any locked values which are method return values.
    void
    Make this LockSet the same as the given one.
    private int
    findIndex(int valueNumber)
     
    int
    getLockCount(int valueNumber)
    Get the lock count for given lock object.
     
    int
    Get the number of distinct lock values with positive lock counts.
    private boolean
     
    void
    Destructively intersect this lock set with another.
    boolean
    Return whether or not this lock set is empty, meaning that no locks have a positive lock count.
    boolean
     
    void
    Meet this LockSet with another LockSet, storing the result in this object.
    private static int
    mergeValues(int a, int b)
     
    boolean
    sameAs(LockSet other)
    Return whether or not this LockSet is the same as the one given.
    void
    setDefaultLockCount(int defaultLockCount)
    Set the default lock count to return for nonexistent lock entries.
    void
    setLockCount(int valueNumber, int lockCount)
    Set the lock count for a lock object.
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • TOP

      public static final int TOP
      An uninitialized lock value.
      See Also:
    • BOTTOM

      public static final int BOTTOM
      An invalid lock count resulting from the meet of two different (inconsistent) lock counts.
      See Also:
    • INVALID

      private static final int INVALID
      See Also:
    • DEFAULT_CAPACITY

      private static final int DEFAULT_CAPACITY
      See Also:
    • array

      private int[] array
      Lock counts are stored in an array. Even indices i are value numbers of lock objects. Odd indices i+1 are lock counts. This representation is fairly compact in memory.
    • defaultLockCount

      private int defaultLockCount
      The lock count value to return for nonexistent lock entries.
  • Constructor Details

    • LockSet

      public LockSet()
      Constructor. Creates an empty lock set which returns TOP for nonexistent lock entries.
  • Method Details

    • getLockCount

      public int getLockCount(int valueNumber)
      Get the lock count for given lock object.
      Parameters:
      valueNumber - value number of the lock object
      Returns:
      the lock count for the lock object
    • isTop

      public boolean isTop()
    • setLockCount

      public void setLockCount(int valueNumber, int lockCount)
      Set the lock count for a lock object.
      Parameters:
      valueNumber - value number of the lock object
      lockCount - the lock count for the lock
    • setDefaultLockCount

      public void setDefaultLockCount(int defaultLockCount)
      Set the default lock count to return for nonexistent lock entries.
      Parameters:
      defaultLockCount - the default lock count value
    • getNumLockedObjects

      public int getNumLockedObjects()
      Get the number of distinct lock values with positive lock counts.
    • copyFrom

      public void copyFrom(LockSet other)
      Make this LockSet the same as the given one.
      Parameters:
      other - the LockSet to copy
    • clear

      public void clear()
      Clear all entries out of this LockSet.
    • meetWith

      public void meetWith(LockSet other)
      Meet this LockSet with another LockSet, storing the result in this object.
      Parameters:
      other - the other LockSet
    • sameAs

      public boolean sameAs(LockSet other)
      Return whether or not this LockSet is the same as the one given.
      Parameters:
      other - the other LockSet
    • containsReturnValue

      public boolean containsReturnValue(ValueNumberFactory factory)
      Determine whether or not this lock set contains any locked values which are method return values.
      Parameters:
      factory - the ValueNumberFactory that produced the lock values
    • intersectWith

      public void intersectWith(LockSet other)
      Destructively intersect this lock set with another. Note that this is not a dataflow merge: we are interested in finding out which locks are held in both sets, not in the exact lock counts.
      Parameters:
      other - the other LockSet
    • isEmpty

      public boolean isEmpty()
      Return whether or not this lock set is empty, meaning that no locks have a positive lock count.
      Returns:
      true if no locks are held, false if at least one lock is held
    • identicalSubset

      private boolean identicalSubset(LockSet other)
    • mergeValues

      private static int mergeValues(int a, int b)
    • findIndex

      private int findIndex(int valueNumber)
    • addEntry

      private void addEntry(int negatedIndex, int valueNumber, int lockCount)
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getLockedValueNumbers

      public Collection<ValueNumber> getLockedValueNumbers(ValueNumberFrame frame)
      Parameters:
      frame -
      Returns:
      a set of the locked value numbers