private void invoke(Object target, MethodInfo method, Object... arguments) { if (method == null || method.isExcluded()) return; // fast lane if (method.getInterceptors().isEmpty()) { invokeRaw(target, method, arguments); return; } // slow lane MethodInvocation invocation = new MethodInvocation(currentFeature, currentIteration, sharedInstance, currentInstance, target, method, arguments); try { invocation.proceed(); } catch (Throwable t) { ErrorInfo error = new ErrorInfo(method, t); runStatus = supervisor.error(error); } }