Package net.bytebuddy.implementation
Class InvokeDynamic.AbstractDelegator
java.lang.Object
net.bytebuddy.implementation.InvokeDynamic
net.bytebuddy.implementation.InvokeDynamic.AbstractDelegator
- All Implemented Interfaces:
InstrumentedType.Prepareable
,Implementation
,Implementation.Composable
- Direct Known Subclasses:
InvokeDynamic.WithImplicitArguments
,InvokeDynamic.WithImplicitType
- Enclosing class:
- InvokeDynamic
An abstract delegator that allows to specify a configuration for any specification of an argument.
-
Nested Class Summary
Nested classes/interfaces inherited from class net.bytebuddy.implementation.InvokeDynamic
InvokeDynamic.AbstractDelegator, InvokeDynamic.Appender, InvokeDynamic.InvocationProvider, InvokeDynamic.TerminationHandler, InvokeDynamic.WithImplicitArguments, InvokeDynamic.WithImplicitTarget, InvokeDynamic.WithImplicitType
Nested classes/interfaces inherited from interface net.bytebuddy.implementation.Implementation
Implementation.Composable, Implementation.Compound, Implementation.Context, Implementation.Simple, Implementation.SpecialMethodInvocation, Implementation.Target
Nested classes/interfaces inherited from interface net.bytebuddy.dynamic.scaffold.InstrumentedType.Prepareable
InstrumentedType.Prepareable.NoOp
-
Field Summary
Fields inherited from class net.bytebuddy.implementation.InvokeDynamic
arguments, assigner, bootstrap, invocationProvider, terminationHandler, typing
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
AbstractDelegator
(MethodDescription.InDefinedShape bootstrap, List<? extends JavaConstant> arguments, InvokeDynamic.InvocationProvider invocationProvider, InvokeDynamic.TerminationHandler terminationHandler, Assigner assigner, Assigner.Typing typing) Creates a new abstract delegator for a dynamic method invocation. -
Method Summary
Modifier and TypeMethodDescriptionandThen
(Implementation implementation) Appends the supplied implementation to this implementation.appender
(Implementation.Target implementationTarget) Creates a byte code appender that determines the implementation of the instrumented type's methods.protected abstract InvokeDynamic
Resolves the current configuration into a fully initialized invoke dynamic instance.prepare
(InstrumentedType instrumentedType) Prepares a given instrumented type.withArgument
(int index) Passes a parameter of the instrumented method to the bootstrapped method.withArgument
(int... index) Passes parameters of the instrumented method to the bootstrapped method.withAssigner
(Assigner assigner, Assigner.Typing typing) Instructs this implementation to use the provided assigner and decides if the assigner should apply dynamic typing.withBooleanValue
(boolean... value) Requires the bootstrap method to bootstrap a method that takes the specifiedboolean
arguments as its next parameters.withByteValue
(byte... value) Requires the bootstrap method to bootstrap a method that takes the specifiedbyte
arguments as its next parameters.withCharacterValue
(char... value) Requires the bootstrap method to bootstrap a method that takes the specifiedchar
arguments as its next parameters.withDoubleValue
(double... value) Requires the bootstrap method to bootstrap a method that takes the specifieddouble
arguments as its next parameters.withEnumeration
(EnumerationDescription... enumerationDescription) Hands the provided enumerations to the dynamically bound method.Passes the values of the specified fields to the bootstrap method.Passes the values of the specified fields to the bootstrap method.withField
(String name, FieldLocator.Factory fieldLocatorFactory) Passes the values of the specified fields to the bootstrap method.withField
(FieldLocator.Factory fieldLocatorFactory, String... name) Passes the values of the specified fields to the bootstrap method.withFloatValue
(float... value) Requires the bootstrap method to bootstrap a method that takes the specifiedfloat
arguments as its next parameters.Adds a potentialthis
reference and all method arguments to the the bootstrapped method.withInstance
(JavaConstant... javaConstant) Hands the provided Java instance to the dynamically bound method.withIntegerValue
(int... value) Requires the bootstrap method to bootstrap a method that takes the specifiedint
arguments as its next parameters.withLongValue
(long... value) Requires the bootstrap method to bootstrap a method that takes the specifiedlong
arguments as its next parameters.Adds all method arguments to the the bootstrapped method.withNullValue
(Class<?>... type) Passesnull
values of the given types to the bootstrapped method.withNullValue
(TypeDescription... typeDescription) Passesnull
values of the given types to the bootstrapped method.withReference
(Object value) Requires the bootstrap method to bootstrap a method that takes the specified argument as its next parameter while allowing to specify the value to be of a different type than the actual instance type.withReference
(Object... value) Requires the bootstrap method to bootstrap a method that takes the specified arguments as its next parameters.withShortValue
(short... value) Requires the bootstrap method to bootstrap a method that takes the specifiedshort
arguments as its next parameters.Passes references tothis
onto the operand stack where the instance is represented as the given types.withThis
(TypeDescription... typeDescription) Passes references tothis
onto the operand stack where the instance is represented as the given types.withType
(TypeDescription... typeDescription) Hands the provided types to the dynamically bound method.Requires the bootstrap method to bootstrap a method that takes the specified arguments as its next parameters.
-
Constructor Details
-
AbstractDelegator
protected AbstractDelegator(MethodDescription.InDefinedShape bootstrap, List<? extends JavaConstant> arguments, InvokeDynamic.InvocationProvider invocationProvider, InvokeDynamic.TerminationHandler terminationHandler, Assigner assigner, Assigner.Typing typing) Creates a new abstract delegator for a dynamic method invocation.- Parameters:
bootstrap
- The bootstrap method or constructor.arguments
- The arguments that are provided to the bootstrap method or constructor.invocationProvider
- The target provided that identifies the method to be bootstrapped.terminationHandler
- A handler that handles the method return.assigner
- The assigner to be used.typing
- Indicates if dynamic type castings should be attempted for incompatible assignments.
-
-
Method Details
-
materialize
Resolves the current configuration into a fully initialized invoke dynamic instance.- Returns:
- The fully resolved invoke dynamic instance.
-
withBooleanValue
Requires the bootstrap method to bootstrap a method that takes the specifiedboolean
arguments as its next parameters.- Overrides:
withBooleanValue
in classInvokeDynamic
- Parameters:
value
- The arguments to pass to the bootstrapped method.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified arguments.
-
withByteValue
Requires the bootstrap method to bootstrap a method that takes the specifiedbyte
arguments as its next parameters.- Overrides:
withByteValue
in classInvokeDynamic
- Parameters:
value
- The arguments to pass to the bootstrapped method.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified arguments.
-
withShortValue
Requires the bootstrap method to bootstrap a method that takes the specifiedshort
arguments as its next parameters.- Overrides:
withShortValue
in classInvokeDynamic
- Parameters:
value
- The arguments to pass to the bootstrapped method.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified arguments.
-
withCharacterValue
Requires the bootstrap method to bootstrap a method that takes the specifiedchar
arguments as its next parameters.- Overrides:
withCharacterValue
in classInvokeDynamic
- Parameters:
value
- The arguments to pass to the bootstrapped method.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified arguments.
-
withIntegerValue
Requires the bootstrap method to bootstrap a method that takes the specifiedint
arguments as its next parameters.- Overrides:
withIntegerValue
in classInvokeDynamic
- Parameters:
value
- The arguments to pass to the bootstrapped method.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified arguments.
-
withLongValue
Requires the bootstrap method to bootstrap a method that takes the specifiedlong
arguments as its next parameters.- Overrides:
withLongValue
in classInvokeDynamic
- Parameters:
value
- The arguments to pass to the bootstrapped method.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified arguments.
-
withFloatValue
Requires the bootstrap method to bootstrap a method that takes the specifiedfloat
arguments as its next parameters.- Overrides:
withFloatValue
in classInvokeDynamic
- Parameters:
value
- The arguments to pass to the bootstrapped method.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified arguments.
-
withDoubleValue
Requires the bootstrap method to bootstrap a method that takes the specifieddouble
arguments as its next parameters.- Overrides:
withDoubleValue
in classInvokeDynamic
- Parameters:
value
- The arguments to pass to the bootstrapped method.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified arguments.
-
withValue
Requires the bootstrap method to bootstrap a method that takes the specified arguments as its next parameters. Note that any primitive parameters are passed as their wrapper types. Furthermore, values that can be stored in the instrumented class's constant pool might be of different object identity when passed to the bootstrapped method or might not be visible to the the created class what later results in a runtime error.
- Overrides:
withValue
in classInvokeDynamic
- Parameters:
value
- The arguments to pass to the bootstrapped method.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified arguments.
-
withReference
Requires the bootstrap method to bootstrap a method that takes the specified argument as its next parameter while allowing to specify the value to be of a different type than the actual instance type.
- Overrides:
withReference
in classInvokeDynamic
- Parameters:
value
- The arguments to pass to the bootstrapped method.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified arguments.
-
withReference
Requires the bootstrap method to bootstrap a method that takes the specified arguments as its next parameters. Note that any primitive parameters are passed as their wrapper types. Any value that is passed to the bootstrapped method is guaranteed to be of the same object identity.- Overrides:
withReference
in classInvokeDynamic
- Parameters:
value
- The arguments to pass to the bootstrapped method.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified arguments.
-
withType
Hands the provided types to the dynamically bound method. The type is stored in the generated class's constant pool and is loaded at invocation time. For this to be possible, the created class's class loader must be able to see the provided type.- Overrides:
withType
in classInvokeDynamic
- Parameters:
typeDescription
- The classes to provide to the bound method as an argument.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified type.
-
withInstance
Hands the provided Java instance to the dynamically bound method. The instance is stored in the generated class's constant pool and is loaded at invocation time. For this to be possible, the created class's class loader must be able to create the provided Java instance.- Overrides:
withInstance
in classInvokeDynamic
- Parameters:
javaConstant
- The Java instance to provide to the bound method as an argument.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified Java instance.
-
withNullValue
Passesnull
values of the given types to the bootstrapped method.- Overrides:
withNullValue
in classInvokeDynamic
- Parameters:
type
- The type that thenull
values should represent.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified arguments.
-
withNullValue
Passesnull
values of the given types to the bootstrapped method.- Overrides:
withNullValue
in classInvokeDynamic
- Parameters:
typeDescription
- The type that thenull
values should represent.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified arguments.
-
withArgument
Passes parameters of the instrumented method to the bootstrapped method.- Overrides:
withArgument
in classInvokeDynamic
- Parameters:
index
- The indices of the parameters that should be passed to the bootstrapped method.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified arguments.
-
withArgument
Passes a parameter of the instrumented method to the bootstrapped method.- Overrides:
withArgument
in classInvokeDynamic
- Parameters:
index
- The index of the parameter that should be passed to the bootstrapped method.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified argument with its implicit type.
-
withThis
Passes references tothis
onto the operand stack where the instance is represented as the given types.- Overrides:
withThis
in classInvokeDynamic
- Parameters:
type
- The types as which thethis
reference of the intercepted method should be masked.- Returns:
- This implementation where
this
references are passed as the next arguments.
-
withThis
Passes references tothis
onto the operand stack where the instance is represented as the given types.- Overrides:
withThis
in classInvokeDynamic
- Parameters:
typeDescription
- The types as which thethis
reference of the intercepted method should be masked.- Returns:
- This implementation where
this
references are passed as the next arguments.
-
withMethodArguments
Adds all method arguments to the the bootstrapped method.- Overrides:
withMethodArguments
in classInvokeDynamic
- Returns:
- This invoke dynamic implementation with all parameters of the instrumented method added.
-
withImplicitAndMethodArguments
Adds a potentialthis
reference and all method arguments to the the bootstrapped method.- Overrides:
withImplicitAndMethodArguments
in classInvokeDynamic
- Returns:
- This invoke dynamic implementation with a potential
this
reference and all parameters of the instrumented method added.
-
withField
Passes the values of the specified fields to the bootstrap method. Any of the specified fields must already exist for the instrumented type.- Overrides:
withField
in classInvokeDynamic
- Parameters:
fieldName
- The names of the fields to be passed to the bootstrapped method.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified arguments.
-
withEnumeration
Hands the provided enumerations to the dynamically bound method. The enumeration values are read from the enumeration class on demand. For this to be possible, the created class's class loader must be able to see the enumeration type.- Overrides:
withEnumeration
in classInvokeDynamic
- Parameters:
enumerationDescription
- The enumeration values to provide to the bound method as an argument.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified enumerations.
-
withField
Passes the values of the specified fields to the bootstrap method. Any of the specified fields must already exist for the instrumented type.- Overrides:
withField
in classInvokeDynamic
- Parameters:
fieldLocatorFactory
- The field locator factory to use.name
- The names of the fields to be passed to the bootstrapped method.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified arguments.
-
withField
Passes the values of the specified fields to the bootstrap method. Any of the specified fields must already exist for the instrumented type.- Overrides:
withField
in classInvokeDynamic
- Parameters:
name
- The names of the fields to be passed to the bootstrapped method.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified arguments.
-
withField
public InvokeDynamic.WithImplicitType withField(String name, FieldLocator.Factory fieldLocatorFactory) Passes the values of the specified fields to the bootstrap method. Any of the specified fields must already exist for the instrumented type.- Overrides:
withField
in classInvokeDynamic
- Parameters:
name
- The names of the fields to be passed to the bootstrapped method.fieldLocatorFactory
- The field locator factory to use.- Returns:
- This invoke dynamic implementation where the bootstrapped method is passed the specified arguments.
-
withAssigner
Instructs this implementation to use the provided assigner and decides if the assigner should apply dynamic typing.- Overrides:
withAssigner
in classInvokeDynamic
- Parameters:
assigner
- The assigner to use.typing
-true
if the assigner should attempt dynamic typing.- Returns:
- The invoke dynamic instruction where the given assigner and dynamic-typing directive are applied.
-
andThen
Appends the supplied implementation to this implementation.- Specified by:
andThen
in interfaceImplementation.Composable
- Overrides:
andThen
in classInvokeDynamic
- Parameters:
implementation
- The subsequent implementation.- Returns:
- An implementation that combines this implementation with the provided one.
-
prepare
Prepares a given instrumented type.- Specified by:
prepare
in interfaceInstrumentedType.Prepareable
- Overrides:
prepare
in classInvokeDynamic
- Parameters:
instrumentedType
- The instrumented type in its current form.- Returns:
- The prepared instrumented type.
-
appender
Creates a byte code appender that determines the implementation of the instrumented type's methods.- Specified by:
appender
in interfaceImplementation
- Overrides:
appender
in classInvokeDynamic
- Parameters:
implementationTarget
- The target of the current implementation.- Returns:
- A byte code appender for implementing methods delegated to this implementation. This byte code appender
is also responsible for handling methods that were added by this implementation on the call to
InstrumentedType.Prepareable.prepare(InstrumentedType)
.
-