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 CodeElements, which is the only way to access Instructions; 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:
  • Method Details

    • 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