Package net.bytebuddy.implementation
Class InvocationHandlerAdapter
- java.lang.Object
-
- net.bytebuddy.implementation.InvocationHandlerAdapter
-
- All Implemented Interfaces:
InstrumentedType.Prepareable
,Implementation
,Implementation.Composable
- Direct Known Subclasses:
InvocationHandlerAdapter.ForField
,InvocationHandlerAdapter.ForInstance
@Enhance public abstract class InvocationHandlerAdapter extends java.lang.Object implements Implementation.Composable
An adapter for adapting anInvocationHandler
. The adapter allows the invocation handler to also intercept method calls to non-interface methods.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
InvocationHandlerAdapter.AssignerConfigurable
Allows for the configuration of anAssigner
of anInvocationHandlerAdapter
.protected static class
InvocationHandlerAdapter.ForField
An implementation of anInvocationHandlerAdapter
that delegates method invocations to an adapter that is stored in an instance field.protected static class
InvocationHandlerAdapter.ForInstance
An implementation of anInvocationHandlerAdapter
that delegates method invocations to an adapter that is stored in a static field.static interface
InvocationHandlerAdapter.WithoutPrivilegeConfiguration
Allows the configuration of privileged lookup for the resolution ofMethod
constants that are provided to the invocation handler.-
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 Modifier and Type Field Description protected Assigner
assigner
The assigner that is used for assigning the return invocation handler's return value to the intercepted method's return value.protected boolean
cached
Determines if theMethod
instances that are handed to the intercepted methods are cached instatic
fields.private static boolean
CACHED
Indicates that aMethod
should be cached.private static boolean
DROPPING
Indicates that a handler is dropping its return value.protected java.lang.String
fieldName
The name of the field for storing an invocation handler.private static TypeDescription.Generic
INVOCATION_HANDLER_TYPE
A type description of theInvocationHandler
.protected boolean
privileged
Determines if theMethod
instances are retrieved by using anjava.security.AccessController
.private static boolean
PRIVILEGED
Indicates that a lookup of a method constant should be looked up using anjava.security.AccessController
.protected boolean
returning
Determines if this implementation is returning the result value or is dropping it.private static boolean
RETURNING
Indicates that a handler is returning its return value.private static boolean
UNCACHED
Indicates that a value should not be cached.private static boolean
UNPRIVILEGED
Indicates that a lookup of a method constant should not be looked up using anjava.security.AccessController
.
-
Constructor Summary
Constructors Modifier Constructor Description protected
InvocationHandlerAdapter(java.lang.String fieldName, boolean cached, boolean privileged, boolean returning, Assigner assigner)
Creates a new invocation handler for a given field.
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected ByteCodeAppender.Size
apply(org.objectweb.asm.MethodVisitor methodVisitor, Implementation.Context implementationContext, MethodDescription instrumentedMethod, StackManipulation preparingManipulation, FieldDescription fieldDescription)
Applies an implementation that delegates to a invocation handler.private java.util.List<StackManipulation>
argumentValuesOf(MethodDescription instrumentedMethod)
Returns a list of stack manipulations that loads all arguments of an instrumented method.static InvocationHandlerAdapter
of(java.lang.reflect.InvocationHandler invocationHandler)
Creates an implementation for any instance of anInvocationHandler
that delegates all method interceptions to the given instance which will be stored in astatic
field.static InvocationHandlerAdapter
of(java.lang.reflect.InvocationHandler invocationHandler, java.lang.String fieldName)
Creates an implementation for any instance of anInvocationHandler
that delegates all method interceptions to the given instance which will be stored in astatic
field.static InvocationHandlerAdapter
toField(java.lang.String name)
Creates an implementation for anyInvocationHandler
that delegates all method interceptions to a field with the given name.static InvocationHandlerAdapter
toField(java.lang.String name, FieldLocator.Factory fieldLocatorFactory)
Creates an implementation for anyInvocationHandler
that delegates all method interceptions to a field with the given name.abstract Implementation
withAssigner(Assigner assigner)
Configures an assigner to use with this invocation handler adapter.abstract InvocationHandlerAdapter.WithoutPrivilegeConfiguration
withoutMethodCache()
By default, anyMethod
instance that is handed over to anInvocationHandler
is cached in a static field.abstract InvocationHandlerAdapter.AssignerConfigurable
withPrivilegedLookup()
Configures that the method constants supplied to the invocation handler adapter are resolved using anjava.security.AccessController
.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface net.bytebuddy.implementation.Implementation
appender
-
Methods inherited from interface net.bytebuddy.implementation.Implementation.Composable
andThen, andThen
-
Methods inherited from interface net.bytebuddy.dynamic.scaffold.InstrumentedType.Prepareable
prepare
-
-
-
-
Field Detail
-
INVOCATION_HANDLER_TYPE
private static final TypeDescription.Generic INVOCATION_HANDLER_TYPE
A type description of theInvocationHandler
.
-
UNCACHED
private static final boolean UNCACHED
Indicates that a value should not be cached.- See Also:
- Constant Field Values
-
CACHED
private static final boolean CACHED
Indicates that aMethod
should be cached.- See Also:
- Constant Field Values
-
UNPRIVILEGED
private static final boolean UNPRIVILEGED
Indicates that a lookup of a method constant should not be looked up using anjava.security.AccessController
.- See Also:
- Constant Field Values
-
PRIVILEGED
private static final boolean PRIVILEGED
Indicates that a lookup of a method constant should be looked up using anjava.security.AccessController
.- See Also:
- Constant Field Values
-
RETURNING
private static final boolean RETURNING
Indicates that a handler is returning its return value.- See Also:
- Constant Field Values
-
DROPPING
private static final boolean DROPPING
Indicates that a handler is dropping its return value.- See Also:
- Constant Field Values
-
fieldName
protected final java.lang.String fieldName
The name of the field for storing an invocation handler.
-
cached
protected final boolean cached
Determines if theMethod
instances that are handed to the intercepted methods are cached instatic
fields.
-
privileged
protected final boolean privileged
Determines if theMethod
instances are retrieved by using anjava.security.AccessController
.
-
returning
protected final boolean returning
Determines if this implementation is returning the result value or is dropping it.
-
assigner
protected final Assigner assigner
The assigner that is used for assigning the return invocation handler's return value to the intercepted method's return value.
-
-
Constructor Detail
-
InvocationHandlerAdapter
protected InvocationHandlerAdapter(java.lang.String fieldName, boolean cached, boolean privileged, boolean returning, Assigner assigner)
Creates a new invocation handler for a given field.- Parameters:
fieldName
- The name of the field.cached
- Determines if theMethod
instances that are handed to the intercepted methods are cached instatic
fields.privileged
- Determines if theMethod
instances are retrieved by using anjava.security.AccessController
.returning
- Determines if this implementation is returning the result value or is dropping it.assigner
- The assigner to apply when defining this implementation.
-
-
Method Detail
-
of
public static InvocationHandlerAdapter of(java.lang.reflect.InvocationHandler invocationHandler)
Creates an implementation for any instance of anInvocationHandler
that delegates all method interceptions to the given instance which will be stored in astatic
field.- Parameters:
invocationHandler
- The invocation handler to which all method calls are delegated.- Returns:
- An implementation that delegates all method interceptions to the given invocation handler.
-
of
public static InvocationHandlerAdapter of(java.lang.reflect.InvocationHandler invocationHandler, java.lang.String fieldName)
Creates an implementation for any instance of anInvocationHandler
that delegates all method interceptions to the given instance which will be stored in astatic
field.- Parameters:
invocationHandler
- The invocation handler to which all method calls are delegated.fieldName
- The name of the field.- Returns:
- An implementation that delegates all method interceptions to the given invocation handler.
-
toField
public static InvocationHandlerAdapter toField(java.lang.String name)
Creates an implementation for anyInvocationHandler
that delegates all method interceptions to a field with the given name. This field has to be of a subtype of invocation handler and needs to be set before any invocations are intercepted. Otherwise, aNullPointerException
will be thrown.- Parameters:
name
- The name of the field.- Returns:
- An implementation that delegates all method interceptions to an instance field of the given name.
-
toField
public static InvocationHandlerAdapter toField(java.lang.String name, FieldLocator.Factory fieldLocatorFactory)
Creates an implementation for anyInvocationHandler
that delegates all method interceptions to a field with the given name. This field has to be of a subtype of invocation handler and needs to be set before any invocations are intercepted. Otherwise, aNullPointerException
will be thrown.- Parameters:
name
- The name of the field.fieldLocatorFactory
- The field locator factory- Returns:
- An implementation that delegates all method interceptions to an instance field of the given name.
-
argumentValuesOf
private java.util.List<StackManipulation> argumentValuesOf(MethodDescription instrumentedMethod)
Returns a list of stack manipulations that loads all arguments of an instrumented method.- Parameters:
instrumentedMethod
- The method that is instrumented.- Returns:
- A list of stack manipulation that loads all arguments of an instrumented method.
-
withoutMethodCache
public abstract InvocationHandlerAdapter.WithoutPrivilegeConfiguration withoutMethodCache()
By default, anyMethod
instance that is handed over to anInvocationHandler
is cached in a static field. By invoking this method, this feature can be disabled.- Returns:
- A similar invocation handler adapter that applies caching.
-
withAssigner
public abstract Implementation withAssigner(Assigner assigner)
Configures an assigner to use with this invocation handler adapter.- Parameters:
assigner
- The assigner to apply when defining this implementation.- Returns:
- This instrumentation with the given
assigner
configured.
-
withPrivilegedLookup
public abstract InvocationHandlerAdapter.AssignerConfigurable withPrivilegedLookup()
Configures that the method constants supplied to the invocation handler adapter are resolved using anjava.security.AccessController
.- Returns:
- This instrumentation with a privileged lookup configured.
-
apply
protected ByteCodeAppender.Size apply(org.objectweb.asm.MethodVisitor methodVisitor, Implementation.Context implementationContext, MethodDescription instrumentedMethod, StackManipulation preparingManipulation, FieldDescription fieldDescription)
Applies an implementation that delegates to a invocation handler.- Parameters:
methodVisitor
- The method visitor for writing the byte code to.implementationContext
- The implementation context for the current implementation.instrumentedMethod
- The method that is instrumented.preparingManipulation
- A stack manipulation that applies any preparation to the operand stack.fieldDescription
- The field that contains the value for the invocation handler.- Returns:
- The size of the applied assignment.
-
-