code: public static Object invoke(Method m, Object obj, Object[] params)
          throws InvocationTargetException, IllegalAccessException {
          try {
              return bounce.invoke(null, new Object[] {m, obj, params});
          } catch (InvocationTargetException ie) {
              Throwable t = ie.getCause();
  
              if (t instanceof InvocationTargetException) {
                  throw (InvocationTargetException)t;
              } else if (t instanceof IllegalAccessException) {
                  throw (IllegalAccessException)t;
              } else if (t instanceof RuntimeException) {
                  throw (RuntimeException)t;
              } else if (t instanceof Error) {
                  throw (Error)t;
              } else {
                  throw new Error("Unexpected invocation error", t);
              }
          } catch (IllegalAccessException iae) {
              // this can't happen
              throw new Error("Unexpected invocation error", iae);
          }
      }
docs: /*
  Bounce through the trampoline.