Class AbstractFinder

  • All Implemented Interfaces:
    IAnnotationFinder
    Direct Known Subclasses:
    ClassFinder

    public abstract class AbstractFinder
    extends java.lang.Object
    implements IAnnotationFinder
    Version:
    $Rev: 1881759 $ $Date: 2020-09-16 10:29:43 +0200 (Wed, 16 Sep 2020) $
    • Field Detail

      • annotated

        private final java.util.Map<java.lang.String,​java.util.List<AbstractFinder.Info>> annotated
      • classesNotLoaded

        private final java.util.List<java.lang.String> classesNotLoaded
    • Constructor Detail

      • AbstractFinder

        public AbstractFinder()
    • Method Detail

      • getResource

        protected abstract java.net.URL getResource​(java.lang.String className)
      • loadClass

        protected abstract java.lang.Class<?> loadClass​(java.lang.String fixedName)
                                                 throws java.lang.ClassNotFoundException
        Throws:
        java.lang.ClassNotFoundException
      • link

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

        private void linkParent​(AbstractFinder.ClassInfo classInfo)
                         throws java.io.IOException
        Throws:
        java.io.IOException
      • linkInterfaces

        private void linkInterfaces​(AbstractFinder.ClassInfo classInfo)
                             throws java.io.IOException
        Throws:
        java.io.IOException
      • 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
      • 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
      • 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
      • 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
      • 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
      • 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
      • findSubclasses

        private <T> void findSubclasses​(AbstractFinder.ClassInfo classInfo,
                                        java.util.List<java.lang.Class<? extends T>> found,
                                        java.lang.Class<T> clazz)
      • _findSubclasses

        private <T> java.util.List<java.lang.Class<? extends T>> _findSubclasses​(java.lang.Class<T> clazz)
      • findImplementations

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

        private java.util.List<AbstractFinder.ClassInfo> collectImplementations​(java.lang.String interfaceName)
      • getAnnotationInfos

        protected java.util.List<AbstractFinder.Info> getAnnotationInfos​(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.io.InputStream in,
                                    java.lang.String path)
                             throws java.io.IOException
        Throws:
        java.io.IOException
      • readClassDef

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