# Interface MethodBuilder

All Superinterfaces:
  `ClassFileBuilder<MethodElement, MethodBuilder>`, `Consumer<MethodElement>`

public sealed interface MethodBuilder extends ClassFileBuilder<MethodElement, MethodBuilder>
A builder for methods. The main way to obtain a method builder is via `ClassBuilder.withMethod(String, MethodTypeDesc, int, Consumer)`. `ClassBuilder.withMethodBody(String, MethodTypeDesc, int, Consumer)` is useful if no attribute on the method except `Code` needs to be configured, skipping the method handler.

Refer to `ClassFileBuilder` for general guidance and caution around the use of builders for structures in the `class` file format.

See Java Virtual Machine Specification:
  4.6 Methods
Since:
  24
See Also:
  - `MethodModel`
  - `MethodTransform`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `MethodBuilder`
  `transformCode(CodeModel code, CodeTransform transform)`
  Build the method body for this method by transforming the body of another method.
  `MethodBuilder`
  `withCode(Consumer<? super CodeBuilder> code)`
  Build the method body for this method.
  `default MethodBuilder`
  `withFlags(int flags)`
  Sets the method access flags.
  `default MethodBuilder`
  `withFlags(AccessFlag... flags)`
  Sets the method access flags.

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

  `accept, constantPool, transform, with`

  ### Methods declared in interface java.util.function.Consumer

  `andThen`

- ## Method Details

  - ### withFlags

    default MethodBuilder withFlags(int flags)
    Sets the method access flags. The `AccessFlag.STATIC` flag cannot be modified after the builder is created.
    Parameters:
      `flags` - the access flags, as a bit mask
    Returns:
      this builder
    Throws:
      `IllegalArgumentException` - if the `ACC_STATIC` flag is modified
    See Also:
      - `AccessFlags`
      - `AccessFlag.Location.METHOD`

  - ### withFlags

    default MethodBuilder withFlags(AccessFlag... flags)
    Sets the method access flags. The `AccessFlag.STATIC` flag cannot be modified after the builder is created.
    Parameters:
      `flags` - the access flags, as a bit mask
    Returns:
      this builder
    Throws:
      `IllegalArgumentException` - if the `ACC_STATIC` flag is modified
    See Also:
      - `AccessFlags`
      - `AccessFlag.Location.METHOD`

  - ### withCode

    MethodBuilder withCode(Consumer<? super CodeBuilder> code)
    Build the method body for this method.
    Parameters:
      `code` - a handler receiving a `CodeBuilder`
    Returns:
      this builder
    See Also:
      - `CodeModel`

  - ### transformCode

    MethodBuilder transformCode(CodeModel code, CodeTransform transform)
    Build the method body for this method by transforming the body of another method.

    This method behaves as if:

        withCode(cob -> cob.transform(code, transform));

    Parameters:
      `code` - the method body to be transformed
      `transform` - the transform to apply to the method body
    Returns:
      this builder
    See Also:
      - `CodeTransform`