at.tuwien.ifs.somtoolbox.util
Class SubClassFinder

java.lang.Object
  extended by at.tuwien.ifs.somtoolbox.util.SubClassFinder

public class SubClassFinder
extends Object

Utility class to find subclasses of a class/interface.

Version:
$Id: SubClassFinder.java 3658 2010-07-14 13:23:51Z frank $
Author:
Jakob Frank
See Also:
findSubclassesOf(Class, boolean)

Constructor Summary
SubClassFinder()
           
 
Method Summary
private static
<E> void
checkClass(Class<?> subClass, Class<E> superClass, List<Class<? extends E>> resultList, boolean onlyDirect)
          Check if the class fqClassName is a subclass of c.
private static
<E> void
checkClass(String fqClassName, Class<E> c, List<Class<? extends E>> result, boolean onlyDirect)
          Check if the class fqClassName is a subclass of c.
static
<E> ArrayList<Class<? extends E>>
findSubclassesOf(Class<E> superClass)
          Find all subclasses of the given superClass.
static
<E> ArrayList<Class<? extends E>>
findSubclassesOf(Class<E> superClass, boolean onlyDirect)
          Find all subclasses of the given superClass.
static void main(String[] args)
          For testing: Searches and prints all subclasses of BackgroundImageVisualizer.
private static
<E> void
searchDir(File dir, Class<E> superClass, List<Class<? extends E>> resultList, boolean onlyDirect)
          Recursivly search through the given directory for subclasses of dir.
private static
<E> void
searchDir(File dir, Class<E> superClass, List<Class<? extends E>> resultList, String relPath, boolean onlyDirect)
          Recursivly search through the given directory for subclasses of dir.
private static
<E> void
searchJarFile(File jarFile, Class<E> superClass, List<Class<? extends E>> resultList, boolean onlyDirect)
          Search through the jar-file jarFile for subclasses of superClass.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SubClassFinder

public SubClassFinder()
Method Detail

main

public static void main(String[] args)
For testing: Searches and prints all subclasses of BackgroundImageVisualizer.

Parameters:
args - Superclasses

findSubclassesOf

public static <E> ArrayList<Class<? extends E>> findSubclassesOf(Class<E> superClass)
Find all subclasses of the given superClass. Searches through the complete classpath.

Type Parameters:
E - superClass class
Parameters:
superClass - the class
Returns:
ArrayList containing all found subclasses.

findSubclassesOf

public static <E> ArrayList<Class<? extends E>> findSubclassesOf(Class<E> superClass,
                                                                 boolean onlyDirect)
Find all subclasses of the given superClass. Searches through the complete classpath.

Type Parameters:
E - superClass class
Parameters:
superClass - the class (e.g. Object.class)
onlyDirect - it true only direct subclasses are found, i.e. classes that directly extend/implement superClass
Returns:
ArrayList containing all found subclasses.
See Also:
checkClass(Class, Class, List, boolean)

searchDir

private static <E> void searchDir(File dir,
                                  Class<E> superClass,
                                  List<Class<? extends E>> resultList,
                                  boolean onlyDirect)
Recursivly search through the given directory for subclasses of dir.

Type Parameters:
E - superClass class
Parameters:
dir - the Directory to search through.
superClass - the class to search subclasses of.
resultList - List where to add found subclasses to.
onlyDirect - only consider direct subclasses.
See Also:
checkClass(Class, Class, List, boolean)

searchDir

private static <E> void searchDir(File dir,
                                  Class<E> superClass,
                                  List<Class<? extends E>> resultList,
                                  String relPath,
                                  boolean onlyDirect)
Recursivly search through the given directory for subclasses of dir.

Type Parameters:
E - superClass class
Parameters:
dir - the Directory to search through.
superClass - the class to search subclasses of.
resultList - List where to add found subclasses to.
relPath - relative path within dir to search from, needed for recursion.
onlyDirect - only consider direct subclasses.
See Also:
searchDir(File, Class, List, boolean)

checkClass

private static <E> void checkClass(String fqClassName,
                                   Class<E> c,
                                   List<Class<? extends E>> result,
                                   boolean onlyDirect)
Check if the class fqClassName is a subclass of c.

Type Parameters:
E - superClass class
Parameters:
fqClassName - the fully qualified class name to check
c - the superClass
result - ArrayList where to add fqClassName if it is a subclass
onlyDirect - if true only consider direct subclasses, i.e. classes that directly extend/implement superClass
See Also:
checkClass(Class, Class, List, boolean)

checkClass

private static <E> void checkClass(Class<?> subClass,
                                   Class<E> superClass,
                                   List<Class<? extends E>> resultList,
                                   boolean onlyDirect)
Check if the class fqClassName is a subclass of c.

Type Parameters:
E - superClass class
Parameters:
subClass - the class to check
superClass - the superClass
resultList - ArrayList where to add fqClassName if it is a subclass
onlyDirect - if true only consider direct subclasses, i.e. classes that directly extend/implement superClass
See Also:
checkClass(Class, Class, List, boolean)

searchJarFile

private static <E> void searchJarFile(File jarFile,
                                      Class<E> superClass,
                                      List<Class<? extends E>> resultList,
                                      boolean onlyDirect)
Search through the jar-file jarFile for subclasses of superClass.

Type Parameters:
E - superClass class
Parameters:
jarFile - the jar-file to search
superClass - the superClass
resultList - ArrayList where to add subClasses of superClass
onlyDirect - if true only consider direct subclasses, i.e. classes that directly extend/implement superClass
See Also:
checkClass(Class, Class, List, boolean)