code: public static List<Method> getMethods(Class<?> clazz, final Class<? extends Annotation> annotation) {
          final List<Method> methods = new ArrayList<Method>();
          traverseHierarchy(clazz, new TraverseTask<Method>() {
  
              @Override
              public Method run(Class<?> clazz) {
                  Method[] methodArray = clazz.getDeclaredMethods();
  
                  for (int i = 0; i < methodArray.length; i++) {
                      Method m = methodArray[i];
                      if (m.getAnnotation(annotation) != null) {
                          methods.add(m);
                      }
                  }
  
                  return null;
              }
          });
          return methods;
      }
docs: Returns the method objects for methods which are annotated with the
  given annotation of the given class. This method traverses through
  the super classes of the given class and tries to find methods as
  declared methods within these classes which are annotated with an
  annotation of the given annotation type.
  When the object class is reached the traversing stops. If no methods
  can be found, an empty list is returned.
  The order of the methods is random.
  
  @param clazz      The class within to look for the methods
  @param annotation The annotation type a method must be annotated with to be
  included in the list
  @return A list of method objects for methods annotated with the given
  annotation type or an emtpy list