private static Object getFutureValue(ListenableFuture<?> future) {
    if (future instanceof Trusted) {
      // Break encapsulation for TrustedFuture instances since we know that subclasses cannot
      // override .get() (since it is final) and therefore this is equivalent to calling .get()
      // and unpacking the exceptions like we do below (just much faster because it is a single
      // field read instead of a read, several branches and possibly creating exceptions).
      Object v = ((AbstractFuture<?>) future).value;
      if (v instanceof Cancellation) {
        // If the other future was interrupted, clear the interrupted bit while preserving the cause
        // this will make it consistent with how non-trustedfutures work which cannot propagate the
        // wasInterrupted bit
        Cancellation c = (Cancellation) v;
        if (c.wasInterrupted) {
          v =
              c.cause != null
                  ? new Cancellation(/* wasInterrupted= */ false, c.cause)
                  : Cancellation.CAUSELESS_CANCELLED;
        }
      }
      return v;
    }
    if (future instanceof InternalFutureFailureAccess) {
      Throwable throwable =
          InternalFutures.tryInternalFastPathGetFailure((InternalFutureFailureAccess) future);
      if (throwable != null) {
        return new Failure(throwable);
      }
    }
    boolean wasCancelled = future.isCancelled();
    // Don't allocate a CancellationException if it's not necessary
    if (!GENERATE_CANCELLATION_CAUSES & wasCancelled) {
      return Cancellation.CAUSELESS_CANCELLED;
    }
    // Otherwise calculate the value by calling .get()
    try {
      Object v = getUninterruptibly(future);
      if (wasCancelled) {
        return new Cancellation(
            false,
            new IllegalArgumentException(
                "get() did not throw CancellationException, despite reporting "
                    + "isCancelled() == true: "
                    + future));
      }
      return v == null ? NULL : v;
    } catch (ExecutionException exception) {
      if (wasCancelled) {
        return new Cancellation(
            false,
            new IllegalArgumentException(
                "get() did not throw CancellationException, despite reporting "
                    + "isCancelled() == true: "
                    + future,
                exception));
      }
      return new Failure(exception.getCause());
    } catch (CancellationException cancellation) {
      if (!wasCancelled) {
        return new Failure(
            new IllegalArgumentException(
                "get() threw CancellationException, despite reporting isCancelled() == false: "
                    + future,
                cancellation));
      }
      return new Cancellation(false, cancellation);
    } catch (Throwable t) {
      return new Failure(t);
    }
  }
private static Object getFutureValue(ListenableFuture<?> future) {
    if (future instanceof Trusted) {
      
      
      
      
      Object v = ((AbstractFuture<?>) future).value;
      if (v instanceof Cancellation) {
        
        
        
        Cancellation c = (Cancellation) v;
        if (c.wasInterrupted) {
          v =
              c.cause != null
                  ? new Cancellation( false, c.cause)
                  : Cancellation.CAUSELESS_CANCELLED;
        }
      }
      return v;
    }
    if (future instanceof InternalFutureFailureAccess) {
      Throwable throwable =
          InternalFutures.tryInternalFastPathGetFailure((InternalFutureFailureAccess) future);
      if (throwable != null) {
        return new Failure(throwable);
      }
    }
    boolean wasCancelled = future.isCancelled();
    
    if (!GENERATE_CANCELLATION_CAUSES & wasCancelled) {
      return Cancellation.CAUSELESS_CANCELLED;
    }
    
    try {
      Object v = getUninterruptibly(future);
      if (wasCancelled) {
        return new Cancellation(
            false,
            new IllegalArgumentException(
                "get() did not throw CancellationException, despite reporting "
                    + "isCancelled() == true: "
                    + future));
      }
      return v == null ? NULL : v;
    } catch (ExecutionException exception) {
      if (wasCancelled) {
        return new Cancellation(
            false,
            new IllegalArgumentException(
                "get() did not throw CancellationException, despite reporting "
                    + "isCancelled() == true: "
                    + future,
                exception));
      }
      return new Failure(exception.getCause());
    } catch (CancellationException cancellation) {
      if (!wasCancelled) {
        return new Failure(
            new IllegalArgumentException(
                "get() threw CancellationException, despite reporting isCancelled() == false: "
                    + future,
                cancellation));
      }
      return new Cancellation(false, cancellation);
    } catch (Throwable t) {
      return new Failure(t);
    }
  }
private static Object getFutureValue ( ListenableFuture < ? > future ) { if ( future instanceof Trusted ) { // Break encapsulation for TrustedFuture instances since we know that subclasses cannot // override .get() (since it is final) and therefore this is equivalent to calling .get() // and unpacking the exceptions like we do below (just much faster because it is a single // field read instead of a read, several branches and possibly creating exceptions). Object v = ( ( AbstractFuture < ? > ) future ) . value ; if ( v instanceof Cancellation ) { // If the other future was interrupted, clear the interrupted bit while preserving the cause // this will make it consistent with how non-trustedfutures work which cannot propagate the // wasInterrupted bit Cancellation c = ( Cancellation ) v ; if ( c . wasInterrupted ) { v = c . cause != null ? new Cancellation ( /* wasInterrupted= */ false , c . cause ) : Cancellation . CAUSELESS_CANCELLED ; } } return v ; } if ( future instanceof InternalFutureFailureAccess ) { Throwable throwable = InternalFutures . tryInternalFastPathGetFailure ( ( InternalFutureFailureAccess ) future ) ; if ( throwable != null ) { return new Failure ( throwable ) ; } } boolean wasCancelled = future . isCancelled ( ) ; // Don't allocate a CancellationException if it's not necessary if ( ! GENERATE_CANCELLATION_CAUSES & wasCancelled ) { return Cancellation . CAUSELESS_CANCELLED ; } // Otherwise calculate the value by calling .get() try { Object v = getUninterruptibly ( future ) ; if ( wasCancelled ) { return new Cancellation ( false , new IllegalArgumentException ( "get() did not throw CancellationException, despite reporting " + "isCancelled() == true: " + future ) ) ; } return v == null ? NULL : v ; } catch ( ExecutionException exception ) { if ( wasCancelled ) { return new Cancellation ( false , new IllegalArgumentException ( "get() did not throw CancellationException, despite reporting " + "isCancelled() == true: " + future , exception ) ) ; } return new Failure ( exception . getCause ( ) ) ; } catch ( CancellationException cancellation ) { if ( ! wasCancelled ) { return new Failure ( new IllegalArgumentException ( "get() threw CancellationException, despite reporting isCancelled() == false: " + future , cancellation ) ) ; } return new Cancellation ( false , cancellation ) ; } catch ( Throwable t ) { return new Failure ( t ) ; } }
Returns a value that satisfies the contract of the {@link #value} field based on the state of
given future.

<p>This is approximately the inverse of {@link #getDoneValue(Object)}
Returns a value that satisfies the contract of the { @link #value } field based on the state of given future .