# Interface CodeBuilder.CatchBuilder

Enclosing interface:
  `CodeBuilder`

public static sealed interface CodeBuilder.CatchBuilder
A builder to add catch blocks.

Since:
  24
See Also:
  - `CodeBuilder.trying(Consumer, Consumer)`
  - `ExceptionCatch`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `CodeBuilder.CatchBuilder`
  `catching(ClassDesc exceptionType, Consumer<CodeBuilder.BlockCodeBuilder> catchHandler)`
  Adds a catch block that catches an exception of the given type.
  `void`
  `catchingAll(Consumer<CodeBuilder.BlockCodeBuilder> catchAllHandler)`
  Adds a "catch" block that catches all exceptions.
  `CodeBuilder.CatchBuilder`
  `catchingMulti(List<ClassDesc> exceptionTypes, Consumer<CodeBuilder.BlockCodeBuilder> catchHandler)`
  Adds a catch block that catches exceptions of the given types.

- ## Method Details

  - ### catching

    CodeBuilder.CatchBuilder catching(ClassDesc exceptionType, Consumer<CodeBuilder.BlockCodeBuilder> catchHandler)
    Adds a catch block that catches an exception of the given type.

    The caught exception will be on top of the operand stack when the catch block is entered.

    The `CodeBuilder.BlockCodeBuilder.breakLabel()` for the catch block corresponds to the break label of the `tryHandler` block in `CodeBuilder.trying(Consumer, Consumer)`.

    If the type of exception is `null` then the catch block catches all exceptions.

    Parameters:
      `exceptionType` - the type of exception to catch, may be `null`
      `catchHandler` - handler that receives a `CodeBuilder.BlockCodeBuilder` to generate the body of the catch block
    Returns:
      this builder
    Throws:
      `IllegalArgumentException` - if an existing catch block catches an exception of the given type or `exceptionType` represents a primitive type
    See Also:
      - `catchingMulti(List, Consumer)`
      - `catchingAll(Consumer)`

  - ### catchingMulti

    CodeBuilder.CatchBuilder catchingMulti(List<ClassDesc> exceptionTypes, Consumer<CodeBuilder.BlockCodeBuilder> catchHandler)
    Adds a catch block that catches exceptions of the given types.

    The caught exception will be on top of the operand stack when the catch block is entered.

    The `CodeBuilder.BlockCodeBuilder.breakLabel()` for the catch block corresponds to the break label of the `tryHandler` block in `CodeBuilder.trying(Consumer, Consumer)`.

    If list of exception types is empty then the catch block catches all exceptions.

    Parameters:
      `exceptionTypes` - the types of exception to catch
      `catchHandler` - handler that receives a `CodeBuilder.BlockCodeBuilder` to generate the body of the catch block
    Returns:
      this builder
    Throws:
      `IllegalArgumentException` - if an existing catch block catches one or more exceptions of the given types
    See Also:
      - `catching(ClassDesc, Consumer)`
      - `catchingAll(Consumer)`

  - ### catchingAll

    void catchingAll(Consumer<CodeBuilder.BlockCodeBuilder> catchAllHandler)
    Adds a "catch" block that catches all exceptions.

    The `CodeBuilder.BlockCodeBuilder.breakLabel()` for the catch block corresponds to the break label of the `tryHandler` block in `CodeBuilder.trying(Consumer, Consumer)`.

    The caught exception will be on top of the operand stack when the catch block is entered.

    Parameters:
      `catchAllHandler` - handler that receives a `CodeBuilder.BlockCodeBuilder` to generate the body of the catch block
    Throws:
      `IllegalArgumentException` - if an existing catch block catches all exceptions
    See Also:
      - `catching(ClassDesc, Consumer)`
      - `catchingMulti(List, Consumer)`