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:
  • Field Details Link icon

    • ACCEPT_ALL Link icon

      static final CodeTransform ACCEPT_ALL
      A code transform that passes all elements to the builder.
  • Method Details Link icon

    • ofStateful Link icon

      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 Link icon

      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 Link icon

      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