public static enum AgentBuilder.LambdaInstrumentationStrategy extends Enum<AgentBuilder.LambdaInstrumentationStrategy>
Implements the instrumentation of the LambdaMetafactory
if this feature is enabled.
Warning: This feature is not recommended for production systems but only for experiments or debugging purposes. It might no longer work in a future release and makes assumptions over JVM-internal API.
Modifier and Type | Class and Description |
---|---|
protected static class |
AgentBuilder.LambdaInstrumentationStrategy.LambdaInstanceFactory
A factory that creates instances that represent lambda expressions.
|
protected static class |
AgentBuilder.LambdaInstrumentationStrategy.LambdaMetafactoryFactory
A factory for rewriting the JDK's
java.lang.invoke.LambdaMetafactory methods for use with Byte Buddy. |
Enum Constant and Description |
---|
DISABLED
A strategy that does not instrument the
LambdaMetafactory . |
ENABLED
A strategy that enables instrumentation of the
LambdaMetafactory if such a factory exists on the current VM. |
Modifier and Type | Method and Description |
---|---|
protected abstract void |
apply(ByteBuddy byteBuddy,
Instrumentation instrumentation,
ClassFileTransformer classFileTransformer)
Applies a transformation to lambda instances if applicable.
|
boolean |
isEnabled()
Indicates if this strategy enables instrumentation of the
LambdaMetafactory . |
protected abstract boolean |
isInstrumented(Class<?> type)
Validates if the supplied class is instrumented.
|
static AgentBuilder.LambdaInstrumentationStrategy |
of(boolean enabled)
Returns an enabled lambda instrumentation strategy for
true . |
static void |
release(ClassFileTransformer classFileTransformer,
Instrumentation instrumentation)
Releases the supplied class file transformer when it was built with
AgentBuilder.with(LambdaInstrumentationStrategy) enabled. |
static AgentBuilder.LambdaInstrumentationStrategy |
valueOf(String name)
Returns the enum constant of this type with the specified name.
|
static AgentBuilder.LambdaInstrumentationStrategy[] |
values()
Returns an array containing the constants of this enum type, in
the order they are declared.
|
public static final AgentBuilder.LambdaInstrumentationStrategy ENABLED
LambdaMetafactory
if such a factory exists on the current VM.
Classes representing lambda expressions that are created by Byte Buddy are fully compatible to those created by
the JVM and can be serialized or deserialized to one another. The classes do however show a few differences:
public static final AgentBuilder.LambdaInstrumentationStrategy DISABLED
LambdaMetafactory
.public static AgentBuilder.LambdaInstrumentationStrategy[] values()
for (AgentBuilder.LambdaInstrumentationStrategy c : AgentBuilder.LambdaInstrumentationStrategy.values()) System.out.println(c);
public static AgentBuilder.LambdaInstrumentationStrategy valueOf(String name)
name
- the name of the enum constant to be returned.IllegalArgumentException
- if this enum type has no constant with the specified nameNullPointerException
- if the argument is nullpublic static void release(ClassFileTransformer classFileTransformer, Instrumentation instrumentation)
AgentBuilder.with(LambdaInstrumentationStrategy)
enabled.
Subsequently, the class file transformer is no longer applied when a class that represents a lambda expression is created.classFileTransformer
- The class file transformer to release.instrumentation
- The instrumentation instance that is used to potentially rollback the instrumentation of the LambdaMetafactory
.public static AgentBuilder.LambdaInstrumentationStrategy of(boolean enabled)
true
.enabled
- If lambda instrumentation should be enabled.true
if the returned strategy should be enabled.protected abstract void apply(ByteBuddy byteBuddy, Instrumentation instrumentation, ClassFileTransformer classFileTransformer)
byteBuddy
- The Byte Buddy instance to use.instrumentation
- The instrumentation instance for applying a redefinition.classFileTransformer
- The class file transformer to apply.public boolean isEnabled()
LambdaMetafactory
.true
if this strategy is enabled.protected abstract boolean isInstrumented(@MaybeNull Class<?> type)
type
- The redefined type or null
if no such type exists.true
if the supplied type should be instrumented according to this strategy.Copyright © 2014–2024. All rights reserved.