code: public static Set<Method> getMethods(Class<?> clazz, Filter<Method>filter) {
  		Set<Method> methods = new HashSet<Method>();
  		
  		Class<?> cursor = clazz;
  		while(cursor != null && cursor != Object.class) {
  			// get all methods and apply filters
  			methods.addAll(Filter.apply(filter, cursor.getDeclaredMethods()));
  			// up one step on the hierarchy
  			cursor = cursor.getSuperclass();
  		}		
  		return methods;
  	}
docs: Returns the filtered set of methods of the given class, including those
  inherited from the super-classes; if provided, complex filter criteria
  can be applied.
  
  @param clazz
  the class whose methods are being retrieved.
  @param filter
  an optional filter; to get all fields pass in a {@code null} value.
  @return
  the set of methods from the given class and its super-classes.