private Object doIntercept(Object receiver, Method method, Object[] parameters, Invoker invoker, int currentStackDepth )
            throws Throwable {
        long started = System.nanoTime();

        InvocationMode mode = getInvocationMode( receiver, method );

        boolean hasNestedSteps = method.isAnnotationPresent( NestedSteps.class );

        boolean handleMethod = shouldHandleMethod( method );
        if( handleMethod ) {
            handleMethod( receiver, method, parameters, mode, hasNestedSteps );
        }

        if( mode == SKIPPED || mode == PENDING ) {
            return returnReceiverOrNull( receiver, method );
        }

        if( hasNestedSteps ) {
            maxStepDepth++;
        }

        try {
            return invoker.proceed();
        } catch(Exception | AssertionError e ) {
            return handleThrowable( receiver, method, e, System.nanoTime() - started, handleMethod );
        } finally {
            if( hasNestedSteps ) {
                maxStepDepth--;
            }
            if( handleMethod ) {
                handleMethodFinished( System.nanoTime() - started, hasNestedSteps );
            }
        }
    }
Whether all exceptions should be suppressed and not be rethrown
jgiven-core/src/main/java/com/tngtech/jgiven/impl/intercept/StepInterceptorImpl.java