protected static class AgentBuilder.Default.ExecutingTransformer extends ResettableClassFileTransformer.AbstractBase
ClassFileTransformer
that implements the enclosing agent builder's
configuration.Modifier and Type | Class and Description |
---|---|
protected static interface |
AgentBuilder.Default.ExecutingTransformer.Factory
A factory for creating a
ClassFileTransformer 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.
|
ResettableClassFileTransformer.AbstractBase, ResettableClassFileTransformer.Substitutable, ResettableClassFileTransformer.WithDelegation
Modifier and Type | Field and Description |
---|---|
protected static AgentBuilder.Default.ExecutingTransformer.Factory |
FACTORY
A factory for creating a
ClassFileTransformer that supports the features of the current VM. |
Modifier and Type | Method and 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 this
ClassFileTransformer . |
protected static final AgentBuilder.Default.ExecutingTransformer.Factory FACTORY
ClassFileTransformer
that supports the features of the current VM.public ExecutingTransformer(ByteBuddy byteBuddy, AgentBuilder.Listener listener, AgentBuilder.PoolStrategy poolStrategy, AgentBuilder.TypeStrategy typeStrategy, AgentBuilder.LocationStrategy locationStrategy, ClassFileLocator classFileLocator, 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, AgentBuilder.RedefinitionStrategy.ResubmissionEnforcer resubmissionEnforcer, List<AgentBuilder.Default.Transformation> transformations, AgentBuilder.CircularityLock circularityLock)
byteBuddy
- The Byte Buddy instance to be used.listener
- The listener to notify on transformations.poolStrategy
- The pool strategy to use.typeStrategy
- The definition handler to use.locationStrategy
- The location strategy to use.classFileLocator
- A class file locator for locating globally available types.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.resubmissionEnforcer
- The resubmission enforcer to use.transformations
- The transformations to apply on non-ignored types.circularityLock
- The circularity lock to use.@MaybeNull public byte[] transform(@MaybeNull ClassLoader classLoader, @MaybeNull String internalTypeName, @MaybeNull Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] binaryRepresentation)
@MaybeNull protected byte[] transform(Object rawModule, @MaybeNull ClassLoader classLoader, @MaybeNull String internalTypeName, @MaybeNull Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] binaryRepresentation)
ClassFileTransformer
. Invoking this method
allows to process module information which is available since Java 9.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.binaryRepresentation
- The class file of the instrumented class in its current state.public Iterator<AgentBuilder.Transformer> iterator(TypeDescription typeDescription, @MaybeNull ClassLoader classLoader, @MaybeNull JavaModule module, @MaybeNull Class<?> classBeingRedefined, ProtectionDomain protectionDomain)
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.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()
.
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.true
if a reset was applied and this transformer was not previously removed.Copyright © 2014–2023. All rights reserved.