docs: public static void doWithMethods(Class<?> clazz, MethodCallback mc, MethodFilter mf)
  			throws IllegalArgumentException {
  
  		// Keep backing up the inheritance hierarchy.
  		Method[] methods = getDeclaredMethods(clazz);
  		for (Method method : methods) {
  			if (mf != null && !mf.matches(method)) {
  				continue;
  			}
  			try {
  				mc.doWith(method);
  			}
  			catch (IllegalAccessException ex) {
  				throw new IllegalStateException("Shouldn't be illegal to access method '" + method.getName() + "': " + ex);
  			}
  		}
  		if (clazz.getSuperclass() != null) {
  			doWithMethods(clazz.getSuperclass(), mc, mf);
  		}
  		else if (clazz.isInterface()) {
  			for (Class<?> superIfc : clazz.getInterfaces()) {
  				doWithMethods(superIfc, mc, mf);
  			}
  		}
  	}