Package net.bytebuddy.agent.builder
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
AClassFileTransformer
that implements the enclosing agent builder's configuration.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static interface
AgentBuilder.Default.ExecutingTransformer.Factory
A factory for creating aClassFileTransformer
for the current VM.protected class
AgentBuilder.Default.ExecutingTransformer.Java9CapableVmDispatcher
A privileged action for transforming a class on a JVM that supports modules.protected class
AgentBuilder.Default.ExecutingTransformer.LegacyVmDispatcher
A privileged action for transforming a class on a JVM prior to Java 9.-
Nested classes/interfaces inherited from interface net.bytebuddy.agent.builder.ResettableClassFileTransformer
ResettableClassFileTransformer.AbstractBase, ResettableClassFileTransformer.WithDelegation
-
-
Field Summary
Fields Modifier and Type Field Description protected static AgentBuilder.Default.ExecutingTransformer.Factory
FACTORY
A factory for creating aClassFileTransformer
that supports the features of the current VM.
-
Constructor Summary
Constructors Constructor Description ExecutingTransformer(ByteBuddy byteBuddy, AgentBuilder.Listener listener, AgentBuilder.PoolStrategy poolStrategy, AgentBuilder.TypeStrategy typeStrategy, AgentBuilder.LocationStrategy locationStrategy, AgentBuilder.Default.NativeMethodStrategy nativeMethodStrategy, AgentBuilder.InitializationStrategy initializationStrategy, AgentBuilder.InjectionStrategy injectionStrategy, AgentBuilder.LambdaInstrumentationStrategy lambdaInstrumentationStrategy, AgentBuilder.DescriptionStrategy descriptionStrategy, AgentBuilder.FallbackStrategy fallbackStrategy, AgentBuilder.ClassFileBufferStrategy classFileBufferStrategy, AgentBuilder.InstallationListener installationListener, AgentBuilder.RawMatcher ignoreMatcher, List<AgentBuilder.Default.Transformation> transformations, AgentBuilder.CircularityLock circularityLock)
Creates a new class file transformer.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Iterator<AgentBuilder.Transformer>
iterator(TypeDescription typeDescription, ClassLoader classLoader, JavaModule module, Class<?> classBeingRedefined, ProtectionDomain protectionDomain)
Creates an iterator over the transformers that are applied for a given type.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.byte[]
transform(ClassLoader classLoader, String internalTypeName, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] binaryRepresentation)
protected byte[]
transform(Object rawModule, ClassLoader classLoader, String internalTypeName, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] binaryRepresentation)
Applies a transformation for a class that was captured by thisClassFileTransformer
.
-
-
-
Field Detail
-
FACTORY
protected static final AgentBuilder.Default.ExecutingTransformer.Factory FACTORY
A factory for creating aClassFileTransformer
that supports the features of the current VM.
-
-
Constructor Detail
-
ExecutingTransformer
public ExecutingTransformer(ByteBuddy byteBuddy, AgentBuilder.Listener listener, AgentBuilder.PoolStrategy poolStrategy, AgentBuilder.TypeStrategy typeStrategy, AgentBuilder.LocationStrategy locationStrategy, AgentBuilder.Default.NativeMethodStrategy nativeMethodStrategy, AgentBuilder.InitializationStrategy initializationStrategy, AgentBuilder.InjectionStrategy injectionStrategy, AgentBuilder.LambdaInstrumentationStrategy lambdaInstrumentationStrategy, AgentBuilder.DescriptionStrategy descriptionStrategy, AgentBuilder.FallbackStrategy fallbackStrategy, AgentBuilder.ClassFileBufferStrategy classFileBufferStrategy, AgentBuilder.InstallationListener installationListener, AgentBuilder.RawMatcher ignoreMatcher, List<AgentBuilder.Default.Transformation> transformations, AgentBuilder.CircularityLock circularityLock)
Creates a new class file transformer.- Parameters:
byteBuddy
- The Byte Buddy instance to be used.listener
- The listener to notify on transformations.poolStrategy
- The type locator to use.typeStrategy
- The definition handler to use.locationStrategy
- The location strategy to use.nativeMethodStrategy
- The native method strategy to apply.initializationStrategy
- The initialization strategy to use for transformed types.injectionStrategy
- The injection strategy to use.lambdaInstrumentationStrategy
- The lambda instrumentation strategy to use.descriptionStrategy
- The description strategy for resolving type descriptions for types.fallbackStrategy
- The fallback strategy to use.installationListener
- The installation listener to notify.classFileBufferStrategy
- The class file buffer strategy to use.ignoreMatcher
- Identifies types that should not be instrumented.transformations
- The transformations to apply on non-ignored types.circularityLock
- The circularity lock to use.
-
-
Method Detail
-
transform
public byte[] transform(ClassLoader classLoader, String internalTypeName, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] binaryRepresentation)
-
transform
protected byte[] transform(Object rawModule, ClassLoader classLoader, String internalTypeName, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] binaryRepresentation)
Applies a transformation for a class that was captured by thisClassFileTransformer
. Invoking this method allows to process module information which is available since Java 9.- Parameters:
rawModule
- The instrumented class's Javajava.lang.Module
.classLoader
- The type's class loader ornull
if the type is loaded by the bootstrap loader.internalTypeName
- The internal name of the instrumented class.classBeingRedefined
- The loadedClass
being redefined ornull
if no such class exists.protectionDomain
- The instrumented type's protection domain.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.
-
iterator
public Iterator<AgentBuilder.Transformer> iterator(TypeDescription typeDescription, ClassLoader classLoader, JavaModule module, Class<?> classBeingRedefined, 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.module
- The type's module.classBeingRedefined
- The class being redefined ornull
if the type is not yet loaded.protectionDomain
- The type's protection domain.- 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 bethis
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.
-
-