class DefaultParameterContext extends java.lang.Object implements ParameterContext
Modifier and Type | Field and Description |
---|---|
private int |
index |
private java.lang.reflect.Parameter |
parameter |
private java.util.Optional<java.lang.Object> |
target |
Constructor and Description |
---|
DefaultParameterContext(java.lang.reflect.Parameter parameter,
int index,
java.util.Optional<java.lang.Object> target) |
Modifier and Type | Method and Description |
---|---|
<A extends java.lang.annotation.Annotation> |
findAnnotation(java.lang.Class<A> annotationType)
Find the first annotation of
annotationType that is either
present or meta-present on the Parameter for
this context. |
<A extends java.lang.annotation.Annotation> |
findRepeatableAnnotations(java.lang.Class<A> annotationType)
Find all repeatable annotations of
annotationType that are either present or
meta-present on the Parameter for this context. |
private java.lang.reflect.AnnotatedElement |
getEffectiveAnnotatedParameter()
Due to a bug in
javac on JDK versions prior to JDK 9, looking up
annotations directly on a Parameter will fail for inner class
constructors. |
int |
getIndex()
Get the index of the
Parameter for this context within the
parameter list of the Executable that
declares the parameter. |
java.lang.reflect.Parameter |
getParameter()
Get the
Parameter for this context. |
java.util.Optional<java.lang.Object> |
getTarget()
Get the target on which the
Executable
that declares the Parameter for this context will
be invoked, if available. |
boolean |
isAnnotated(java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
Determine if an annotation of
annotationType is either
present or meta-present on the Parameter for
this context. |
java.lang.String |
toString() |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getDeclaringExecutable
private final java.lang.reflect.Parameter parameter
private final int index
private final java.util.Optional<java.lang.Object> target
DefaultParameterContext(java.lang.reflect.Parameter parameter, int index, java.util.Optional<java.lang.Object> target)
public java.lang.reflect.Parameter getParameter()
ParameterContext
Parameter
for this context.
When searching for annotations on the parameter in this context,
favor ParameterContext.isAnnotated(Class)
, ParameterContext.findAnnotation(Class)
, and
ParameterContext.findRepeatableAnnotations(Class)
over methods in the
Parameter
API due to a bug in javac
on JDK versions prior
to JDK 9.
getParameter
in interface ParameterContext
null
ParameterContext.getIndex()
public int getIndex()
ParameterContext
Parameter
for this context within the
parameter list of the Executable
that
declares the parameter.getIndex
in interface ParameterContext
ParameterContext.getParameter()
,
Executable.getParameters()
public java.util.Optional<java.lang.Object> getTarget()
ParameterContext
Executable
that declares the Parameter
for this context will
be invoked, if available.getTarget
in interface ParameterContext
Optional
containing the target on which the
Executable
will be invoked; never null
but will be
empty if the Executable
is a constructor or a
static
method.public boolean isAnnotated(java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
ParameterContext
annotationType
is either
present or meta-present on the Parameter
for
this context.
Favor the use of this method over directly invoking
AnnotatedElement.isAnnotationPresent(Class)
due to a bug in javac
on JDK versions prior to JDK 9.
isAnnotated
in interface ParameterContext
annotationType
- the annotation type to search for; never null
true
if the annotation is present or meta-presentParameterContext.findAnnotation(Class)
,
ParameterContext.findRepeatableAnnotations(Class)
public <A extends java.lang.annotation.Annotation> java.util.Optional<A> findAnnotation(java.lang.Class<A> annotationType)
ParameterContext
annotationType
that is either
present or meta-present on the Parameter
for
this context.
Favor the use of this method over directly invoking annotation lookup
methods in the Parameter
API due to a bug in javac
on JDK
versions prior to JDK 9.
findAnnotation
in interface ParameterContext
A
- the annotation typeannotationType
- the annotation type to search for; never null
Optional
containing the annotation; never null
but
potentially emptyParameterContext.isAnnotated(Class)
,
ParameterContext.findRepeatableAnnotations(Class)
public <A extends java.lang.annotation.Annotation> java.util.List<A> findRepeatableAnnotations(java.lang.Class<A> annotationType)
ParameterContext
annotationType
that are either present or
meta-present on the Parameter
for this context.
Favor the use of this method over directly invoking annotation lookup
methods in the Parameter
API due to a bug in javac
on JDK
versions prior to JDK 9.
findRepeatableAnnotations
in interface ParameterContext
A
- the annotation typeannotationType
- the repeatable annotation type to search for; never
null
null
nor
mutable, but potentially emptyParameterContext.isAnnotated(Class)
,
ParameterContext.findAnnotation(Class)
,
Repeatable
private java.lang.reflect.AnnotatedElement getEffectiveAnnotatedParameter()
javac
on JDK versions prior to JDK 9, looking up
annotations directly on a Parameter
will fail for inner class
constructors.
javac
on JDK versions prior to JDK 9The parameter annotations array in the compiled byte code for the user's test class excludes an entry for the implicit enclosing instance parameter for an inner class constructor.
JUnit provides a workaround for this off-by-one error by helping extension
authors to access annotations on the preceding Parameter
object (i.e.,
index - 1
). The current index must never be
zero in such situations since JUnit Jupiter should never ask a
ParameterResolver
to resolve a parameter for the implicit enclosing
instance parameter.
The AnnotatedElement
returned by this method should never be cast and
treated as a Parameter
since the metadata (e.g., Parameter.getName()
,
Parameter.getType()
, etc.) will not match those for the declared parameter
at the given index in an inner class constructor.
Parameter
for this context, or the effective
Parameter
if the aforementioned bug is detectedpublic java.lang.String toString()
toString
in class java.lang.Object