docs: public static <R> R callFunc(Object instance, Class<?> type, Class<R> returnType,
  			String methodName, Class<?>[] types, Object... args) {
  		try {
  			final Method method = type.getDeclaredMethod(methodName, types);
  			method.setAccessible(true);
  			return returnType.cast(method.invoke(instance, args));
  		} catch (Exception exception) {
  			throw new Error(exception);
  		}
  	}