@HashCodeAndEqualsPlugin.Enhance public class MethodCallProxy extends java.lang.Object implements AuxiliaryType
Callable.call()
or Runnable.run()
method is called where the method
call proxy implements both interfaces.
In order to do so, the method call proxy instances are constructed by providing all the necessary information for calling a particular method:
static
, the first argument should be an instance on which the method is called.Modifier and Type | Class and Description |
---|---|
static class |
MethodCallProxy.AssignableSignatureCall
A stack manipulation that creates a
MethodCallProxy
for a given method an pushes such an object onto the call stack. |
protected static class |
MethodCallProxy.ConstructorCall
An implementation for a constructor of a
MethodCallProxy . |
protected static class |
MethodCallProxy.MethodCall
An implementation for a method of a
MethodCallProxy . |
protected static class |
MethodCallProxy.PrecomputedMethodGraph
A precomputed method graph that only displays the methods that are relevant for creating a method call proxy.
|
AuxiliaryType.NamingStrategy, AuxiliaryType.SignatureRelevant
Modifier and Type | Field and 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.
|
DEFAULT_TYPE_MODIFIER
Constructor and 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 the
Callable.call() or Runnable.run() method returns. |
MethodCallProxy(Implementation.SpecialMethodInvocation specialMethodInvocation,
boolean serializableProxy,
Assigner assigner)
Creates a new method call proxy for a given method.
|
Modifier and Type | Method and 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.
|
private static final java.lang.String FIELD_NAME_PREFIX
private final Implementation.SpecialMethodInvocation specialMethodInvocation
private final boolean serializableProxy
private final Assigner assigner
public MethodCallProxy(Implementation.SpecialMethodInvocation specialMethodInvocation, boolean serializableProxy)
Callable.call()
or Runnable.run()
method returns.specialMethodInvocation
- The special method invocation which should be invoked by this method call proxy.serializableProxy
- Determines if the generated proxy should be serializableProxy.public MethodCallProxy(Implementation.SpecialMethodInvocation specialMethodInvocation, boolean serializableProxy, Assigner assigner)
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 the
Callable.call()
or Runnable.run()
} methods'
return values.private static java.util.LinkedHashMap<java.lang.String,TypeDescription> extractFields(MethodDescription methodDescription)
methodDescription
- The method to extract into fields.private static java.lang.String fieldName(int index)
index
- The index for which the field name is to be created.public DynamicType make(java.lang.String auxiliaryTypeName, ClassFileVersion classFileVersion, MethodAccessorFactory methodAccessorFactory)
make
in interface AuxiliaryType
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.