# Interface ClassTransform

All Superinterfaces:
  `ClassFileTransform<ClassTransform, ClassElement, ClassBuilder>`

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 ClassTransform extends ClassFileTransform<ClassTransform, ClassElement, ClassBuilder>
A transformation on streams of `ClassElement`.

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

Since:
  24
See Also:
  - `ClassModel`
  - `ClassFile.transformClass(ClassModel, ClassTransform)`

- ## Field Summary

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

- ## Method Summary

  Modifier and Type
  Method
  Description
  `default ClassTransform`
  `andThen(ClassTransform t)`
  Chain this transform with another; elements presented to the builder of this transform will become the input to the next transform.
  `static ClassTransform`
  `dropping(Predicate<ClassElement> filter)`
  Creates a class transform that passes each element through to the builder, except for those that the supplied `Predicate` returns true for.
  `static ClassTransform`
  `endHandler(Consumer<ClassBuilder> finisher)`
  Creates a class transform that passes each element through to the builder, and calls the specified function when transformation is complete.
  `static ClassTransform`
  `ofStateful(Supplier<ClassTransform> supplier)`
  Creates a stateful class transform from a `Supplier`.
  `static ClassTransform`
  `transformingFields(FieldTransform xform)`
  Creates a class transform that transforms `FieldModel` elements with the supplied field transform, passing other elements through to the builder.
  `static ClassTransform`
  `transformingMethodBodies(CodeTransform xform)`
  Creates a class transform that transforms the `CodeAttribute` (method body) of `MethodModel` elements with the supplied code transform, passing other elements through to the builder.
  `static ClassTransform`
  `transformingMethodBodies(Predicate<MethodModel> filter, CodeTransform xform)`
  Creates a class transform that transforms the `CodeAttribute` (method body) of `MethodModel` elements with the supplied code transform for methods that the supplied `Predicate` returns true for, passing other elements through to the builder.
  `static ClassTransform`
  `transformingMethods(MethodTransform xform)`
  Creates a class transform that transforms `MethodModel` elements with the supplied method transform, passing other elements through to the builder.
  `static ClassTransform`
  `transformingMethods(Predicate<MethodModel> filter, MethodTransform xform)`
  Creates a class transform that transforms `MethodModel` elements with the supplied method transform for methods that the supplied `Predicate` returns true for, passing other elements through to the builder.

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

  `accept, atEnd, atStart`

- ## Field Details

  - ### ACCEPT_ALL

    static final ClassTransform ACCEPT_ALL
    A class transform that passes all elements to the builder.

- ## Method Details

  - ### ofStateful

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

  - ### endHandler

    static ClassTransform endHandler(Consumer<ClassBuilder> finisher)
    Creates a class 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 class transform

  - ### dropping

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

  - ### transformingMethods

    static ClassTransform transformingMethods(Predicate<MethodModel> filter, MethodTransform xform)
    Creates a class transform that transforms `MethodModel` elements with the supplied method transform for methods that the supplied `Predicate` returns true for, passing other elements through to the builder.
    Parameters:
      `filter` - a predicate that determines which methods to transform
      `xform` - the method transform
    Returns:
      the class transform

  - ### transformingMethods

    static ClassTransform transformingMethods(MethodTransform xform)
    Creates a class transform that transforms `MethodModel` elements with the supplied method transform, passing other elements through to the builder.
    Parameters:
      `xform` - the method transform
    Returns:
      the class transform

  - ### transformingMethodBodies

    static ClassTransform transformingMethodBodies(Predicate<MethodModel> filter, CodeTransform xform)
    Creates a class transform that transforms the `CodeAttribute` (method body) of `MethodModel` elements with the supplied code transform for methods that the supplied `Predicate` returns true for, passing other elements through to the builder.
    Parameters:
      `filter` - a predicate that determines which methods to transform
      `xform` - the code transform
    Returns:
      the class transform

  - ### transformingMethodBodies

    static ClassTransform transformingMethodBodies(CodeTransform xform)
    Creates a class transform that transforms the `CodeAttribute` (method body) of `MethodModel` elements with the supplied code transform, passing other elements through to the builder.
    Parameters:
      `xform` - the code transform
    Returns:
      the class transform

  - ### transformingFields

    static ClassTransform transformingFields(FieldTransform xform)
    Creates a class transform that transforms `FieldModel` elements with the supplied field transform, passing other elements through to the builder.
    Parameters:
      `xform` - the field transform
    Returns:
      the class transform

  - ### andThen

    default ClassTransform andThen(ClassTransform 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<ClassTransform, ClassElement, ClassBuilder>`
    Implementation Requirements:
      The default implementation returns this class transform chained with another class 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