private V getDoneValue(Object obj) throws ExecutionException {
    // While this seems like it might be too branch-y, simple benchmarking proves it to be
    // unmeasurable (comparing done AbstractFutures with immediateFuture)
    if (obj instanceof Cancellation) {
      throw cancellationExceptionWithCause("Task was cancelled.", ((Cancellation) obj).cause);
    } else if (obj instanceof Failure) {
      throw new ExecutionException(((Failure) obj).exception);
    } else if (obj == NULL) {
      return null;
    } else {
      @SuppressWarnings("unchecked") // this is the only other option
      V asV = (V) obj;
      return asV;
    }
  }
private V getDoneValue(Object obj) throws ExecutionException {
    
    
    if (obj instanceof Cancellation) {
      throw cancellationExceptionWithCause("Task was cancelled.", ((Cancellation) obj).cause);
    } else if (obj instanceof Failure) {
      throw new ExecutionException(((Failure) obj).exception);
    } else if (obj == NULL) {
      return null;
    } else {
      @SuppressWarnings("unchecked") 
      V asV = (V) obj;
      return asV;
    }
  }
private V getDoneValue ( Object obj ) throws ExecutionException { // While this seems like it might be too branch-y, simple benchmarking proves it to be // unmeasurable (comparing done AbstractFutures with immediateFuture) if ( obj instanceof Cancellation ) { throw cancellationExceptionWithCause ( "Task was cancelled." , ( ( Cancellation ) obj ) . cause ) ; } else if ( obj instanceof Failure ) { throw new ExecutionException ( ( ( Failure ) obj ) . exception ) ; } else if ( obj == NULL ) { return null ; } else { @ SuppressWarnings ( "unchecked" ) // this is the only other option V asV = ( V ) obj ; return asV ; } }
Unboxes {@code obj}. Assumes that obj is not {@code null} or a {@link SetFuture}.
Unboxes {