public static <T, U extends Throwable> T withNewContext(String name, File spockUserHome, @Nullable DelegatingScript configurationScript, List<Class<?>> extensionClasses, boolean inheritParentExtensions, IThrowableFunction<RunContext, T, U> command) throws U { List<Class<?>> allExtensionClasses = new ArrayList<>(extensionClasses); if (inheritParentExtensions) allExtensionClasses.addAll(getCurrentExtensions()); RunContext context = new RunContext(name, spockUserHome, configurationScript, allExtensionClasses); LinkedList<RunContext> contextStack = contextStacks.get(); contextStack.addFirst(context); try { context.start(); return command.apply(context); } finally { contextStack.removeFirst(); context.stop(); } }