* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- */
+ */
package org.wamblee.reflection;
+import java.lang.reflect.Field;
import java.lang.reflect.Method;
-
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
return aClass;
}
- public static List<Method> getAllMethods(Class aClass) {
+ public static List<Method> getAllMethods(Class aClass,
+ Class... aExcludedClasses) {
+ if (aClass.isInterface()) {
+ throw new IllegalArgumentException(aClass.getName() +
+ " is not an interface.");
+ }
Map<String, Method> found = new HashMap<String, Method>();
- getAllMethods(aClass, found);
+ getAllMethods(aClass, found, Arrays.asList(aExcludedClasses));
return new ArrayList<Method>(found.values());
}
- private static void getAllMethods(Class aClass, Map<String, Method> aFound) {
+ private static void getAllMethods(Class aClass, Map<String, Method> aFound,
+ List<Class> aExcludedClasses) {
List<Method> declared = Arrays.asList(aClass.getDeclaredMethods());
for (Method method : declared) {
Method superMethod = aFound.get(method.getName());
if (superMethod == null) {
- // no superclass method
+ // no subclass method
aFound.put(method.getName(), method);
} else {
- // super class method. Check for override.
+ // subclass method. Check for override.
if (!Arrays.equals(superMethod.getParameterTypes(), method
.getParameterTypes())) {
// parameters differ so this is a new method.
Class superClass = aClass.getSuperclass();
- if (superClass != null) {
- getAllMethods(superClass, aFound);
+ if (superClass != null && !aExcludedClasses.contains(superClass)) {
+ getAllMethods(superClass, aFound, aExcludedClasses);
+ }
+ }
+
+ public static List<Field> getAllFields(Class aClass,
+ Class... aExcludedClasses) {
+ if (aClass.isInterface()) {
+ throw new IllegalArgumentException(aClass.getName() +
+ " is not an interface.");
+ }
+ List<Field> found = new ArrayList<Field>();
+ getAllFields(aClass, found, Arrays.asList(aExcludedClasses));
+
+ return found;
+ }
+
+ private static void getAllFields(Class aClass, List<Field> aFound,
+ List<Class> aExcludedClasses) {
+ List<Field> declared = Arrays.asList(aClass.getDeclaredFields());
+
+ for (Field field : declared) {
+ aFound.add(field);
+ }
+
+ Class superClass = aClass.getSuperclass();
+
+ if (superClass != null && !aExcludedClasses.contains(superClass)) {
+ getAllFields(superClass, aFound, aExcludedClasses);
}
}
}