Class AnnotationFinder

  • All Implemented Interfaces:
    IAnnotationFinder

    public class AnnotationFinder
    extends java.lang.Object
    implements IAnnotationFinder
    ClassFinder searches the classpath of the specified classloader for packages, classes, constructors, methods, or fields with specific annotations.

    For security reasons ASM is used to find the annotations. Classes are not loaded unless they match the requirements of a called findAnnotated* method. Once loaded, these classes are cached.

    Version:
    $Rev: 1667275 $ $Date: 2015-03-17 12:38:58 +0100 (Tue, 17 Mar 2015) $
    • Constructor Detail

      • AnnotationFinder

        public AnnotationFinder​(Archive archive,
                                boolean checkRuntimeAnnotation)
        Parameters:
        archive -
        checkRuntimeAnnotation - Has no effect on findMetaAnnotated* methods
      • AnnotationFinder

        public AnnotationFinder​(Archive archive)
    • Method Detail

      • newAnnotatedMap

        protected java.util.Map<java.lang.String,​java.util.List<AnnotationFinder.Info>> newAnnotatedMap()
      • hasMetaAnnotations

        public boolean hasMetaAnnotations()
      • getArchive

        public Archive getArchive()
      • link

        public AnnotationFinder link()
        The link() method must be called to successfully use the findSubclasses and findImplementations methods
        Returns:
        Throws:
        java.io.IOException
      • enableFindImplementations

        public AnnotationFinder enableFindImplementations()
      • isJvm

        protected boolean isJvm​(java.lang.String name)
      • isAnnotationPresent

        public boolean isAnnotationPresent​(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
        Specified by:
        isAnnotationPresent in interface IAnnotationFinder
      • getClassesNotLoaded

        public java.util.List<java.lang.String> getClassesNotLoaded()
        Returns a list of classes that could not be loaded in last invoked findAnnotated* method.

        The list will only contain entries of classes whose byte code matched the requirements of last invoked find* method, but were unable to be loaded and included in the results.

        The list returned is unmodifiable. Once obtained, the returned list will be a live view of the results from the last findAnnotated* method call.

        This method is not thread safe.

        Specified by:
        getClassesNotLoaded in interface IAnnotationFinder
        Returns:
        an unmodifiable live view of classes that could not be loaded in previous findAnnotated* call.
      • findAnnotatedPackages

        public java.util.List<java.lang.Package> findAnnotatedPackages​(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
        Specified by:
        findAnnotatedPackages in interface IAnnotationFinder
      • findAnnotatedClasses

        public java.util.List<java.lang.Class<?>> findAnnotatedClasses​(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
        Specified by:
        findAnnotatedClasses in interface IAnnotationFinder
      • findMetaAnnotatedClasses

        public java.util.List<Annotated<java.lang.Class<?>>> findMetaAnnotatedClasses​(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
        Specified by:
        findMetaAnnotatedClasses in interface IAnnotationFinder
      • findInheritedAnnotatedClasses

        public java.util.List<java.lang.Class<?>> findInheritedAnnotatedClasses​(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
        Naive implementation - works extremelly slow O(n^3)
        Specified by:
        findInheritedAnnotatedClasses in interface IAnnotationFinder
        Parameters:
        annotation -
        Returns:
        list of directly or indirectly (inherited) annotated classes
      • findAnnotatedMethods

        public java.util.List<java.lang.reflect.Method> findAnnotatedMethods​(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
        Specified by:
        findAnnotatedMethods in interface IAnnotationFinder
      • findAnnotatedMethodParameters

        public java.util.List<Parameter<java.lang.reflect.Method>> findAnnotatedMethodParameters​(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
      • findMetaAnnotatedMethods

        public java.util.List<Annotated<java.lang.reflect.Method>> findMetaAnnotatedMethods​(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
        Specified by:
        findMetaAnnotatedMethods in interface IAnnotationFinder
      • findMetaAnnotatedFields

        public java.util.List<Annotated<java.lang.reflect.Field>> findMetaAnnotatedFields​(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
        Specified by:
        findMetaAnnotatedFields in interface IAnnotationFinder
      • findAnnotatedConstructors

        public java.util.List<java.lang.reflect.Constructor> findAnnotatedConstructors​(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
        Specified by:
        findAnnotatedConstructors in interface IAnnotationFinder
      • findAnnotatedConstructorParameters

        public java.util.List<Parameter<java.lang.reflect.Constructor<?>>> findAnnotatedConstructorParameters​(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
      • findAnnotatedFields

        public java.util.List<java.lang.reflect.Field> findAnnotatedFields​(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
        Specified by:
        findAnnotatedFields in interface IAnnotationFinder
      • findClassesInPackage

        public java.util.List<java.lang.Class<?>> findClassesInPackage​(java.lang.String packageName,
                                                                       boolean recursive)
        Specified by:
        findClassesInPackage in interface IAnnotationFinder
      • findSubclasses

        public <T> java.util.List<java.lang.Class<? extends T>> findSubclasses​(java.lang.Class<T> clazz)
        Specified by:
        findSubclasses in interface IAnnotationFinder
      • findImplementations

        public <T> java.util.List<java.lang.Class<? extends T>> findImplementations​(java.lang.Class<T> clazz)
        Specified by:
        findImplementations in interface IAnnotationFinder
      • getAnnotationInfos

        protected java.util.List<AnnotationFinder.Info> getAnnotationInfos​(java.lang.String name)
      • initAnnotationInfos

        protected java.util.List<AnnotationFinder.Info> initAnnotationInfos​(java.lang.String name)
      • readClassDef

        protected void readClassDef​(java.lang.String className)
      • readClassDef

        protected void readClassDef​(java.io.InputStream in)
                             throws java.io.IOException
        Throws:
        java.io.IOException
      • readClassDef

        protected void readClassDef​(java.lang.Class clazz)
      • select

        public AnnotationFinder select​(java.lang.Iterable<java.lang.String> clazz)