# Interface MethodTransform

All Superinterfaces:
  `ClassFileTransform<MethodTransform, MethodElement, MethodBuilder>`

Functional Interface:
  This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.

@FunctionalInterface public non-sealed interface MethodTransform extends ClassFileTransform<MethodTransform, MethodElement, MethodBuilder>
A transformation on streams of `MethodElement`.

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

A method transform can be lifted to a class transform via `ClassTransform.transformingMethods(MethodTransform)`, transforming only the `MethodModel` among the class members and passing all other elements to the builders.

Since:
  24
See Also:
  - `MethodModel`
  - `ClassBuilder.transformMethod(java.lang.classfile.MethodModel, java.lang.classfile.MethodTransform)`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final MethodTransform`
  `ACCEPT_ALL`
  A method transform that passes all elements to the builder.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `default MethodTransform`
  `andThen(MethodTransform t)`
  Chain this transform with another; elements presented to the builder of this transform will become the input to the next transform.
  `static MethodTransform`
  `dropping(Predicate<MethodElement> filter)`
  Creates a method transform that passes each element through to the builder, except for those that the supplied `Predicate` is true for.
  `static MethodTransform`
  `endHandler(Consumer<MethodBuilder> finisher)`
  Creates a method transform that passes each element through to the builder, and calls the specified function when transformation is complete.
  `static MethodTransform`
  `ofStateful(Supplier<MethodTransform> supplier)`
  Creates a stateful method transform from a `Supplier`.
  `static MethodTransform`
  `transformingCode(CodeTransform xform)`
  Creates a method transform that transforms `CodeModel` elements with the supplied code transform, passing every other element through to the builder.

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

  `accept, atEnd, atStart`

- ## Field Details

  - ### ACCEPT_ALL

    static final MethodTransform ACCEPT_ALL
    A method transform that passes all elements to the builder.

- ## Method Details

  - ### ofStateful

    static MethodTransform ofStateful(Supplier<MethodTransform> supplier)
    Creates a stateful method transform from a `Supplier`. The supplier will be invoked for each transformation.
    Parameters:
      `supplier` - a `Supplier` that produces a fresh transform object for each traversal
    Returns:
      the stateful method transform

  - ### endHandler

    static MethodTransform endHandler(Consumer<MethodBuilder> finisher)
    Creates a method transform that passes each element through to the builder, and calls the specified function when transformation is complete.
    Parameters:
      `finisher` - the function to call when transformation is complete
    Returns:
      the method transform

  - ### dropping

    static MethodTransform dropping(Predicate<MethodElement> filter)
    Creates a method transform that passes each element through to the builder, except for those that the supplied `Predicate` is true for.
    Parameters:
      `filter` - the predicate that determines which elements to drop
    Returns:
      the method transform

  - ### transformingCode

    static MethodTransform transformingCode(CodeTransform xform)
    Creates a method transform that transforms `CodeModel` elements with the supplied code transform, passing every other element through to the builder.
    Parameters:
      `xform` - the method transform
    Returns:
      the class transform

  - ### andThen

    default MethodTransform andThen(MethodTransform t)
    Description copied from interface: `ClassFileTransform`
    Chain this transform with another; elements presented to the builder of this transform will become the input to the next transform.

    This method is implemented by the Class-File API. Users usually don't have sufficient access to Class-File API functionalities to override this method correctly for generic downstream transforms.

    Specified by:
      `andThen` in interface `ClassFileTransform<MethodTransform, MethodElement, MethodBuilder>`
    Implementation Requirements:
      The default implementation returns this method transform chained with another method transform from the argument. Chaining of two transforms requires to involve a chained builder serving as a target builder for this transform and also as a source of elements for the downstream transform.
    Parameters:
      `t` - the downstream transform
    Returns:
      the chained transform