Class StateSet

java.lang.Object
edu.umd.cs.findbugs.ba.obl.StateSet

public class StateSet extends Object
A dataflow fact used in ObligationAnalysis. It is a set of State objects, plus the additional capability to represent top and bottom elements.

Invariant: no StateSet may contain more than one State with the same ObligationSet.

See Weimer and Necula, Finding and preventing run-time error handling mistakes, OOPSLA 2004.

Author:
David Hovemeyer
  • Constructor Details

  • Method Details

    • isEmpty

      public boolean isEmpty()
    • setTop

      public void setTop()
    • isTop

      public boolean isTop()
    • setBottom

      public void setBottom()
    • isBottom

      public boolean isBottom()
    • isValid

      public boolean isValid()
    • isOnExceptionPath

      public boolean isOnExceptionPath()
    • setOnExceptionPath

      public void setOnExceptionPath(boolean onExceptionPath)
    • clear

      public void clear()
    • stateIterator

      public Iterator<State> stateIterator()
      Return an Iterator over the States in the StateSet.
      Returns:
      an Iterator over the States in the StateSet
    • getAllObligationSets

      public Set<ObligationSet> getAllObligationSets()
      Get Set of all ObligationsSets in this StateSet.
      Returns:
      Set of all ObligationsSets in this StateSet
    • getStateWithObligationSet

      public State getStateWithObligationSet(ObligationSet obligationSet)
      Get the State which has the given ObligationSet. Returns null if there is no such state.
      Parameters:
      obligationSet - we want to get the State with this ObligationSet
      Returns:
      the State with the given ObligationSet, or null if there is no such State
    • copyFrom

      public void copyFrom(StateSet other)
      Make this StateSet an exact copy of the given StateSet.
      Parameters:
      other - a StateSet; this StateSet will be made identical to it
    • duplicate

      public StateSet duplicate()
      Return an exact deep copy of this StateSet.
      Returns:
      an exact deep copy of this StateSet
    • addObligation

      public void addObligation(Obligation obligation, int basicBlockId) throws ObligationAcquiredOrReleasedInLoopException
      Add an obligation to every State in the StateSet.
      Parameters:
      obligation - the obligation to add
      basicBlockId - the id of the basic block (path component) adding the obligation
      Throws:
      ObligationAcquiredOrReleasedInLoopException
    • deleteObligation

      public void deleteObligation(Obligation obligation, int basicBlockId) throws ObligationAcquiredOrReleasedInLoopException
      Remove an Obligation from every State in the StateSet.
      Parameters:
      obligation - the obligation to remove
      basicBlockId - the id of the basic block (path component) removing the obligation
      Throws:
      ObligationAcquiredOrReleasedInLoopException
    • replaceMap

      public void replaceMap(Map<ObligationSet,State> stateMap)
      Replace the map of ObligationSets to States with the given one.
      Parameters:
      stateMap - enw map of ObligationSets to States
    • getPrefixStates

      public List<State> getPrefixStates(Path path)
      Get all States that have Paths which are prefixes of the given Path.
      Parameters:
      path - a Path
      Returns:
      Collection of States that have Paths which are prefixes of the given Path
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toString

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

      public Map<ObligationSet,State> createEmptyMap()
      Return a newly allocated Map of ObligationSet to State that may be passed to applyToAllStatesAndUpdateMap().