Package net.bytebuddy.agent.builder
Enum Class AgentBuilder.LambdaInstrumentationStrategy
java.lang.Object
java.lang.Enum<AgentBuilder.LambdaInstrumentationStrategy>
net.bytebuddy.agent.builder.AgentBuilder.LambdaInstrumentationStrategy
- All Implemented Interfaces:
Serializable
,Comparable<AgentBuilder.LambdaInstrumentationStrategy>
,Constable
- Enclosing interface:
AgentBuilder
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.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static class
A factory that creates instances that represent lambda expressions.protected static enum
A factory for rewriting the JDK'sjava.lang.invoke.LambdaMetafactory
methods for use with Byte Buddy.Nested classes/interfaces inherited from class java.lang.Enum
Enum.EnumDesc<E extends Enum<E>>
-
Enum Constant Summary
Enum Constants -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract void
apply
(ByteBuddy byteBuddy, Instrumentation instrumentation, ClassFileTransformer classFileTransformer) Applies a transformation to lambda instances if applicable.boolean
Indicates if this strategy enables instrumentation of theLambdaMetafactory
.protected abstract boolean
isInstrumented
(Class<?> type) Validates if the supplied class is instrumented.of
(boolean enabled) Returns an enabled lambda instrumentation strategy fortrue
.static void
release
(ClassFileTransformer classFileTransformer, Instrumentation instrumentation) Releases the supplied class file transformer when it was built withAgentBuilder.with(LambdaInstrumentationStrategy)
enabled.Returns the enum constant of this class with the specified name.values()
Returns an array containing the constants of this enum class, in the order they are declared.
-
Enum Constant Details
-
ENABLED
A strategy that enables instrumentation of theLambdaMetafactory
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:- Byte Buddy's classes are public with a public executing transformer. Doing so, it is not necessary to instantiate a non-capturing lambda expression by reflection. This is done because Byte Buddy is not necessarily capable of using reflection due to an active security manager.
- Byte Buddy's classes are not marked as synthetic as an agent builder does not instrument synthetic classes by default.
-
DISABLED
A strategy that does not instrument theLambdaMetafactory
.
-
-
Constructor Details
-
LambdaInstrumentationStrategy
private LambdaInstrumentationStrategy()
-
-
Method Details
-
values
Returns an array containing the constants of this enum class, in the order they are declared.- Returns:
- an array containing the constants of this enum class, in the order they are declared
-
valueOf
Returns the enum constant of this class with the specified name. The string must match exactly an identifier used to declare an enum constant in this class. (Extraneous whitespace characters are not permitted.)- Parameters:
name
- the name of the enum constant to be returned.- Returns:
- the enum constant with the specified name
- Throws:
IllegalArgumentException
- if this enum class has no constant with the specified nameNullPointerException
- if the argument is null
-
release
public static void release(ClassFileTransformer classFileTransformer, Instrumentation instrumentation) Releases the supplied class file transformer when it was built withAgentBuilder.with(LambdaInstrumentationStrategy)
enabled. Subsequently, the class file transformer is no longer applied when a class that represents a lambda expression is created.- Parameters:
classFileTransformer
- The class file transformer to release.instrumentation
- The instrumentation instance that is used to potentially rollback the instrumentation of theLambdaMetafactory
.
-
of
Returns an enabled lambda instrumentation strategy fortrue
.- Parameters:
enabled
- If lambda instrumentation should be enabled.- Returns:
true
if the returned strategy should be enabled.
-
apply
protected abstract void apply(ByteBuddy byteBuddy, Instrumentation instrumentation, ClassFileTransformer classFileTransformer) Applies a transformation to lambda instances if applicable.- Parameters:
byteBuddy
- The Byte Buddy instance to use.instrumentation
- The instrumentation instance for applying a redefinition.classFileTransformer
- The class file transformer to apply.
-
isEnabled
public boolean isEnabled()Indicates if this strategy enables instrumentation of theLambdaMetafactory
.- Returns:
true
if this strategy is enabled.
-
isInstrumented
Validates if the supplied class is instrumented. For lambda types (which are loaded by anonymous class loader), this method should return false if lambda instrumentation is disabled.- Parameters:
type
- The redefined type ornull
if no such type exists.- Returns:
true
if the supplied type should be instrumented according to this strategy.
-