# 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(Consumer)` is the main way to build code models. `MethodBuilder.transformCode(CodeModel, CodeTransform)` and `CodeBuilder.transforming(CodeTransform, Consumer)` 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 AttributedElement

`attributes, findAttribute, findAttributes`

### Methods declared in interface CompoundElement

`elementList, elementStream, forEach, iterator, toDebugString`

### Methods declared in interface 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