Class ClassFinder

  • All Implemented Interfaces:
    IAnnotationFinder

    public class ClassFinder
    extends AbstractFinder
    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. The getClassesNotLoaded() method can be used immediately after any find* method to get a list of classes which matched the find requirements (i.e. contained the annotation), but were unable to be loaded.
    Version:
    $Rev: 1778104 $ $Date: 2017-01-10 11:05:25 +0100 (Tue, 10 Jan 2017) $
    • Field Detail

      • classLoader

        private final java.lang.ClassLoader classLoader
    • Constructor Detail

      • ClassFinder

        public ClassFinder​(java.lang.ClassLoader classLoader)
                    throws java.lang.Exception
        Creates a ClassFinder that will search the urls in the specified classloader excluding the urls in the classloader's parent. To include the parent classloader, use: new ClassFinder(classLoader, false); To exclude the parent's parent, use: new ClassFinder(classLoader, classLoader.getParent().getParent());
        Parameters:
        classLoader - source of classes to scan
        Throws:
        java.lang.Exception - if something goes wrong
      • ClassFinder

        public ClassFinder​(java.lang.ClassLoader classLoader,
                           boolean excludeParent)
                    throws java.lang.Exception
        Creates a ClassFinder that will search the urls in the specified classloader.
        Parameters:
        classLoader - source of classes to scan
        excludeParent - Allegedly excludes classes from parent classloader, whatever that might mean
        Throws:
        java.lang.Exception - if something goes wrong.
      • ClassFinder

        public ClassFinder​(java.lang.ClassLoader classLoader,
                           java.lang.ClassLoader exclude)
                    throws java.lang.Exception
        Creates a ClassFinder that will search the urls in the specified classloader excluding the urls in the 'exclude' classloader.
        Parameters:
        classLoader - source of classes to scan
        exclude - source of classes to exclude from scanning
        Throws:
        java.lang.Exception - if something goes wrong
      • ClassFinder

        public ClassFinder​(java.lang.ClassLoader classLoader,
                           java.net.URL url)
      • ClassFinder

        public ClassFinder​(java.lang.ClassLoader classLoader,
                           java.util.Collection<java.net.URL> urls)
      • ClassFinder

        public ClassFinder​(java.lang.Class<?>... classes)
      • ClassFinder

        public ClassFinder​(java.util.List<java.lang.Class<?>> classes)
    • Method Detail

      • getUrls

        private static java.util.Collection<java.net.URL> getUrls​(java.lang.ClassLoader classLoader,
                                                                  boolean excludeParent)
                                                           throws java.io.IOException
        Throws:
        java.io.IOException
      • getUrls

        private static java.util.Collection<java.net.URL> getUrls​(java.lang.ClassLoader classLoader,
                                                                  java.lang.ClassLoader excludeParent)
                                                           throws java.io.IOException
        Throws:
        java.io.IOException
      • getResource

        protected java.net.URL getResource​(java.lang.String className)
        Specified by:
        getResource in class AbstractFinder
      • loadClass

        protected java.lang.Class<?> loadClass​(java.lang.String fixedName)
                                        throws java.lang.ClassNotFoundException
        Specified by:
        loadClass in class AbstractFinder
        Throws:
        java.lang.ClassNotFoundException
      • file

        private java.util.List<java.lang.String> file​(java.net.URL location)
      • scanDir

        private void scanDir​(java.io.File dir,
                             java.util.List<java.lang.String> classNames,
                             java.lang.String packageName)
      • jar

        private java.util.List<java.lang.String> jar​(java.net.URL location)
                                              throws java.io.IOException
        Throws:
        java.io.IOException
      • jar

        private java.util.List<java.lang.String> jar​(java.util.jar.JarInputStream jarStream)
                                              throws java.io.IOException
        Throws:
        java.io.IOException