static Executor rejectionPropagatingExecutor(
      final Executor delegate, final AbstractFuture<?> future) {
    checkNotNull(delegate);
    checkNotNull(future);
    if (delegate == directExecutor()) {
      // directExecutor() cannot throw RejectedExecutionException
      return delegate;
    }
    return new Executor() {
      boolean thrownFromDelegate = true;

      @Override
      public void execute(final Runnable command) {
        try {
          delegate.execute(
              new Runnable() {
                @Override
                public void run() {
                  thrownFromDelegate = false;
                  command.run();
                }
              });
        } catch (RejectedExecutionException e) {
          if (thrownFromDelegate) {
            // wrap exception?
            future.setException(e);
          }
          // otherwise it must have been thrown from a transitive call and the delegate runnable
          // should have handled it.
        }
      }
    };
  }
static Executor rejectionPropagatingExecutor(
      final Executor delegate, final AbstractFuture<?> future) {
    checkNotNull(delegate);
    checkNotNull(future);
    if (delegate == directExecutor()) {
      
      return delegate;
    }
    return new Executor() {
      boolean thrownFromDelegate = true;

      @Override
      public void execute(final Runnable command) {
        try {
          delegate.execute(
              new Runnable() {
                @Override
                public void run() {
                  thrownFromDelegate = false;
                  command.run();
                }
              });
        } catch (RejectedExecutionException e) {
          if (thrownFromDelegate) {
            
            future.setException(e);
          }
          
          
        }
      }
    };
  }
static Executor rejectionPropagatingExecutor ( final Executor delegate , final AbstractFuture < ? > future ) { checkNotNull ( delegate ) ; checkNotNull ( future ) ; if ( delegate == directExecutor ( ) ) { // directExecutor() cannot throw RejectedExecutionException return delegate ; } return new Executor ( ) { boolean thrownFromDelegate = true ; @ Override public void execute ( final Runnable command ) { try { delegate . execute ( new Runnable ( ) { @ Override public void run ( ) { thrownFromDelegate = false ; command . run ( ) ; } } ) ; } catch ( RejectedExecutionException e ) { if ( thrownFromDelegate ) { // wrap exception? future . setException ( e ) ; } // otherwise it must have been thrown from a transitive call and the delegate runnable // should have handled it. } } } ; }
Returns an Executor that will propagate {@link RejectedExecutionException} from the delegate
executor to the given {@code future}.

<p>Note, the returned executor can only be used once.
Returns an Executor that will propagate { @link RejectedExecutionException } from the delegate executor to the given { @code future } .