|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectnet.sf.mmm.util.component.base.AbstractComponent
net.sf.mmm.util.component.base.AbstractLoggableComponent
net.sf.mmm.util.reflect.base.ReflectionUtilImpl
@Singleton @Named public class ReflectionUtilImpl
This class is a collection of utility functions for dealing with
reflection.
getInstance()| Field Summary | |
|---|---|
private static CharFilter |
CHAR_FILTER
|
private static ReflectionUtil |
instance
|
private static String |
WEB_INF_CLASSES
The prefix of resources in WAR-files. |
| Fields inherited from interface net.sf.mmm.util.reflect.api.ReflectionUtil |
|---|
NO_ARGUMENTS, NO_PARAMETERS, NO_TYPES |
| Constructor Summary | |
|---|---|
ReflectionUtilImpl()
The constructor. |
|
| Method Summary | ||
|---|---|---|
int |
compare(Class<?> class1,
Class<?> class2)
This method compares the given classes. |
|
|
createGenericType(Class<T> type)
This method creates the GenericType representing the given
type. |
|
GenericType<?> |
createGenericType(Type type)
This method creates the GenericType representing the given
type. |
|
GenericType<?> |
createGenericType(Type type,
Class<?> definingType)
This method creates the GenericType representing the given
type in the context of the given definingType. |
|
GenericType<?> |
createGenericType(Type type,
GenericType<?> definingType)
This method creates the GenericType representing the given
type in the context of the given definingType. |
|
Set<String> |
findClassNames(String packageName,
boolean includeSubPackages)
This method finds all classes that are located in the package identified by the given packageName. |
|
Set<String> |
findClassNames(String packageName,
boolean includeSubPackages,
Filter<String> filter)
This method finds all classes that are located in the package identified by the given packageName. |
|
Set<String> |
findClassNames(String packageName,
boolean includeSubPackages,
Filter<String> filter,
ClassLoader classLoader)
This method finds all classes that are located in the package identified by the given packageName. |
|
void |
findClassNames(String packageName,
boolean includeSubPackages,
Set<String> classSet)
This method finds all classes that are located in the package identified by the given packageName. |
|
protected void |
findClassNames(String packageName,
boolean includeSubPackages,
Set<String> classSet,
Filter<String> filter,
ClassLoader classLoader)
|
|
Set<String> |
findResourceNames(String packageName,
boolean includeSubPackages,
Filter<String> filter)
This method finds all resources that are located in the package identified by the given packageName. |
|
Set<String> |
findResourceNames(String packageName,
boolean includeSubPackages,
Filter<String> filter,
ClassLoader classLoader)
This method finds all resources that are located in the package identified by the given packageName. |
|
Set<DataResource> |
findResources(String absoluteClasspath)
This method finds all resources that match to the given absoluteClasspath. |
|
Set<DataResource> |
findResources(String packageName,
boolean includeSubPackages,
Filter<String> filter)
This method finds all resources that are located in the package identified by the given packageName. |
|
Set<DataResource> |
findResources(String packageName,
boolean includeSubPackages,
Filter<String> filter,
ClassLoader classLoader)
This method finds all resources that are located in the package identified by the given packageName. |
|
Class<?> |
getArrayClass(Class<?> componentType)
This method creates the Class reflecting an array of the given
. |
|
Class<?>[] |
getClasses(Object[] objects)
This method gets the classes of the given
objects. |
|
protected ClassLoader |
getDefaultClassLoader()
This method gets the default ClassLoader to use. |
|
protected ClassLoader |
getDefaultClassLoader(Class<?> fallbackClass)
This method gets the default ClassLoader to use. |
|
protected Type |
getGenericDeclaration(Class<?> ancestor,
Class<?> descendant)
This method walks up the Class-hierarchy from
descendant up to ancestor and returns the
sub-class or sub-interface of ancestor on that hierarchy-path. |
|
static ReflectionUtil |
getInstance()
This method gets the singleton instance of this ReflectionUtil. |
|
Class<?> |
getNonPrimitiveType(Class<?> type)
This method gets the according non- primitive
type for the class given by type. |
|
Method |
getParentMethod(Class<?> inheritingClass,
String methodName,
Class<?>[] parameterTypes)
This method gets the method identified by methodName and parameterTypes that
is NOT declared but inherited by the
given declaringClass. |
|
Method |
getParentMethod(Method method)
This method gets the parent method of the given method. |
|
|
getStaticField(Class<?> type,
String fieldName,
Class<T> fieldType,
boolean exactTypeMatch,
boolean mustBeFinal,
boolean inherit)
This method gets the value of a static
field . |
|
|
getStaticFieldOrNull(Class<?> type,
String fieldName,
Class<T> fieldType,
boolean exactTypeMatch,
boolean mustBeFinal,
boolean inherit)
|
|
protected Class<?> |
getSubClass(Class<?> ancestor,
Class<?> descendant)
This method walks up the Class-hierarchy from
descendant up to ancestor and returns the
sub-class or sub-interface of ancestor on that hierarchy-path. |
|
boolean |
isMarkerInterface(Class<?> interfaceClass)
This method determines if the given interfaceClass is a
marker-interface (e.g. |
|
Set<Class<?>> |
loadClasses(Collection<String> qualifiedClassNames)
This method loads the classes given as Collection of
fully qualified names by
qualifiedClassNames and returns them as Set. |
|
Set<Class<?>> |
loadClasses(Collection<String> classNames,
ClassResolver classResolver,
Filter<? super Class<?>> filter)
This method loads the classes given as Collection of names by
classNames using the given classResolver. |
|
Set<Class<?>> |
loadClasses(Collection<String> qualifiedClassNames,
Filter<? super Class<?>> filter)
This method loads the classes given as Collection of
fully qualified names by
qualifiedClassNames. |
|
String |
toString(Type type)
This method gets the string representation of a Type. |
|
void |
toString(Type type,
Appendable appendable,
Visitor<Class<?>> classFormatter)
This method gets the string representation of a Type. |
|
private Type |
toType(CharSequenceScanner parser,
ClassResolver resolver,
Type owner)
This method parses the given type as generic Type. |
|
Type |
toType(String type)
This method is the analogy to Class.forName(String) for creating a
Type instance from String. |
|
Type |
toType(String type,
ClassResolver resolver)
This method is the analogy to Class.forName(String) for creating a
Type instance from String. |
|
void |
visitResourceNames(String packageName,
boolean includeSubPackages,
ClassLoader classLoader,
ResourceVisitor visitor)
This method does the actual magic to locate resources on the classpath. |
|
private static void |
visitResources(File packageDirectory,
StringBuilder qualifiedNameBuilder,
int qualifiedNamePrefixLength,
ResourceVisitor visitor)
This method scans the given packageDirectory recursively for
resources. |
|
| Methods inherited from class net.sf.mmm.util.component.base.AbstractLoggableComponent |
|---|
doInitialize, getLogger, setLogger |
| Methods inherited from class net.sf.mmm.util.component.base.AbstractComponent |
|---|
doInitialized, getInitializationState, initialize |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
private static final String WEB_INF_CLASSES
private static ReflectionUtil instance
getInstance()private static final CharFilter CHAR_FILTER
toType(CharSequenceScanner, ClassResolver, Type)| Constructor Detail |
|---|
public ReflectionUtilImpl()
| Method Detail |
|---|
public static ReflectionUtil getInstance()
ReflectionUtil.getInstance() methods and
construct new instances via the container-framework of your choice (like
plexus, pico, springframework, etc.). To wire up the dependent components
everything is properly annotated using common-annotations (JSR-250). If
your container does NOT support this, you should consider using a better
one.
public Class<?>[] getClasses(Object[] objects)
classes of the given
objects.
getClasses in interface ReflectionUtilobjects - is an array containing the objects for that the classes are
requested.
class of
the object from the given array at the same position or
null, if that object is null.public <T> GenericType<T> createGenericType(Class<T> type)
GenericType representing the given
type.type,
lower bound and
upper bound of the returned
GenericType will all be identical to the given type.Type where the given type was
defined you should use GenericTypeFactory.createGenericType(Type, GenericType)
instead to get a more precise result.
createGenericType in interface GenericTypeFactoryT - is the generic type of the Class to convert.type - is the Type to represent.
GenericType.public GenericType<?> createGenericType(Type type)
GenericType representing the given
type.type is a Class, the methods behaves like
GenericTypeFactory.createGenericType(Class).Type where the given type was defined
(e.g. the Class where you retrieved the given type
from as parameter, return-type or field-type) you should use
GenericTypeFactory.createGenericType(Type, GenericType) instead to get a more precise
result.
createGenericType in interface GenericTypeFactorytype - is the Type to represent.
GenericType.
public GenericType<?> createGenericType(Type type,
GenericType<?> definingType)
GenericType representing the given
type in the context of the given definingType.Now if you ask your self why all this instead of just usingReflectionUtilutil =getInstance(); Class<?> myClass = getSomeClass(); GenericType definingType = util.createGenericType(myClass);MethodmyMethod = findSomeMethod(myClass); Type returnType = myMethod.getGenericReturnType(); GenericType type = util.createGenericType(returnType, definingType); Class<?> returnClass = type.GenericType.getRetrievalClass();
myMethod.getReturnType()
? Read the javadoc of GenericType to get the answer.mmm-util-pojo which allows to use this features
at a higher level and therefore much easier.
createGenericType in interface GenericTypeFactorytype - is the Type to represent.definingType - is the GenericType where the given
type is defined in. It is needed to resolve
TypeVariables.
GenericType.GenericTypeFactory.createGenericType(Type, Class)
public GenericType<?> createGenericType(Type type,
Class<?> definingType)
GenericType representing the given
type in the context of the given definingType.createGenericType(type,
createGenericType(definingType))
createGenericType in interface GenericTypeFactorytype - is the Type to represent.definingType - is the Class where the given type
is defined in. It is needed to resolve
TypeVariables.
GenericType.
protected Class<?> getSubClass(Class<?> ancestor,
Class<?> descendant)
Class-hierarchy from
descendant up to ancestor and returns the
sub-class or sub-interface of ancestor on that hierarchy-path.ancestor is an interface, the hierarchy may NOT be unique. In such case it will be
unspecified which of the possible paths is used.
ancestor - is the super-class or super-interface of
descendant.descendant - is the sub-class or sub-interface of
ancestor.
descendant up to ancestor.
protected Type getGenericDeclaration(Class<?> ancestor,
Class<?> descendant)
Class-hierarchy from
descendant up to ancestor and returns the
sub-class or sub-interface of ancestor on that hierarchy-path.ancestor is an interface, the hierarchy may NOT be unique. In such case it will be
unspecified which of the possible paths is used.
ancestor - is the super-class or super-interface of
descendant.descendant - is the sub-class or sub-interface of
ancestor.
descendant up to ancestor.public Class<?> getArrayClass(Class<?> componentType)
Class reflecting an array of the given
componentType.
getArrayClass in interface ReflectionUtilcomponentType - is the component type
.
array-class.public Type toType(String type)
Class.forName(String) for creating a
Type instance from String.
toType in interface ReflectionUtiltype - is the string representation of the requested type.
ReflectionUtil.toType(String, ClassResolver)
public Type toType(String type,
ClassResolver resolver)
Class.forName(String) for creating a
Type instance from String.
toType in interface ReflectionUtiltype - is the string representation of the requested type.resolver - is used to resolve classes.
private Type toType(CharSequenceScanner parser,
ClassResolver resolver,
Type owner)
type as generic Type.StringParser but we want to
avoid the dependency on util-misc.
parser - is the string-parser on the type string to parse.resolver - is used to resolve classes.owner - is the
owner-type or null.
public String toString(Type type)
Type. Instead of
Type.toString() it returns Class.getName() if
the type is a Class.
toString in interface ReflectionUtiltype - is the type to get as string.
type.
public void toString(Type type,
Appendable appendable,
Visitor<Class<?>> classFormatter)
Type. Instead of
Type.toString() it returns Class.getName() if
the type is a Class.
toString in interface ReflectionUtiltype - is the type to get as string.appendable - is where to append the string representation to.classFormatter - is a Visitor that gets called for each
Class and has to append as string-representation of the visited Class to the
appendable.
public int compare(Class<?> class1,
Class<?> class2)
compare in interface ReflectionUtilclass1 - is the first class.class2 - is the second class.
0 if both classes are equal to each other.1 if class1 inherits from
class2.-1 if class2 inherits from
class1.Integer.MIN_VALUE otherwise.public Class<?> getNonPrimitiveType(Class<?> type)
primitive
type for the class given by type.getNonPrimitiveType(int.class)
will return Integer.class.
getNonPrimitiveType in interface ReflectionUtiltype - is the (potentially) primitive
type.
type. This
will be the given type itself if it is NOT
primitive.Class.isPrimitive()public boolean isMarkerInterface(Class<?> interfaceClass)
interfaceClass is a
marker-interface (e.g. Serializable or Cloneable).
A marker-interface is also called a tagging-interface.
isMarkerInterface in interface ReflectionUtilinterfaceClass - is the Class reflecting the interface to
check.
true if the given interfaceClass is a
marker-interface, false otherwise (if regular
interface or no interface at all).
public <T> T getStaticField(Class<?> type,
String fieldName,
Class<T> fieldType,
boolean exactTypeMatch,
boolean mustBeFinal,
boolean inherit)
throws NoSuchFieldException,
IllegalAccessException,
IllegalArgumentException
value of a static
field .
getStaticField in interface ReflectionUtilT - the templated type the requested field is assigned to.type - is the class or interface containing the requested field.fieldName - is the name of
the requested field.fieldType - is the type the requested field is assigned to. Therefore
the field declaration (!) must be assignable to this type.exactTypeMatch - - if true, the fieldType
must match exactly the type of the static field, else if
false the type of the field may be a sub-type of
fieldType or one of the types may be
primitive while the other is the
according object-type.mustBeFinal - - if true, an
IllegalArgumentException is thrown if the specified static
field exists but is NOT
final,
false otherwise.inherit - if true the field may be inherited from a
super-class or
super-interface of type,
else if false the field is only accepted if it is
declared in type.
NoSuchFieldException - if the given type has no field
with the given fieldName.
IllegalAccessException - if you do not have permission to read the
field (e.g. field is private).
IllegalArgumentException - if the field is NOT static (or final) or
has the wrong type.
public <T> T getStaticFieldOrNull(Class<?> type,
String fieldName,
Class<T> fieldType,
boolean exactTypeMatch,
boolean mustBeFinal,
boolean inherit)
throws IllegalArgumentException
getStaticFieldOrNull in interface ReflectionUtilT - the templated type the requested field is assigned to.type - is the class or interface containing the requested field.fieldName - is the name of
the requested field.fieldType - is the type the requested field is assigned to. Therefore
the field declaration (!) must be assignable to this type.exactTypeMatch - - if true, the fieldType
must match exactly the type of the static field, else if
false the type of the field may be a sub-type of
fieldType or one of the types may be
primitive while the other is the
according object-type.mustBeFinal - - if true, an
IllegalArgumentException is thrown if the specified static
field exists but is NOT
final,
false otherwise.inherit - if true the field may be inherited from a
super-class or
super-interface of type,
else if false the field is only accepted if it is
declared in type.
null if
the field does NOT exist or is NOT accessible.
IllegalArgumentException - if the field is NOT static (or final) or
has the wrong type.
public Method getParentMethod(Method method)
throws SecurityException
method. The
parent method is the method overridden (is the sense of Override)
by the given method or directly inherited from an
interface.
getParentMethod in interface ReflectionUtilmethod - is the method.
null if no such method exists.
SecurityException - if access has been denied by the
SecurityManager.
public Method getParentMethod(Class<?> inheritingClass,
String methodName,
Class<?>[] parameterTypes)
throws SecurityException
identified by methodName and parameterTypes that
is NOT declared but inherited by the
given declaringClass.
getParentMethod in interface ReflectionUtilinheritingClass - is the class inheriting the requested method.methodName - is the name of the requested
method.parameterTypes - is the signature
of the requested method.
null if no such method exists.
SecurityException - if access has been denied by the
SecurityManager.ReflectionUtil.getParentMethod(Class, String, Class[])
private static void visitResources(File packageDirectory,
StringBuilder qualifiedNameBuilder,
int qualifiedNamePrefixLength,
ResourceVisitor visitor)
packageDirectory recursively for
resources.
packageDirectory - is the directory representing the Package.qualifiedNameBuilder - is a StringBuilder containing the
qualified prefix (the Package with a trailing dot).qualifiedNamePrefixLength - the length of the prefix used to rest the
string-builder after reuse.visitor - is the ResourceVisitor.
public Set<String> findClassNames(String packageName,
boolean includeSubPackages)
packageName.
findClassNames in interface ReflectionUtilpackageName - is the name of the Package to scan.includeSubPackages - - if true all sub-packages of the
specified Package will be included in the search.
Set with the fully qualified names of all requested
classes.
public void findClassNames(String packageName,
boolean includeSubPackages,
Set<String> classSet)
packageName.
findClassNames in interface ReflectionUtilpackageName - is the name of the Package to scan.includeSubPackages - - if true all sub-packages of the
specified Package will be included in the search.classSet - is where to add the classes.
public Set<String> findClassNames(String packageName,
boolean includeSubPackages,
Filter<String> filter)
packageName.
findClassNames in interface ReflectionUtilpackageName - is the name of the Package to scan.includeSubPackages - - if true all sub-packages of the
specified Package will be included in the search.filter - is used to filter the
Class-names to be added to the resulting Set. The
Filter will receive fully qualified
class-names as argument (e.g.
"net.sf.mmm.reflect.api.ReflectionUtil").
Set with the fully qualified names of all requested
classes.
public Set<String> findClassNames(String packageName,
boolean includeSubPackages,
Filter<String> filter,
ClassLoader classLoader)
packageName.
findClassNames in interface ReflectionUtilpackageName - is the name of the Package to scan.includeSubPackages - - if true all sub-packages of the
specified Package will be included in the search.filter - is used to filter the
Class-names to be added to the resulting Set. The
Filter will receive fully qualified
class-names as argument (e.g.
"net.sf.mmm.reflect.api.ReflectionUtil").classLoader - is the explicit ClassLoader to use.
Set with the fully qualified names of all requested
classes.
protected void findClassNames(String packageName,
boolean includeSubPackages,
Set<String> classSet,
Filter<String> filter,
ClassLoader classLoader)
throws RuntimeIoException
packageName - is the name of the Package to scan.includeSubPackages - - if true all sub-packages of the
specified Package will be included in the search.classSet - is where to add the classes.filter - is used to filter the
Class-names to be added to the resulting Set. The
Filter will receive fully qualified
class-names as argument (e.g.
"net.sf.mmm.reflect.api.ReflectionUtil").classLoader - is the explicit ClassLoader to use.
RuntimeIoException - if the operation failed with an I/O error.findClassNames(String, boolean, Filter, ClassLoader)
public Set<String> findResourceNames(String packageName,
boolean includeSubPackages,
Filter<String> filter)
packageName.
findResourceNames in interface ReflectionUtilpackageName - is the name of the Package to scan. Both "." and
"/" are accepted as separator (e.g. "net.sf.mmm.util.reflect).includeSubPackages - - if true all sub-packages of the
specified Package will be included in the search.filter - is used to filter the
resources. The Filter will receive fully qualified classpath
entries as argument (e.g.
"net/sf/mmm/util/reflect/beans-util-reflect.xml"). Typically you
will exclude resources that end with ".class" or only accept
resources that end with ".xml".
Set with the fully qualified names of all requested
resources (e.g. "net/sf/mmm/util/reflect/beans-util-reflect.xml").
public Set<String> findResourceNames(String packageName,
boolean includeSubPackages,
Filter<String> filter,
ClassLoader classLoader)
packageName.
findResourceNames in interface ReflectionUtilpackageName - is the name of the Package to scan. Both "." and
"/" are accepted as separator (e.g. "net.sf.mmm.util.reflect).includeSubPackages - - if true all sub-packages of the
specified Package will be included in the search.filter - is used to filter the
resources. The Filter will receive fully qualified classpath
entries as argument (e.g.
"net/sf/mmm/util/reflect/beans-util-reflect.xml"). Typically you
will exclude resources that end with ".class" or only accept
resources that end with ".xml".classLoader - is the explicit ClassLoader to use.
Set with the fully qualified names of all requested
resources (e.g. "net/sf/mmm/util/reflect/beans-util-reflect.xml").
public Set<DataResource> findResources(String packageName,
boolean includeSubPackages,
Filter<String> filter)
packageName.
findResources in interface ReflectionUtilpackageName - is the name of the Package to scan. Both "." and
"/" are accepted as separator (e.g. "net.sf.mmm.util.reflect).includeSubPackages - - if true all sub-packages of the
specified Package will be included in the search.filter - is used to filter the
resources. Typically you will exclude resources that end with
".class" or only accept resources that end with ".xml".
Set with all requested resources.
public Set<DataResource> findResources(String absoluteClasspath)
throws RuntimeIoException
absoluteClasspath. Unlike
ClasspathResource.ClasspathResource(String)
this method will return all resources that with the given classpath (e.g.
out of multiple JAR-files).
findResources in interface ReflectionUtilabsoluteClasspath - is the absolute path to the resource. E.g.
"net/sf/mmm/util/resource/ClasspathResource.txt".
Set with all requested resources.
RuntimeIoException - if the operation failed with an I/O error.
public Set<DataResource> findResources(String packageName,
boolean includeSubPackages,
Filter<String> filter,
ClassLoader classLoader)
packageName.
findResources in interface ReflectionUtilpackageName - is the name of the Package to scan. Both "." and
"/" are accepted as separator (e.g. "net.sf.mmm.util.reflect).includeSubPackages - - if true all sub-packages of the
specified Package will be included in the search.filter - is used to filter the
resources. Typically you will exclude resources that end with
".class" or only accept resources that end with ".xml".classLoader - is the explicit ClassLoader to use.
Set with all requested resources.
public void visitResourceNames(String packageName,
boolean includeSubPackages,
ClassLoader classLoader,
ResourceVisitor visitor)
throws RuntimeIoException
packageName - is the name of the Package to scan. Both "." and
"/" are accepted as separator (e.g. "net.sf.mmm.util.reflect).includeSubPackages - - if true all sub-packages of the
specified Package will be included in the search.classLoader - is the explicit ClassLoader to use.visitor - is the ResourceVisitor.
RuntimeIoException - if the operation failed with an I/O error.public Set<Class<?>> loadClasses(Collection<String> qualifiedClassNames)
Collection of
fully qualified names by
qualifiedClassNames and returns them as Set.
loadClasses in interface ReflectionUtilqualifiedClassNames - is a collection containing the
qualified names of the classes to load.
Set with all loaded classes.
public Set<Class<?>> loadClasses(Collection<String> qualifiedClassNames,
Filter<? super Class<?>> filter)
Collection of
fully qualified names by
qualifiedClassNames. It returns a Set containing only
those loaded classes that are accepted by the
given filter.
loadClasses in interface ReflectionUtilqualifiedClassNames - is a collection containing the
qualified names of the classes to load.filter - is used to filter the loaded classes.
Set with all loaded classes that are
accepted by the given
filter.
public Set<Class<?>> loadClasses(Collection<String> classNames,
ClassResolver classResolver,
Filter<? super Class<?>> filter)
Collection of names by
classNames using the given classResolver. It
returns a Set containing only those loaded classes that are
accepted by the given filter.
loadClasses in interface ReflectionUtilclassNames - is a collection containing the names of the classes to
load. The class names should typically be the
qualified names of the classes to load. But
this may differ depending on the classResolver.classResolver - is used to load/resolve the classes by their names.filter - is used to filter the loaded classes.
Set with all loaded classes that are
accepted by the given
filter.protected ClassLoader getDefaultClassLoader()
ClassLoader to use. This should be the
ContextClassLoader but falls back to
alternatives if no such ClassLoader is available.
ClassLoader to use.protected ClassLoader getDefaultClassLoader(Class<?> fallbackClass)
ClassLoader to use. This should be the
ContextClassLoader but falls back to
alternatives if no such ClassLoader is available.
fallbackClass - is used to retrieve a
ClassLoader as fallback if the
ContextClassLoader is not
available.
ClassLoader to use.
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||