Class MethodCallProxy
- java.lang.Object
-
- net.bytebuddy.implementation.auxiliary.MethodCallProxy
-
- All Implemented Interfaces:
AuxiliaryType
@Enhance public class MethodCallProxy extends java.lang.Object implements AuxiliaryType
A method call proxy represents a class that is compiled against a particular method which can then be called whenever either itsCallable.call()
orRunnable.run()
method is called where the method call proxy implements both interfaces.- If the target method is not
static
, the first argument should be an instance on which the method is called. - All arguments for the called method in the order in which they are required.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
MethodCallProxy.AssignableSignatureCall
A stack manipulation that creates aMethodCallProxy
for a given method an pushes such an object onto the call stack.protected static class
MethodCallProxy.ConstructorCall
An implementation for a constructor of aMethodCallProxy
.protected static class
MethodCallProxy.MethodCall
An implementation for a method of aMethodCallProxy
.protected static class
MethodCallProxy.PrecomputedMethodGraph
A precomputed method graph that only displays the methods that are relevant for creating a method call proxy.-
Nested classes/interfaces inherited from interface net.bytebuddy.implementation.auxiliary.AuxiliaryType
AuxiliaryType.NamingStrategy, AuxiliaryType.SignatureRelevant
-
-
Field Summary
Fields Modifier and Type Field Description private Assigner
assigner
The assigner to use for invoking a bridge method target where the parameter and return types need to be assigned.private static java.lang.String
FIELD_NAME_PREFIX
The prefix of the fields holding the original method invocation's arguments.private boolean
serializableProxy
Determines if the generated proxy should be serializableProxy.private Implementation.SpecialMethodInvocation
specialMethodInvocation
The special method invocation to invoke from the auxiliary type.-
Fields inherited from interface net.bytebuddy.implementation.auxiliary.AuxiliaryType
DEFAULT_TYPE_MODIFIER
-
-
Constructor Summary
Constructors Constructor Description MethodCallProxy(Implementation.SpecialMethodInvocation specialMethodInvocation, boolean serializableProxy)
Creates a new method call proxy for a given method and uses a default assigner for assigning the method's return value to either theCallable.call()
orRunnable.run()
method returns.MethodCallProxy(Implementation.SpecialMethodInvocation specialMethodInvocation, boolean serializableProxy, Assigner assigner)
Creates a new method call proxy for a given method.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static java.util.LinkedHashMap<java.lang.String,TypeDescription>
extractFields(MethodDescription methodDescription)
Creates a linked hash map of field names to their types where each field represents a parameter of the method.private static java.lang.String
fieldName(int index)
Creates a field name for a method parameter of a given index.DynamicType
make(java.lang.String auxiliaryTypeName, ClassFileVersion classFileVersion, MethodAccessorFactory methodAccessorFactory)
Creates a new auxiliary type.
-
-
-
Field Detail
-
FIELD_NAME_PREFIX
private static final java.lang.String FIELD_NAME_PREFIX
The prefix of the fields holding the original method invocation's arguments.- See Also:
- Constant Field Values
-
specialMethodInvocation
private final Implementation.SpecialMethodInvocation specialMethodInvocation
The special method invocation to invoke from the auxiliary type.
-
serializableProxy
private final boolean serializableProxy
Determines if the generated proxy should be serializableProxy.
-
assigner
private final Assigner assigner
The assigner to use for invoking a bridge method target where the parameter and return types need to be assigned.
-
-
Constructor Detail
-
MethodCallProxy
public MethodCallProxy(Implementation.SpecialMethodInvocation specialMethodInvocation, boolean serializableProxy)
Creates a new method call proxy for a given method and uses a default assigner for assigning the method's return value to either theCallable.call()
orRunnable.run()
method returns.- Parameters:
specialMethodInvocation
- The special method invocation which should be invoked by this method call proxy.serializableProxy
- Determines if the generated proxy should be serializableProxy.
-
MethodCallProxy
public MethodCallProxy(Implementation.SpecialMethodInvocation specialMethodInvocation, boolean serializableProxy, Assigner assigner)
Creates a new method call proxy for a given method.- Parameters:
specialMethodInvocation
- The special method invocation which should be invoked by this method call proxy.serializableProxy
- Determines if the generated proxy should be serializableProxy.assigner
- An assigner for assigning the target method's return value to either theCallable.call()
orRunnable.run()
} methods' return values.
-
-
Method Detail
-
extractFields
private static java.util.LinkedHashMap<java.lang.String,TypeDescription> extractFields(MethodDescription methodDescription)
Creates a linked hash map of field names to their types where each field represents a parameter of the method.- Parameters:
methodDescription
- The method to extract into fields.- Returns:
- A map of fields in the order they need to be loaded onto the operand stack for invoking the original method, including a reference to the instance of the instrumented type that is invoked if applicable.
-
fieldName
private static java.lang.String fieldName(int index)
Creates a field name for a method parameter of a given index.- Parameters:
index
- The index for which the field name is to be created.- Returns:
- The name for the given parameter.
-
make
public DynamicType make(java.lang.String auxiliaryTypeName, ClassFileVersion classFileVersion, MethodAccessorFactory methodAccessorFactory)
Creates a new auxiliary type.- Specified by:
make
in interfaceAuxiliaryType
- Parameters:
auxiliaryTypeName
- The fully qualified binary name for this auxiliary type. The type should be in the same package than the instrumented type this auxiliary type is providing services to in order to allow package-private access.classFileVersion
- The class file version the auxiliary class should be written in.methodAccessorFactory
- A factory for accessor methods.- Returns:
- A dynamically created type representing this auxiliary type.
-
-