All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.kasource.commons.reflection.ClassIntrospector Maven / Gradle / Ivy

There is a newer version: 2.1
Show newest version
package org.kasource.commons.reflection;

import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Map;
import java.util.Set;

import org.kasource.commons.reflection.filter.classes.ClassFilter;
import org.kasource.commons.reflection.filter.constructors.ConstructorFilter;
import org.kasource.commons.reflection.filter.fields.FieldFilter;
import org.kasource.commons.reflection.filter.methods.MethodFilter;

/**
 * Class Introspection.
 * 
 * This interface can be used to extract information about class meta data
 * such as interfaces, methods and fields.
 * 

* The difference between getFields and getDeclaredField is that getFields * returns fields declared by super classes as well as fields declared by * the target class. While getDeclaredField only returns fields declared by * the target class. *

* The same pattern is applied for any getXXX and getDeclaredXXX method pairs. *

* ClassFilter, FieldFilter and MethodFilter is used to query (filter) for interfaces, fields * and methods. *

* Example: Finding all getters: * {@code * ClassIntroSpector introspector = new ClassIntroSpectorImpl(MyClass.class); * Set getters = introspector.getMethods(new MethodFilterBuilder().name("get[A-Z].*").or().name("is[A-Z].*").or().name("has[A-Z]*").isPublic().not().returnType(Void.TYPE).numberOfParameters(0).build()); * } * * @author rikardwi **/ public interface ClassIntrospector { /** * Returns the named method from class clazz, does not throw checked exceptions. * * @param clazz * The class to inspect * @param name * The name of the method to get * @param params * Parameter types for the method * * * @return Returns the named method from class clazz. * * @throws IllegalArgumentException if method could not be found or security * issues occurred when trying to retrieve the method. */ Method getDeclaredMethod(String name, Class... params) throws IllegalArgumentException; /** * Returns the named public method from class clazz or any of its super classes, does not throw checked exceptions. * * @param clazz * The class to inspect * @param name * The name of the method to get * @param params * Parameter types for the method * * * @return Returns the named method from class clazz. * * @throws IllegalArgumentException if method could not be found or security * issues occurred when trying to retrieve the method. */ Method getMethod(String name, Class... params) throws IllegalArgumentException; /** * Returns the methods declared by clazz which matches the supplied * method filter. * * @param clazz * The class to inspect * @param methodFilter * The method filter to apply. * * @return methods that match the params argument in their method signature * **/ Set getDeclaredMethods(MethodFilter methodFilter); /** * Returns true if the supplied annotation is present on the target class * or any of its super classes. * * @param annotation Annotation to find. * * @return true if the supplied annotation is present on the target class * or any of its super classes. **/ boolean isAnnotationPresent(Class annotation); /** * Returns true if any of the supplied annotations is present on the target class * or any of its super classes. * * @param annotations Annotations to find. * * @return true if any of the supplied annotation is present on the target class * or any of its super classes. **/ boolean isAnyAnnotationPresent(Class... annotations); /** * Returns the annotation of the annotationClass of the clazz or any of it super classes. * * @param clazz * The class to inspect. * @param annotationClass * Class of the annotation to return * * @return The annotation of annnotationClass if found else null. */ T getAnnotation(Class annotationClass); /** * Returns the methods declared by the target class and any of its super classes, which matches the supplied * methodFilter. * * @param methodFilter * The method filter to apply. * * @return methods that match the methodFilter. * **/ Set getMethods(MethodFilter methodFilter); /** * Returns the method declared by the target class and any of its super classes, which matches the supplied * methodFilter, if method is found null is returned. If more than one method is found the * first in the resulting set iterator is returned. * * @param methodFilter * The method filter to apply. * * @return method that match the methodFilter or null if no such method was found. * **/ Method getMethod(MethodFilter methodFilter); /** * Returns a set of interfaces from the target class that passes the supplied filter. * This method also inspects any interfaces implemented by super classes. * * @param filter The class filter to use. * * @return a set of interfaces from the target class that passes the supplied filter. */ Set> getInterfaces(ClassFilter filter); /** * Returns the interface from target class that passes the supplied filter. * This method also inspects any interfaces implemented by super classes. * * If no interface is found null is returned. * * @param filter The class filter to use. * * @return the interface from target class that passes the supplied filter, may * be null if no match is found. */ Class getInterface(ClassFilter filter); /** * Returns a set of interfaces that that passes the supplied filter. * * @param filter The class filter to use. * * @return all Interface classes from clazz that passes the filter. */ Set> getDeclaredInterfaces(ClassFilter filter); /** * Returns a set of all fields matching the supplied filter * declared in the target class. * * @param filter Filter to use. * * @return All matching fields declared by the target class. **/ Set getDeclaredFields(FieldFilter filter); /** * Returns a set of all fields matching the supplied filter * declared in the target class or any of its super classes. * * @param filter Filter to use. * * @return All matching fields declared by the target class. **/ Set getFields(FieldFilter filter); /** * Returns set of constructors that matches the filter parameter. * * @param filter Filter to apply. * @param ofType Class to get constructor for, must match target class. * * @return constructors that matches the filter parameter. * * @throws IllegalArgumentException if ofType does not match the target class. **/ Set> getConstructorsForType(ConstructorFilter filter, Class ofType) throws IllegalArgumentException; /** * Returns the first constructor found that matches the filter parameter. * * @param filter Filter to apply. * @param ofType Class to get constructor for, must match target class. * * @return the first constructor found that matches the filter parameter. * @throws IllegalArgumentException if ofType does not match the target class. * or no constructor is found matching the filter. **/ Constructor getConstructorForType(ConstructorFilter filter, Class ofType); /** * Returns the first constructor found that matches the filter parameter. * * @param filter Filter to apply. * * @return the first constructor found that matches the filter parameter. * * @throws IllegalArgumentException if no constructor is found matching the filter. **/ Constructor getConstructor(ConstructorFilter filter) throws IllegalArgumentException; /** * Returns the first constructor found that matches the filter parameter. * * @param filter Filter to apply. * * @return the first constructor found that matches the filter parameter. * * @throws IllegalArgumentException if no constructor is found matching the filter. **/ Set> getConstructors(ConstructorFilter filter) throws IllegalArgumentException; /** * Returns a map of methods annotated with an annotation from the annotations parameter. * * @param methodFilter Filter for methods, may be null to include all annotated methods. * @param annotations Method annotations to find methods for * * @return Methods that is annotated with the supplied annotation set. **/ Map, Set> findAnnotatedMethods(MethodFilter methodFilter, Collection> annotations); }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy