org.apache.xbean.finder
Class AbstractFinder

java.lang.Object
  extended by org.apache.xbean.finder.AbstractFinder
All Implemented Interfaces:
IAnnotationFinder
Direct Known Subclasses:
BundleAnnotationFinder, ClassFinder

public abstract class AbstractFinder
extends java.lang.Object
implements IAnnotationFinder

Version:
$Rev: 1165841 $ $Date: 2011-09-06 14:02:40 -0700 (Tue, 06 Sep 2011) $

Nested Class Summary
 class AbstractFinder.Annotatable
           
 class AbstractFinder.AnnotationInfo
           
 class AbstractFinder.ClassInfo
           
 class AbstractFinder.FieldInfo
           
static class AbstractFinder.GenericAwareInfoBuildingVisitor
           
static interface AbstractFinder.Info
           
 class AbstractFinder.InfoBuildingVisitor
           
 class AbstractFinder.MethodInfo
           
 class AbstractFinder.PackageInfo
           
 
Field Summary
protected  java.util.Map<java.lang.String,AbstractFinder.ClassInfo> classInfos
           
protected  java.util.Map<java.lang.String,AbstractFinder.ClassInfo> originalInfos
           
 
Constructor Summary
AbstractFinder()
           
 
Method Summary
 java.util.List<java.lang.Class<?>> findAnnotatedClasses(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
           
 java.util.List<java.lang.reflect.Constructor> findAnnotatedConstructors(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
           
 java.util.List<java.lang.reflect.Field> findAnnotatedFields(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
           
 java.util.List<java.lang.reflect.Method> findAnnotatedMethods(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
           
 java.util.List<java.lang.Package> findAnnotatedPackages(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
           
 java.util.List<java.lang.Class<?>> findClassesInPackage(java.lang.String packageName, boolean recursive)
           
<T> java.util.List<java.lang.Class<? extends T>>
findImplementations(java.lang.Class<T> clazz)
           
 java.util.List<java.lang.Class<?>> findInheritedAnnotatedClasses(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
          Naive implementation - works extremelly slow O(n^3)
 java.util.List<Annotated<java.lang.Class<?>>> findMetaAnnotatedClasses(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
           
 java.util.List<Annotated<java.lang.reflect.Field>> findMetaAnnotatedFields(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
           
 java.util.List<Annotated<java.lang.reflect.Method>> findMetaAnnotatedMethods(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
           
<T> java.util.List<java.lang.Class<? extends T>>
findSubclasses(java.lang.Class<T> clazz)
           
 java.util.List<java.lang.String> getAnnotatedClassNames()
           
protected  java.util.List<AbstractFinder.Info> getAnnotationInfos(java.lang.String name)
           
 java.util.List<java.lang.String> getClassesNotLoaded()
          Returns a list of classes that could not be loaded in last invoked findAnnotated* method.
protected abstract  java.net.URL getResource(java.lang.String className)
           
 boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
           
 AbstractFinder link()
          The link() method must be called to successfully use the findSubclasses and findImplementations methods
protected abstract  java.lang.Class<?> loadClass(java.lang.String fixedName)
           
protected  void readClassDef(java.lang.Class clazz)
           
protected  void readClassDef(java.io.InputStream in)
           
protected  void readClassDef(java.io.InputStream in, java.lang.String path)
           
protected  void readClassDef(java.lang.String className)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

classInfos

protected final java.util.Map<java.lang.String,AbstractFinder.ClassInfo> classInfos

originalInfos

protected final java.util.Map<java.lang.String,AbstractFinder.ClassInfo> originalInfos
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

getAnnotatedClassNames

public java.util.List<java.lang.String> getAnnotatedClassNames()
Specified by:
getAnnotatedClassNames in interface IAnnotationFinder

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

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

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<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)


Copyright © 2005-2012 The Apache Software Foundation. All Rights Reserved.