# Interface CodeModel

All Superinterfaces:
  `AttributedElement`, `ClassFileElement`, `CompoundElement<CodeElement>`, `Iterable<CodeElement>`, `MethodElement`

All Known Subinterfaces:
  `CodeAttribute`

public sealed interface CodeModel extends CompoundElement<CodeElement>, AttributedElement, MethodElement permits CodeAttribute (not exhaustive)
Models the body of a method (the `Code` attribute). A `Code` attribute is viewed as a composition of `CodeElement`s, which is the only way to access `Instruction`s; the order of elements of a code model is significant.

A `CodeModel` is obtained from `MethodModel.code()`, or in the traversal of the member elements of a method.

`MethodBuilder.withCode(java.util.function.Consumer<? super java.lang.classfile.CodeBuilder>)` is the main way to build code models. `MethodBuilder.transformCode(java.lang.classfile.CodeModel, java.lang.classfile.CodeTransform)` and `CodeBuilder.transforming(java.lang.classfile.CodeTransform, java.util.function.Consumer<java.lang.classfile.CodeBuilder>)` allow creating new `Code` attributes by selectively processing the original code elements and directing the results to a code builder.

A `Code` attribute holds attributes, but they are usually not member elements, but are decomposed to `PseudoInstruction`, accessible according to `ClassFile.DeadLabelsOption`, `ClassFile.DebugElementsOption`, and `ClassFile.LineNumbersOption`. `StackMapTableAttribute` can only be accessed via explicit attribute reading, as it is considered a derived property from the code body.

See Java Virtual Machine Specification:
  4.7.3 The `Code` Attribute
Since:
  24
See Also:
  - `MethodModel.code()`
  - `CodeTransform`
  - `CodeAttribute`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `List<ExceptionCatch>`
  `exceptionHandlers()`
  Returns the exception table of the method.
  `Optional<MethodModel>`
  `parent()`
  Returns the enclosing method, if known.

  ### Methods declared in interface java.lang.classfile.AttributedElement

  `attributes, findAttribute, findAttributes`

  ### Methods declared in interface java.lang.classfile.CompoundElement

  `elementList, elementStream, forEach, iterator, toDebugString`

  ### Methods declared in interface java.lang.Iterable

  `spliterator`

- ## Method Details

  - ### parent

    Optional<MethodModel> parent()
    Returns the enclosing method, if known.
    Returns:
      the enclosing method, if known

  - ### exceptionHandlers

    List<ExceptionCatch> exceptionHandlers()
    Returns the exception table of the method. The exception table is also modeled by `ExceptionCatch` elements in the streaming view.
    Returns:
      the exception table of the method