@API(status=INTERNAL,
since="5.0")
public class ExecutableInvoker
extends java.lang.Object
ExecutableInvoker
encapsulates the invocation of a
Executable
(i.e., method or constructor),
including support for dynamic resolution of method parameters via
ParameterResolvers
.Modifier and Type | Class and Description |
---|---|
static interface |
ExecutableInvoker.ReflectiveInterceptorCall<E extends java.lang.reflect.Executable,T> |
Modifier and Type | Field and Description |
---|---|
private static InvocationInterceptorChain |
interceptorChain |
private static Logger |
logger |
Constructor and Description |
---|
ExecutableInvoker() |
Modifier and Type | Method and Description |
---|---|
private static java.lang.String |
asLabel(java.lang.reflect.Executable executable) |
<T> T |
invoke(java.lang.reflect.Constructor<T> constructor,
java.util.Optional<java.lang.Object> outerInstance,
ExtensionContext extensionContext,
ExtensionRegistry extensionRegistry,
ExecutableInvoker.ReflectiveInterceptorCall<java.lang.reflect.Constructor<T>,T> interceptorCall)
Invoke the supplied constructor with the supplied outer instance and
dynamic parameter resolution.
|
private <E extends java.lang.reflect.Executable,T> |
invoke(InvocationInterceptor.Invocation<T> originalInvocation,
ReflectiveInvocationContext<E> invocationContext,
ExtensionContext extensionContext,
ExtensionRegistry extensionRegistry,
ExecutableInvoker.ReflectiveInterceptorCall<E,T> call) |
<T> T |
invoke(java.lang.reflect.Method method,
java.lang.Object target,
ExtensionContext extensionContext,
ExtensionRegistry extensionRegistry,
ExecutableInvoker.ReflectiveInterceptorCall<java.lang.reflect.Method,T> interceptorCall)
Invoke the supplied
static method with dynamic parameter resolution. |
private java.lang.Object |
resolveParameter(ParameterContext parameterContext,
java.lang.reflect.Executable executable,
ExtensionContext extensionContext,
ExtensionRegistry extensionRegistry) |
private java.lang.Object[] |
resolveParameters(java.lang.reflect.Executable executable,
java.util.Optional<java.lang.Object> target,
java.util.Optional<java.lang.Object> outerInstance,
ExtensionContext extensionContext,
ExtensionRegistry extensionRegistry)
Resolve the array of parameters for the supplied executable, target, and
outer instance.
|
private java.lang.Object[] |
resolveParameters(java.lang.reflect.Method method,
java.util.Optional<java.lang.Object> target,
ExtensionContext extensionContext,
ExtensionRegistry extensionRegistry)
Resolve the array of parameters for the supplied method and target.
|
private void |
validateResolvedType(java.lang.reflect.Parameter parameter,
java.lang.Object value,
java.lang.reflect.Executable executable,
ParameterResolver resolver) |
private static final Logger logger
private static final InvocationInterceptorChain interceptorChain
public <T> T invoke(java.lang.reflect.Constructor<T> constructor, java.util.Optional<java.lang.Object> outerInstance, ExtensionContext extensionContext, ExtensionRegistry extensionRegistry, ExecutableInvoker.ReflectiveInterceptorCall<java.lang.reflect.Constructor<T>,T> interceptorCall)
This method should only be used to invoke the constructor for an inner class.
constructor
- the constructor to invoke and resolve parameters forouterInstance
- the outer instance to supply as the first argument
to the constructor; empty, for top-level classesextensionContext
- the current ExtensionContext
extensionRegistry
- the ExtensionRegistry
to retrieve
ParameterResolvers
frominterceptorCall
- the call for intercepting this constructor
invocation via all registered interceptorspublic <T> T invoke(java.lang.reflect.Method method, java.lang.Object target, ExtensionContext extensionContext, ExtensionRegistry extensionRegistry, ExecutableInvoker.ReflectiveInterceptorCall<java.lang.reflect.Method,T> interceptorCall)
static
method with dynamic parameter resolution.method
- the method to invoke and resolve parameters forextensionContext
- the current ExtensionContext
extensionRegistry
- the ExtensionRegistry
to retrieve
ParameterResolvers
frominterceptorCall
- the call for intercepting this method invocation
via all registered interceptorsprivate <E extends java.lang.reflect.Executable,T> T invoke(InvocationInterceptor.Invocation<T> originalInvocation, ReflectiveInvocationContext<E> invocationContext, ExtensionContext extensionContext, ExtensionRegistry extensionRegistry, ExecutableInvoker.ReflectiveInterceptorCall<E,T> call)
private java.lang.Object[] resolveParameters(java.lang.reflect.Method method, java.util.Optional<java.lang.Object> target, ExtensionContext extensionContext, ExtensionRegistry extensionRegistry)
method
- the method for which to resolve parameterstarget
- an Optional
containing the target on which the
executable will be invoked; never null
but should be empty for
static methods and constructorsextensionContext
- the current ExtensionContext
extensionRegistry
- the ExtensionRegistry
to retrieve
ParameterResolvers
fromnull
though potentially emptyprivate java.lang.Object[] resolveParameters(java.lang.reflect.Executable executable, java.util.Optional<java.lang.Object> target, java.util.Optional<java.lang.Object> outerInstance, ExtensionContext extensionContext, ExtensionRegistry extensionRegistry)
executable
- the executable for which to resolve parameterstarget
- an Optional
containing the target on which the
executable will be invoked; never null
but should be empty for
static methods and constructorsouterInstance
- the outer instance that will be supplied as the
first argument to a constructor for an inner class; should be null
for methods and constructors for top-level or static classesextensionContext
- the current ExtensionContext
extensionRegistry
- the ExtensionRegistry
to retrieve
ParameterResolvers
fromnull
though potentially emptyprivate java.lang.Object resolveParameter(ParameterContext parameterContext, java.lang.reflect.Executable executable, ExtensionContext extensionContext, ExtensionRegistry extensionRegistry)
private void validateResolvedType(java.lang.reflect.Parameter parameter, java.lang.Object value, java.lang.reflect.Executable executable, ParameterResolver resolver)
private static java.lang.String asLabel(java.lang.reflect.Executable executable)