Package org.apache.xbean.finder
Class AbstractFinder
- java.lang.Object
-
- org.apache.xbean.finder.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) $
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description classAbstractFinder.AnnotatableclassAbstractFinder.AnnotationInfoclassAbstractFinder.ClassInfoclassAbstractFinder.FieldInfostatic interfaceAbstractFinder.InfoclassAbstractFinder.InfoBuildingVisitorclassAbstractFinder.MethodInfoclassAbstractFinder.PackageInfo
-
Field Summary
Fields Modifier and Type Field Description protected java.util.Map<java.lang.String,AbstractFinder.ClassInfo>classInfosprotected java.util.Map<java.lang.String,AbstractFinder.ClassInfo>originalInfos
-
Constructor Summary
Constructors Constructor Description AbstractFinder()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description 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.URLgetResource(java.lang.String className)booleanisAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)AbstractFinderlink()The link() method must be called to successfully use the findSubclasses and findImplementations methodsprotected abstract java.lang.Class<?>loadClass(java.lang.String fixedName)protected voidreadClassDef(java.io.InputStream in)protected voidreadClassDef(java.io.InputStream in, java.lang.String path)protected voidreadClassDef(java.lang.Class clazz)protected voidreadClassDef(java.lang.String className)
-
-
-
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:
getAnnotatedClassNamesin interfaceIAnnotationFinder
-
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:
isAnnotationPresentin interfaceIAnnotationFinder
-
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:
getClassesNotLoadedin interfaceIAnnotationFinder- 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:
findAnnotatedPackagesin interfaceIAnnotationFinder
-
findAnnotatedClasses
public java.util.List<java.lang.Class<?>> findAnnotatedClasses(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
- Specified by:
findAnnotatedClassesin interfaceIAnnotationFinder
-
findMetaAnnotatedClasses
public java.util.List<Annotated<java.lang.Class<?>>> findMetaAnnotatedClasses(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
- Specified by:
findMetaAnnotatedClassesin interfaceIAnnotationFinder
-
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:
findInheritedAnnotatedClassesin interfaceIAnnotationFinder- 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:
findAnnotatedMethodsin interfaceIAnnotationFinder
-
findMetaAnnotatedMethods
public java.util.List<Annotated<java.lang.reflect.Method>> findMetaAnnotatedMethods(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
- Specified by:
findMetaAnnotatedMethodsin interfaceIAnnotationFinder
-
findAnnotatedConstructors
public java.util.List<java.lang.reflect.Constructor> findAnnotatedConstructors(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
- Specified by:
findAnnotatedConstructorsin interfaceIAnnotationFinder
-
findAnnotatedFields
public java.util.List<java.lang.reflect.Field> findAnnotatedFields(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
- Specified by:
findAnnotatedFieldsin interfaceIAnnotationFinder
-
findMetaAnnotatedFields
public java.util.List<Annotated<java.lang.reflect.Field>> findMetaAnnotatedFields(java.lang.Class<? extends java.lang.annotation.Annotation> annotation)
- Specified by:
findMetaAnnotatedFieldsin interfaceIAnnotationFinder
-
findClassesInPackage
public java.util.List<java.lang.Class<?>> findClassesInPackage(java.lang.String packageName, boolean recursive)
- Specified by:
findClassesInPackagein interfaceIAnnotationFinder
-
findSubclasses
public <T> java.util.List<java.lang.Class<? extends T>> findSubclasses(java.lang.Class<T> clazz)
- Specified by:
findSubclassesin interfaceIAnnotationFinder
-
findImplementations
public <T> java.util.List<java.lang.Class<? extends T>> findImplementations(java.lang.Class<T> clazz)
- Specified by:
findImplementationsin interfaceIAnnotationFinder
-
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)
-
-