docs: public static Optional<Method> getMethod(Class<?> type, String name, Class<?>... parameterTypes) {
          Method[] methods = type.getDeclaredMethods();
          for (Method method : methods) {
              if (method.getName().equals(name) && Arrays.equals(method.getParameterTypes(), parameterTypes)) {
                  return Optional.of(method);
              }
          }
          Class<?> superClass = type.getSuperclass();
          if (superClass != null && !superClass.equals(Object.class)) {
              return getMethod(superClass, name, parameterTypes);
          } else {
              return Optional.absent();
          }
      }