Class AgentBuilder.Default.ExecutingTransformer

java.lang.Object
net.bytebuddy.agent.builder.ResettableClassFileTransformer.AbstractBase
net.bytebuddy.agent.builder.AgentBuilder.Default.ExecutingTransformer
All Implemented Interfaces:
ClassFileTransformer, ResettableClassFileTransformer
Enclosing class:
AgentBuilder.Default

protected static class AgentBuilder.Default.ExecutingTransformer extends ResettableClassFileTransformer.AbstractBase
A ClassFileTransformer that implements the enclosing agent builder's configuration.
  • Field Details

  • Constructor Details

  • Method Details

    • getContext

      @MaybeNull @Enhance private static Object getContext()
      A proxy for java.security.AccessController#getContext that is activated if available.
      Returns:
      The current access control context or null if the current VM does not support it.
    • doPrivileged

      @Enhance private static <T> T doPrivileged(PrivilegedAction<T> action, @MaybeNull Object context)
      A proxy for java.security.AccessController#doPrivileged that is activated if available.
      Type Parameters:
      T - The type of the action's resolved value.
      Parameters:
      action - The action to execute from a privileged context.
      context - The access control context or null if the current VM does not support it.
      Returns:
      The action's resolved value.
    • transform

      @MaybeNull public byte[] transform(@MaybeNull ClassLoader classLoader, @MaybeNull String internalTypeName, @MaybeNull Class<?> classBeingRedefined, @MaybeNull ProtectionDomain protectionDomain, byte[] binaryRepresentation)
    • transform

      @MaybeNull protected byte[] transform(Object rawModule, @MaybeNull ClassLoader classLoader, @MaybeNull String internalTypeName, @MaybeNull Class<?> classBeingRedefined, @MaybeNull ProtectionDomain protectionDomain, byte[] binaryRepresentation)
      Applies a transformation for a class that was captured by this ClassFileTransformer. Invoking this method allows to process module information which is available since Java 9.
      Parameters:
      rawModule - The instrumented class's Java java.lang.Module.
      classLoader - The type's class loader or null if the type is loaded by the bootstrap loader.
      internalTypeName - The internal name of the instrumented class.
      classBeingRedefined - The loaded Class being redefined or null if no such class exists.
      protectionDomain - The instrumented type's protection domain or null if not available.
      binaryRepresentation - The class file of the instrumented class in its current state.
      Returns:
      The transformed class file or an empty byte array if this transformer does not apply an instrumentation.
    • transform

      @MaybeNull private byte[] transform(@MaybeNull JavaModule module, @MaybeNull ClassLoader classLoader, @MaybeNull String internalTypeName, @MaybeNull Class<?> classBeingRedefined, @MaybeNull ProtectionDomain protectionDomain, byte[] binaryRepresentation)
      Applies a transformation for a class that was captured by this ClassFileTransformer.
      Parameters:
      module - The instrumented class's Java module in its wrapped form or null if the current VM does not support modules.
      classLoader - The instrumented class's class loader.
      internalTypeName - The internal name of the instrumented class.
      classBeingRedefined - The loaded Class being redefined or null if no such class exists.
      protectionDomain - The instrumented type's protection domain or null if not available.
      binaryRepresentation - The class file of the instrumented class in its current state.
      Returns:
      The transformed class file or an empty byte array if this transformer does not apply an instrumentation.
    • doTransform

      @MaybeNull private byte[] doTransform(@MaybeNull JavaModule module, @MaybeNull ClassLoader classLoader, String name, @MaybeNull Class<?> classBeingRedefined, boolean loaded, @MaybeNull ProtectionDomain protectionDomain, TypePool typePool, ClassFileLocator classFileLocator)
      Applies a transformation for a class that was captured by this ClassFileTransformer.
      Parameters:
      module - The instrumented class's Java module in its wrapped form or null if the current VM does not support modules.
      classLoader - The instrumented class's class loader.
      name - The binary name of the instrumented class.
      classBeingRedefined - The loaded Class being redefined or null if no such class exists.
      loaded - true if the instrumented type is loaded.
      protectionDomain - The instrumented type's protection domain or null if not available.
      typePool - The type pool to use.
      classFileLocator - The class file locator to use.
      Returns:
      The transformed class file or an empty byte array if this transformer does not apply an instrumentation.
    • iterator

      public Iterator<AgentBuilder.Transformer> iterator(TypeDescription typeDescription, @MaybeNull ClassLoader classLoader, @MaybeNull JavaModule module, @MaybeNull Class<?> classBeingRedefined, @MaybeNull ProtectionDomain protectionDomain)
      Creates an iterator over the transformers that are applied for a given type.
      Parameters:
      typeDescription - A description of a type.
      classLoader - The type's class loader or null if the boot loader.
      module - The type's module or null if the module system is not supported by the current VM.
      classBeingRedefined - The class being redefined or null if the type is not yet loaded.
      protectionDomain - The type's protection domain or null if not available.
      Returns:
      An iterator over the transformers that are applied by this class file transformer if the given type is discovered.
    • reset

      public boolean reset(Instrumentation instrumentation, ResettableClassFileTransformer classFileTransformer, AgentBuilder.RedefinitionStrategy redefinitionStrategy, AgentBuilder.RedefinitionStrategy.DiscoveryStrategy redefinitionDiscoveryStrategy, AgentBuilder.RedefinitionStrategy.BatchAllocator redefinitionBatchAllocator, AgentBuilder.RedefinitionStrategy.Listener redefinitionListener)

      Deregisters this class file transformer and redefines any transformed class to its state without this class file transformer applied, if the supplied redefinition strategy is enabled. If it is not enabled, only the AgentBuilder.InstallationListener is informed about the resetting without undoing any code changes.

      Note: A reset class file transformer should not be reinstalled. Instead, the AgentBuilder which built the transformer should be asked to install a new transformer.

      Important: Most JVMs do not support changes of a class's structure after a class was already loaded. Therefore, it is typically required that this class file transformer was built while enabling AgentBuilder.disableClassFormatChanges().

      Parameters:
      instrumentation - The instrumentation instance from which to deregister the transformer.
      classFileTransformer - The actual class file transformer to deregister which might be this instance or any wrapper.
      redefinitionStrategy - The redefinition to apply.
      redefinitionDiscoveryStrategy - The discovery strategy for the types to reset.
      redefinitionBatchAllocator - The batch allocator to use.
      redefinitionListener - The redefinition listener to apply.
      Returns:
      true if a reset was applied and this transformer was not previously removed.