Object (Method method, Object object, Object... args) { try { return method.invoke(object, args); } catch (IllegalArgumentException e) { throw new RuntimeException("Calling method " + method + " on object " + object + " with arguments " + Arrays.asList(args), e); } catch (InvocationTargetException e) { final Throwable cause = e.getCause(); if (cause instanceof ProcessCanceledException) { throw (ProcessCanceledException)cause; } ExceptionUtil.rethrow(cause); return null; } catch (ProcessCanceledException e) { throw e; } catch (Throwable throwable) { throw new RuntimeException(throwable); } }