Class AnnotationSupport
- java.lang.Object
-
- org.junit.platform.commons.support.AnnotationSupport
-
@API(status=MAINTAINED, since="1.0") public final class AnnotationSupport extends java.lang.ObjectAnnotationSupportprovides static utility methods for common tasks regarding annotations — for example, checking if a class, method, or field is annotated with a particular annotation; finding annotations on a given class, method, or field; finding fields or methods annotated with a particular annotation, etc.TestEngineand extension authors are encouraged to use these supported methods in order to align with the behavior of the JUnit Platform.- Since:
- 1.0
- See Also:
ClassSupport,ModifierSupport,ReflectionSupport
-
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static java.util.List<java.lang.reflect.Field>findAnnotatedFields(java.lang.Class<?> clazz, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)Find all fields of the supplied class or interface that are annotated or meta-annotated with the specifiedannotationType, using top-down search semantics within the type hierarchy.static java.util.List<java.lang.reflect.Field>findAnnotatedFields(java.lang.Class<?> clazz, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType, java.util.function.Predicate<java.lang.reflect.Field> predicate, HierarchyTraversalMode traversalMode)Find all fields of the supplied class or interface that are annotated or meta-annotated with the specifiedannotationTypeand match the specifiedpredicate, using the supplied hierarchy traversal mode.static java.util.List<java.lang.Object>findAnnotatedFieldValues(java.lang.Class<?> clazz, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)Find the values of all static fields of the supplied class or interface that are annotated or meta-annotated with the specifiedannotationType, using top-down search semantics within the type hierarchy.static <T> java.util.List<T>findAnnotatedFieldValues(java.lang.Class<?> clazz, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType, java.lang.Class<T> fieldType)Find the values of all static fields of the supplied class or interface that are declared to be of the specifiedfieldTypeand are annotated or meta-annotated with the specifiedannotationType, using top-down search semantics within the type hierarchy.static java.util.List<java.lang.Object>findAnnotatedFieldValues(java.lang.Object instance, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)Find the values of all non-static fields of the suppliedinstancethat are annotated or meta-annotated with the specifiedannotationType, using top-down search semantics within the type hierarchy.static <T> java.util.List<T>findAnnotatedFieldValues(java.lang.Object instance, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType, java.lang.Class<T> fieldType)Find the values of all non-static fields of the suppliedinstancethat are declared to be of the specifiedfieldTypeand are annotated or meta-annotated with the specifiedannotationType, using top-down search semantics within the type hierarchy.static java.util.List<java.lang.reflect.Method>findAnnotatedMethods(java.lang.Class<?> clazz, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType, HierarchyTraversalMode traversalMode)Find all methods of the supplied class or interface that are annotated or meta-annotated with the specifiedannotationType.static <A extends java.lang.annotation.Annotation>
java.util.Optional<A>findAnnotation(java.lang.reflect.AnnotatedElement element, java.lang.Class<A> annotationType)Find the first annotation ofannotationTypethat is either directly present, meta-present, or indirectly present on the suppliedelement.static <A extends java.lang.annotation.Annotation>
java.util.Optional<A>findAnnotation(java.util.Optional<? extends java.lang.reflect.AnnotatedElement> element, java.lang.Class<A> annotationType)Find the first annotation ofannotationTypethat is either present or meta-present on the supplied optionalelement.static java.util.List<java.lang.reflect.Field>findPublicAnnotatedFields(java.lang.Class<?> clazz, java.lang.Class<?> fieldType, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)Find allpublicfields of the supplied class or interface that are declared to be of the specifiedfieldTypeand are annotated or meta-annotated with the specifiedannotationType.static <A extends java.lang.annotation.Annotation>
java.util.List<A>findRepeatableAnnotations(java.lang.reflect.AnnotatedElement element, java.lang.Class<A> annotationType)Find all repeatable annotations of the suppliedannotationTypethat are either present, indirectly present, or meta-present on the suppliedAnnotatedElement.static <A extends java.lang.annotation.Annotation>
java.util.List<A>findRepeatableAnnotations(java.util.Optional<? extends java.lang.reflect.AnnotatedElement> element, java.lang.Class<A> annotationType)Find all repeatable annotations of the suppliedannotationTypethat are either present, indirectly present, or meta-present on the supplied optionalelement.static booleanisAnnotated(java.lang.reflect.AnnotatedElement element, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)Determine if an annotation ofannotationTypeis either present or meta-present on the suppliedelement.static booleanisAnnotated(java.util.Optional<? extends java.lang.reflect.AnnotatedElement> element, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)Determine if an annotation ofannotationTypeis either present or meta-present on the supplied optionalelement.
-
-
-
Method Detail
-
isAnnotated
@API(status=MAINTAINED, since="1.3") public static boolean isAnnotated(java.util.Optional<? extends java.lang.reflect.AnnotatedElement> element, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)Determine if an annotation ofannotationTypeis either present or meta-present on the supplied optionalelement.- Parameters:
element- anOptionalcontaining the element on which to search for the annotation; may benullor emptyannotationType- the annotation type to search for; nevernull- Returns:
trueif the annotation is present or meta-present- Since:
- 1.3
- See Also:
isAnnotated(AnnotatedElement, Class),findAnnotation(Optional, Class)
-
isAnnotated
public static boolean isAnnotated(java.lang.reflect.AnnotatedElement element, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)Determine if an annotation ofannotationTypeis either present or meta-present on the suppliedelement.- Parameters:
element- the element on which to search for the annotation; may benullannotationType- the annotation type to search for; nevernull- Returns:
trueif the annotation is present or meta-present- See Also:
isAnnotated(Optional, Class),findAnnotation(AnnotatedElement, Class)
-
findAnnotation
@API(status=MAINTAINED, since="1.1") public static <A extends java.lang.annotation.Annotation> java.util.Optional<A> findAnnotation(java.util.Optional<? extends java.lang.reflect.AnnotatedElement> element, java.lang.Class<A> annotationType)Find the first annotation ofannotationTypethat is either present or meta-present on the supplied optionalelement.- Type Parameters:
A- the annotation type- Parameters:
element- anOptionalcontaining the element on which to search for the annotation; may benullor emptyannotationType- the annotation type to search for; nevernull- Returns:
- an
Optionalcontaining the annotation; nevernullbut potentially empty - Since:
- 1.1
- See Also:
findAnnotation(AnnotatedElement, Class)
-
findAnnotation
public static <A extends java.lang.annotation.Annotation> java.util.Optional<A> findAnnotation(java.lang.reflect.AnnotatedElement element, java.lang.Class<A> annotationType)Find the first annotation ofannotationTypethat is either directly present, meta-present, or indirectly present on the suppliedelement.If the element is a class and the annotation is neither directly present nor meta-present on the class, this method will additionally search on interfaces implemented by the class before finding an annotation that is indirectly present on the class.
- Type Parameters:
A- the annotation type- Parameters:
element- the element on which to search for the annotation; may benullannotationType- the annotation type to search for; nevernull- Returns:
- an
Optionalcontaining the annotation; nevernullbut potentially empty
-
findRepeatableAnnotations
@API(status=MAINTAINED, since="1.5") public static <A extends java.lang.annotation.Annotation> java.util.List<A> findRepeatableAnnotations(java.util.Optional<? extends java.lang.reflect.AnnotatedElement> element, java.lang.Class<A> annotationType)Find all repeatable annotations of the suppliedannotationTypethat are either present, indirectly present, or meta-present on the supplied optionalelement.See
findRepeatableAnnotations(AnnotatedElement, Class)for details of the algorithm used.- Type Parameters:
A- the annotation type- Parameters:
element- anOptionalcontaining the element on which to search for the annotation; may benullor emptyannotationType- the repeatable annotation type to search for; nevernull- Returns:
- an immutable list of all such annotations found; never
null - Since:
- 1.5
- See Also:
Repeatable,Inherited,findRepeatableAnnotations(AnnotatedElement, Class)
-
findRepeatableAnnotations
public static <A extends java.lang.annotation.Annotation> java.util.List<A> findRepeatableAnnotations(java.lang.reflect.AnnotatedElement element, java.lang.Class<A> annotationType)Find all repeatable annotations of the suppliedannotationTypethat are either present, indirectly present, or meta-present on the suppliedAnnotatedElement.This method extends the functionality of
AnnotatedElement.getAnnotationsByType(Class)with additional support for meta-annotations.In addition, if the element is a class and the repeatable annotation is
@Inherited, this method will search on superclasses first in order to support top-down semantics. The result is that this algorithm finds repeatable annotations that would be shadowed and therefore not visible according to Java's standard semantics for inherited, repeatable annotations, but most developers will naturally assume that all repeatable annotations in JUnit are discovered regardless of whether they are declared stand-alone, in a container, or as a meta-annotation (e.g., multiple declarations of@ExtendWithwithin a test class hierarchy).If the element is a class and the repeatable annotation is not discovered within the class hierarchy, this method will additionally search on interfaces implemented by each class in the hierarchy.
If the supplied
elementisnull, this method simply returns an empty list.As of JUnit Platform 1.5, the search algorithm will also find repeatable annotations used as meta-annotations on other repeatable annotations.
- Type Parameters:
A- the annotation type- Parameters:
element- the element to search on; may benullannotationType- the repeatable annotation type to search for; nevernull- Returns:
- an immutable list of all such annotations found; never
null - See Also:
Repeatable,Inherited
-
findPublicAnnotatedFields
public static java.util.List<java.lang.reflect.Field> findPublicAnnotatedFields(java.lang.Class<?> clazz, java.lang.Class<?> fieldType, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)Find allpublicfields of the supplied class or interface that are declared to be of the specifiedfieldTypeand are annotated or meta-annotated with the specifiedannotationType.Consult the Javadoc for
Class.getFields()for details on inheritance and ordering.- Parameters:
clazz- the class or interface in which to find the fields; nevernullfieldType- the declared type of fields to find; nevernullannotationType- the annotation type to search for; nevernull- Returns:
- the list of all such fields found; neither
nullnor mutable - See Also:
Class.getFields(),Field.getType(),findAnnotatedFields(Class, Class),findAnnotatedFields(Class, Class, Predicate, HierarchyTraversalMode),ReflectionSupport.findFields(Class, Predicate, HierarchyTraversalMode),ReflectionSupport.tryToReadFieldValue(Field, Object)
-
findAnnotatedFields
@API(status=MAINTAINED, since="1.4") public static java.util.List<java.lang.reflect.Field> findAnnotatedFields(java.lang.Class<?> clazz, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)Find all fields of the supplied class or interface that are annotated or meta-annotated with the specifiedannotationType, using top-down search semantics within the type hierarchy.Fields declared in the same class or interface will be ordered using an algorithm that is deterministic but intentionally nonobvious.
The results will not contain fields that are hidden or synthetic.
- Parameters:
clazz- the class or interface in which to find the fields; nevernullannotationType- the annotation type to search for; nevernull- Returns:
- the list of all such fields found; neither
nullnor mutable - Since:
- 1.4
- See Also:
Class.getDeclaredFields(),findPublicAnnotatedFields(Class, Class, Class),findAnnotatedFields(Class, Class, Predicate, HierarchyTraversalMode),ReflectionSupport.findFields(Class, Predicate, HierarchyTraversalMode),ReflectionSupport.tryToReadFieldValue(Field, Object)
-
findAnnotatedFields
@API(status=MAINTAINED, since="1.4") public static java.util.List<java.lang.reflect.Field> findAnnotatedFields(java.lang.Class<?> clazz, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType, java.util.function.Predicate<java.lang.reflect.Field> predicate, HierarchyTraversalMode traversalMode)Find all fields of the supplied class or interface that are annotated or meta-annotated with the specifiedannotationTypeand match the specifiedpredicate, using the supplied hierarchy traversal mode.Fields declared in the same class or interface will be ordered using an algorithm that is deterministic but intentionally nonobvious.
The results will not contain fields that are hidden or synthetic.
- Parameters:
clazz- the class or interface in which to find the fields; nevernullannotationType- the annotation type to search for; nevernullpredicate- the field filter; nevernulltraversalMode- the hierarchy traversal mode; nevernull- Returns:
- the list of all such fields found; neither
nullnor mutable - Since:
- 1.4
- See Also:
Class.getDeclaredFields(),findAnnotatedFields(Class, Class),ReflectionSupport.findFields(Class, Predicate, HierarchyTraversalMode),ReflectionSupport.tryToReadFieldValue(Field, Object)
-
findAnnotatedFieldValues
@API(status=MAINTAINED, since="1.4") public static java.util.List<java.lang.Object> findAnnotatedFieldValues(java.lang.Object instance, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)Find the values of all non-static fields of the suppliedinstancethat are annotated or meta-annotated with the specifiedannotationType, using top-down search semantics within the type hierarchy.Values from fields declared in the same class or interface will be ordered using an algorithm that is deterministic but intentionally nonobvious.
The results will not contain values from fields that are hidden or synthetic.
- Parameters:
instance- the instance in which to find the fields; nevernullannotationType- the annotation type to search for; nevernull- Returns:
- the list of all such field values found; neither
nullnor mutable - Since:
- 1.4
- See Also:
findAnnotatedFields(Class, Class),findAnnotatedFields(Class, Class, Predicate, HierarchyTraversalMode),ReflectionSupport.findFields(Class, Predicate, HierarchyTraversalMode),ReflectionSupport.tryToReadFieldValue(Field, Object)
-
findAnnotatedFieldValues
@API(status=MAINTAINED, since="1.4") public static java.util.List<java.lang.Object> findAnnotatedFieldValues(java.lang.Class<?> clazz, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)Find the values of all static fields of the supplied class or interface that are annotated or meta-annotated with the specifiedannotationType, using top-down search semantics within the type hierarchy.Values from fields declared in the same class or interface will be ordered using an algorithm that is deterministic but intentionally nonobvious.
The results will not contain values from fields that are hidden or synthetic.
- Parameters:
clazz- the class or interface in which to find the fields; nevernullannotationType- the annotation type to search for; nevernull- Returns:
- the list of all such field values found; neither
nullnor mutable - Since:
- 1.4
- See Also:
findAnnotatedFields(Class, Class),findAnnotatedFields(Class, Class, Predicate, HierarchyTraversalMode),ReflectionSupport.findFields(Class, Predicate, HierarchyTraversalMode),ReflectionSupport.tryToReadFieldValue(Field, Object)
-
findAnnotatedFieldValues
@API(status=MAINTAINED, since="1.4") public static <T> java.util.List<T> findAnnotatedFieldValues(java.lang.Object instance, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType, java.lang.Class<T> fieldType)Find the values of all non-static fields of the suppliedinstancethat are declared to be of the specifiedfieldTypeand are annotated or meta-annotated with the specifiedannotationType, using top-down search semantics within the type hierarchy.Values from fields declared in the same class or interface will be ordered using an algorithm that is deterministic but intentionally nonobvious.
The results will not contain values from fields that are hidden or synthetic.
- Parameters:
instance- the instance in which to find the fields; nevernullannotationType- the annotation type to search for; nevernullfieldType- the declared type of fields to find; nevernull- Returns:
- the list of all such field values found; neither
nullnor mutable - Since:
- 1.4
- See Also:
Field.getType(),findAnnotatedFields(Class, Class),findAnnotatedFields(Class, Class, Predicate, HierarchyTraversalMode),ReflectionSupport.findFields(Class, Predicate, HierarchyTraversalMode),ReflectionSupport.tryToReadFieldValue(Field, Object)
-
findAnnotatedFieldValues
@API(status=MAINTAINED, since="1.4") public static <T> java.util.List<T> findAnnotatedFieldValues(java.lang.Class<?> clazz, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType, java.lang.Class<T> fieldType)Find the values of all static fields of the supplied class or interface that are declared to be of the specifiedfieldTypeand are annotated or meta-annotated with the specifiedannotationType, using top-down search semantics within the type hierarchy.Values from fields declared in the same class or interface will be ordered using an algorithm that is deterministic but intentionally nonobvious.
The results will not contain values from fields that are hidden or synthetic.
- Parameters:
clazz- the class or interface in which to find the fields; nevernullannotationType- the annotation type to search for; nevernullfieldType- the declared type of fields to find; nevernull- Returns:
- the list of all such field values found; neither
nullnor mutable - Since:
- 1.4
- See Also:
Field.getType(),findAnnotatedFields(Class, Class),findAnnotatedFields(Class, Class, Predicate, HierarchyTraversalMode),ReflectionSupport.findFields(Class, Predicate, HierarchyTraversalMode),ReflectionSupport.tryToReadFieldValue(Field, Object)
-
findAnnotatedMethods
public static java.util.List<java.lang.reflect.Method> findAnnotatedMethods(java.lang.Class<?> clazz, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType, HierarchyTraversalMode traversalMode)Find all methods of the supplied class or interface that are annotated or meta-annotated with the specifiedannotationType.- Parameters:
clazz- the class or interface in which to find the methods; nevernullannotationType- the annotation type to search for; nevernulltraversalMode- the hierarchy traversal mode; nevernull- Returns:
- the list of all such methods found; neither
nullnor mutable
-
-