@Nullable
  default Object respond(IMockInvocation invocation) {
    return getResponseSupplier(invocation).get();
  }
Returns the response to be made for the given invocation. It is preferable to call
{@link #getResponseSupplier(IMockInvocation)} instead, as that method can separate immediate actions that might
need to be done under some lock from actions that can be done later in the returned supplier.

<p>The default implementation of this method uses {@code getResponseSupplier}, the default implementation of which
uses this method. Implementations of this interface should override exactly one of these two methods. If they
override both, the result could be different depending on which method is called, if they override none,
any call will result in a {@code StackOverflowError}. Calls to the two methods must always behave consistent,
and the easiest way to achieve that is to override only one of them.

<p>If you implement this interface and do not need to update shared state immediately like when implementing
{@link IChainableResponseGenerator}, you can just override this method. If you need the separation of immediate
actions done under some lock and actions that can be done delayed, better override {@code getResponseSupplier}.

@param invocation The invocation to generate a response for
@return The generated response
spock-core/src/main/java/org/spockframework/mock/IResponseGenerator.java