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); } }