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();
}
}