android/guava/src/com/google/common/util/concurrent/AbstractFuture.java
@Override
  @NullableDecl
  protected final Throwable tryInternalFastPathGetFailure() {
    if (this instanceof Trusted) {
      Object obj = value;
      if (obj instanceof Failure) {
        return ((Failure) obj).exception;
      }
    }
    return null;
  }
@Override
  @NullableDecl
  protected final Throwable tryInternalFastPathGetFailure() {
    if (this instanceof Trusted) {
      Object obj = value;
      if (obj instanceof Failure) {
        return ((Failure) obj).exception;
      }
    }
    return null;
  }
Usually returns {@code null} but, if this {@code Future} has failed, may <i>optionally</i>
return the cause of the failure. "Failure" means specifically "completed with an exception"; it
does not include "was cancelled." To be explicit: If this method returns a non-null value,
then:

<ul>
<li>{@code isDone()} must return {@code true}
<li>{@code isCancelled()} must return {@code false}
<li>{@code get()} must not block, and it must throw an {@code ExecutionException} with the
return value of this method as its cause
</ul>

<p>This method is {@code protected} so that classes like {@code
com.google.common.util.concurrent.SettableFuture} do not expose it to their users as an
instance method. In the unlikely event that you need to call this method, call {@link
InternalFutures#tryInternalFastPathGetFailure(InternalFutureFailureAccess)}.

@since 27.0