Is there a reason the parameter name for ForwardingMap.remove(Object object) does not match the interface: Map.remove(Object key)?  In short: 'object' != 'key'
If yes, please kindly explain the history.
Else, can we rename to 'key' to match the interface?
static <V> NonListenableSettableFuture<V> create() {
      return new NonListenableSettableFuture<V>();
    }
    final SettableFuture<V> delegate = SettableFuture.create();
    @Override
    protected Future<V> delegate() {
      return delegate;
    }
    void set(V value) {
      delegate.set(value);
    }
  }
  private static final class RuntimeExceptionThrowingFuture<V> implements Future<V> {
    final CountDownLatch allowGetToComplete = new CountDownLatch(1);
    @Override
    public boolean cancel(boolean mayInterruptIfRunning) {
      throw new AssertionFailedError();
    }
    @Override
    public V get() throws InterruptedException {
      /*
       * Wait a little to give us time to call addListener before the future's
       * value is set in addition to the call we'll make after then.
       */
      allowGetToComplete.await(1, SECONDS);
      throw new RuntimeException("expected, should be caught");
    }
    @Override
    public V get(long timeout, TimeUnit unit) {
      throw new AssertionFailedError();