/** All purpose MethodHandle invoke implementation, with or without args. * @param base represents the base object instance. * @param pars parameter arguments * @return invocation result * @throws Throwable combined exceptions */ private synchronized Object invokeTarget(Object base, Object[] pars) throws Throwable { Reflect.logInvokeMethod("Invoking method (entry): ", this, pars); List<Object> params = collectParamaters(base, pars); Reflect.logInvokeMethod("Invoking method (after): ", this, params); if (getParameterCount() > 0) return getMethodHandle().invokeWithArguments(params); if (isStatic() || this instanceof ConstructorInvocable) return getMethodHandle().invoke(); return getMethodHandle().invoke(params.get(0)); }