docs: public static <T> Object callMethod(Object obj,
                                          Class<T> c,
                                          String name,
                                          Class<?>[] classes,
                                          Object[] args) {
          try {
              Method m = getMethod(c, name, classes);
              return m.invoke(obj, args);
          } catch(InvocationTargetException e) {
              throw getCause(e);
          } catch(IllegalAccessException e) {
              throw new IllegalStateException(e);
          }
      }