edu.umd.cs.findbugs.ba

Class BlockType

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 guarnateed to have a finite catch and finally block nesting level.

Author: David Hovemeyer

See Also: BlockTypeAnalysis

Field Summary
static booleanCATCH
static booleanFINALLY
Method Summary
voidcopyFrom(BlockType other)
Make this object an exact duplicate of given object.
intgetDepth()
Get the current nesting depth.
booleangetTopValue()
Get the top value on the catch and finally block nesting stack.
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.
voidmergeWith(BlockType other)
Merge other dataflow value into this value.
voidpushCatch()
Enter a catch block.
voidpushFinally()
Enter a finally block.
booleansameAs(BlockType other)
Return whether or not this object is identical to the one given.
voidsetBottom()
Make this the special "bottom" dataflow value.
voidsetNormal()
Make this value represent "normal" control flow.
voidsetTop()
Make this the special "top" dataflow value.

Field Detail

CATCH

public static final boolean CATCH

FINALLY

public static final boolean FINALLY

Method Detail

copyFrom

public void copyFrom(BlockType other)
Make this object an exact duplicate of given object.

Parameters: other the other BlockType object

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.

isBottom

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

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.

isTop

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

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.

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.

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

setBottom

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

setNormal

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

setTop

public void setTop()
Make this the special "top" dataflow value.
FindBugs™ is licenced under the LGPL. Copyright © 2006 University of Maryland.