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