private void collectMethodsImpl(AbstractDeclarativeValidator instance, Class<? extends AbstractDeclarativeValidator> clazz, Collection<Class<?>> visitedClasses, Collection<MethodWrapper> result) { if (!visitedClasses.add(clazz)) return; AbstractDeclarativeValidator instanceToUse; instanceToUse = instance; if (instanceToUse == null) { instanceToUse = newInstance(clazz); } Method[] methods = clazz.getDeclaredMethods(); for (Method method : methods) { if (method.getAnnotation(Check.class) != null && method.getParameterTypes().length == 1) { result.add(new MethodWrapper(instanceToUse, method)); } } Class<? extends AbstractDeclarativeValidator> superClass = getSuperClass(clazz); if (superClass != null) collectMethodsImpl(instanceToUse, superClass, visitedClasses, result); }
private void collectMethods(AbstractDeclarativeValidator instance, Class<? extends AbstractDeclarativeValidator> clazz, Collection<Class<?>> visitedClasses, Collection<MethodWrapper> result) { if (visitedClasses.contains(clazz)) return; collectMethodsImpl(instance, clazz, visitedClasses, result); Class<? extends AbstractDeclarativeValidator> k = clazz; while (k != null) { ComposedChecks checks = k.getAnnotation(ComposedChecks.class); if (checks != null) { for (Class<? extends AbstractDeclarativeValidator> external : checks.validators()) collectMethods(null, external, visitedClasses, result); } k = getSuperClass(k); } }