org.mule.util.scan
Class ClasspathScanner

java.lang.Object
  extended by org.mule.util.scan.ClasspathScanner

public class ClasspathScanner
extends Object

This class can be used to scan the classpath for classtypes (or interfaces they implement) or for annotations on the classpath. The type of scanner used depends on the class type passed in. There are currently 3 types of scanner;

This scanner uses ASM to search class byte code rather than the classes themselves making orders of magnitude better performance and uses a lot less memory. ASM seems to be the fasted of the byte code manipulation libraries i.e. JavaAssist or BCEL Note that the scanner will not scan inner or anonymous classes.


Field Summary
static int DEFAULT_FLAGS
           
static int INCLUDE_ABSTRACT
           
static int INCLUDE_ANONYMOUS
           
static int INCLUDE_INNER
           
static int INCLUDE_INTERFACE
           
protected  Log logger
          logger used by this class
 
Constructor Summary
ClasspathScanner(ClassLoader classLoader, String... basepaths)
           
ClasspathScanner(String... basepaths)
           
 
Method Summary
protected
<T> void
addClassToSet(Class<T> c, Set<Class<T>> set, int flags)
           
protected  ClassScanner getScanner(Class<?> clazz)
          Works out the correct scanner based on the class passed in

Note that these could be better architected by breaking out filters into strategy objects, but for now this suits my needs

protected  boolean hasFlag(int flags, int flag)
           
protected  Class<?> loadClass(String name)
           
protected
<T> Set<Class<T>>
processFileUrl(URL url, String basepath, Class<T> clazz, int flags)
           
protected
<T> Set<Class<T>>
processJarUrl(URL url, String basepath, Class<T> clazz, int flags)
           
<T> Set<Class<T>>
scanFor(Class<T> clazz)
           
<T> Set<Class<T>>
scanFor(Class<T> clazz, int flags)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

INCLUDE_ABSTRACT

public static final int INCLUDE_ABSTRACT
See Also:
Constant Field Values

INCLUDE_INTERFACE

public static final int INCLUDE_INTERFACE
See Also:
Constant Field Values

INCLUDE_INNER

public static final int INCLUDE_INNER
See Also:
Constant Field Values

INCLUDE_ANONYMOUS

public static final int INCLUDE_ANONYMOUS
See Also:
Constant Field Values

DEFAULT_FLAGS

public static final int DEFAULT_FLAGS
See Also:
Constant Field Values

logger

protected final transient Log logger
logger used by this class

Constructor Detail

ClasspathScanner

public ClasspathScanner(String... basepaths)

ClasspathScanner

public ClasspathScanner(ClassLoader classLoader,
                        String... basepaths)
Method Detail

scanFor

public <T> Set<Class<T>> scanFor(Class<T> clazz)
                      throws IOException
Throws:
IOException

scanFor

public <T> Set<Class<T>> scanFor(Class<T> clazz,
                                 int flags)
                      throws IOException
Throws:
IOException

processJarUrl

protected <T> Set<Class<T>> processJarUrl(URL url,
                                          String basepath,
                                          Class<T> clazz,
                                          int flags)
                               throws IOException
Throws:
IOException

hasFlag

protected boolean hasFlag(int flags,
                          int flag)

processFileUrl

protected <T> Set<Class<T>> processFileUrl(URL url,
                                           String basepath,
                                           Class<T> clazz,
                                           int flags)
                                throws IOException
Throws:
IOException

addClassToSet

protected <T> void addClassToSet(Class<T> c,
                                 Set<Class<T>> set,
                                 int flags)

loadClass

protected Class<?> loadClass(String name)

getScanner

protected ClassScanner getScanner(Class<?> clazz)
Works out the correct scanner based on the class passed in

Note that these could be better architected by breaking out filters into strategy objects, but for now this suits my needs

Parameters:
clazz - the type to scan for
Returns:
a scanner suitable for handling the type passed in
See Also:
AnnotationsScanner, InterfaceClassScanner, ImplementationClassScanner


Copyright © 2003-2012 MuleSoft, Inc.. All Rights Reserved.