Class BlockType

java.lang.Object
java.util.BitSet
edu.umd.cs.findbugs.ba.BlockType
All Implemented Interfaces:
Serializable, Cloneable

public class BlockType extends BitSet
Dataflow value representing the current nesting of catch and finally blocks. We assume that any catch block with a non-empty catch type is a user catch block, and any catch block with an empty catch type (i.e., catch all exceptions) is a finally block. This assumption isn't quite accurate, but it seems to be a reasonable first approximation.

If valid (isValid() returns true), a BlockType value is a stack of elements, which are either CATCH or FINALLY values. Call getDepth() to get the current nesting depth. Call get(int n) to get the nth stack item. Call getTopValue() to get the current top of the stack.

If invalid (isValid() returns false), a BlockType value is either top or bottom. These are the special values at the top and bottom of the dataflow lattice.

The dataflow lattice is effectively finite-height because real Java methods are guaranteed to have a finite catch and finally block nesting level.

Author:
David Hovemeyer
See Also:
  • Field Details

  • Method Details

    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class BitSet
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class BitSet
    • isValid

      public boolean isValid()
      Return whether or not this value is valid, meaning it contains a valid representation of the nesting of catch and finally blocks.
    • getDepth

      public int getDepth()
      Get the current nesting depth. The value must be valid.
    • getTopValue

      public boolean getTopValue()
      Get the top value on the catch and finally block nesting stack.
    • isNormal

      public boolean isNormal()
      Return whether or not this value represents "normal" control-flow. Normal control flow are all blocks outside any catch or finally block.
    • setNormal

      public void setNormal()
      Make this value represent "normal" control flow.
    • isTop

      public boolean isTop()
      Return whether or not this is the special "top" dataflow value.
    • setTop

      public void setTop()
      Make this the special "top" dataflow value.
    • isBottom

      public boolean isBottom()
      Return whether or not this is the special "bottom" dataflow value.
    • setBottom

      public void setBottom()
      Make this the special "bottom" dataflow value.
    • copyFrom

      public void copyFrom(BlockType other)
      Make this object an exact duplicate of given object.
      Parameters:
      other - the other BlockType object
    • sameAs

      public boolean sameAs(BlockType other)
      Return whether or not this object is identical to the one given.
      Parameters:
      other - the other BlockType object
      Returns:
      true if this object is identical to the one given, false otherwise
    • mergeWith

      public void mergeWith(BlockType other)
      Merge other dataflow value into this value.
      Parameters:
      other - the other BlockType value
    • pushCatch

      public void pushCatch()
      Enter a catch block.
    • pushFinally

      public void pushFinally()
      Enter a finally block.
    • toString

      public String toString()
      Overrides:
      toString in class BitSet