Class BlockType
java.lang.Object
java.util.BitSet
edu.umd.cs.findbugs.ba.BlockType
- All Implemented Interfaces:
Serializable, Cloneable
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.
- See Also:
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidMake this object an exact duplicate of given object.booleanintgetDepth()Get the current nesting depth.booleanGet the top value on the catch and finally block nesting stack.inthashCode()booleanisBottom()Return whether or not this is the special "bottom" dataflow value.booleanisNormal()Return whether or not this value represents "normal" control-flow.booleanisTop()Return whether or not this is the special "top" dataflow value.booleanisValid()Return whether or not this value is valid, meaning it contains a valid representation of the nesting of catch and finally blocks.voidMerge other dataflow value into this value.private voidpush(boolean value) voidEnter a catch block.voidEnter a finally block.booleanReturn whether or not this object is identical to the one given.voidMake this the special "bottom" dataflow value.voidMake this value represent "normal" control flow.voidsetTop()Make this the special "top" dataflow value.toString()Methods inherited from class BitSet
and, andNot, cardinality, clear, clear, clear, clone, flip, flip, get, get, intersects, isEmpty, length, nextClearBit, nextSetBit, or, previousClearBit, previousSetBit, set, set, set, set, size, stream, toByteArray, toLongArray, valueOf, valueOf, valueOf, valueOf, xor
-
Field Details
-
serialVersionUID
private static final long serialVersionUID- See Also:
-
PRIME
private static final int PRIME- See Also:
-
CATCH
public static final boolean CATCH- See Also:
-
FINALLY
public static final boolean FINALLY- See Also:
-
isValid
private boolean isValid -
isTop
private boolean isTop -
depth
private int depth
-
-
Constructor Details
-
BlockType
BlockType()Constructor. Should only be called by BlockTypeAnalysis.
-
-
Method Details
-
hashCode
-
equals
-
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
Make this object an exact duplicate of given object.- Parameters:
other- the other BlockType object
-
sameAs
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
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
-
push
private void push(boolean value)
-