# 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 ClassFileBuilder

`accept, constantPool, transform, with`

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