Class ResettableClassFileTransformer.WithDelegation.Substitutable

    • Constructor Detail

      • Substitutable

        protected Substitutable​(ResettableClassFileTransformer classFileTransformer)
        Creates a new delegating resettable class file transformer.
        Parameters:
        classFileTransformer - The class file transformer to delegate to.
    • Method Detail

      • iterator

        public java.util.Iterator<AgentBuilder.Transformer> iterator​(TypeDescription typeDescription,
                                                                     @MaybeNull
                                                                     java.lang.ClassLoader classLoader,
                                                                     @MaybeNull
                                                                     JavaModule module,
                                                                     @MaybeNull
                                                                     java.lang.Class<?> classBeingRedefined,
                                                                     @MaybeNull
                                                                     java.security.ProtectionDomain protectionDomain)
        Creates an iterator over the transformers that are applied for a given type.
        Specified by:
        iterator in interface ResettableClassFileTransformer
        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​(java.lang.instrument.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().

        Specified by:
        reset in interface ResettableClassFileTransformer
        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.
      • transform

        public byte[] transform​(@MaybeNull
                                java.lang.ClassLoader classLoader,
                                @MaybeNull
                                java.lang.String internalName,
                                @MaybeNull
                                java.lang.Class<?> classBeingRedefined,
                                @MaybeNull
                                java.security.ProtectionDomain protectionDomain,
                                byte[] binaryRepresentation)
                         throws java.lang.instrument.IllegalClassFormatException
        Specified by:
        transform in interface java.lang.instrument.ClassFileTransformer
        Throws:
        java.lang.instrument.IllegalClassFormatException