# Interface CodeTransform

All Superinterfaces:
  `ClassFileTransform<CodeTransform, CodeElement, CodeBuilder>`

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 CodeTransform extends ClassFileTransform<CodeTransform, CodeElement, CodeBuilder>
A transformation on streams of `CodeElement`. The stream can come from a `CodeModel`, or a handler to a `CodeBuilder` as in `CodeBuilder.transforming(CodeTransform, Consumer)`.

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

A code transform can be lifted to a method or a class transform via `MethodTransform.transformingCode(CodeTransform)` and `ClassTransform.transformingMethodBodies(CodeTransform)`, transforming only the `CodeModel` within those structures and passing all other elements to the builders.

Since:
  24
See Also:
  - `CodeModel`
  - `MethodBuilder.transformCode(CodeModel, CodeTransform)`
  - `CodeBuilder.transforming(CodeTransform, Consumer)`

- ## Field Summary

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

- ## Method Summary

  Modifier and Type
  Method
  Description
  `default CodeTransform`
  `andThen(CodeTransform t)`
  Chain this transform with another; elements presented to the builder of this transform will become the input to the next transform.
  `static CodeTransform`
  `endHandler(Consumer<CodeBuilder> finisher)`
  Creates a code transform that passes each element through to the builder, and calls the specified function when transformation is complete.
  `static CodeTransform`
  `ofStateful(Supplier<CodeTransform> supplier)`
  Creates a stateful code transform from a `Supplier`.

  ### Methods declared in interface ClassFileTransform

  `accept, atEnd, atStart`
  Modifier and Type
  Method
  Description
  `void`
  `accept(CodeBuilder builder, CodeElement element)`
  Transform an element by taking the appropriate actions on the builder.
  `default void`
  `atEnd(CodeBuilder builder)`
  Take any final action during transformation of a classfile entity.
  `default void`
  `atStart(CodeBuilder builder)`
  Take any preliminary action during transformation of a classfile entity.

- ## Field Details

  - ### ACCEPT_ALL

    static final CodeTransform ACCEPT_ALL
    A code transform that passes all elements to the builder.

- ## Method Details

  - ### ofStateful

    static CodeTransform ofStateful(Supplier<CodeTransform> supplier)
    Creates a stateful code 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 code transform

  - ### endHandler

    static CodeTransform endHandler(Consumer<CodeBuilder> finisher)
    Creates a code 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 code transform

  - ### andThen

    default CodeTransform andThen(CodeTransform 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<CodeTransform, CodeElement, CodeBuilder>`
    Implementation Requirements:
      The default implementation returns this code transform chained with another code 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