public static RuntimeException propagate(Throwable throwable) {
    propagateIfPossible(Preconditions.checkNotNull(throwable));
    throw new RuntimeException(throwable);
  }
Propagates {@code throwable} as-is if it is an instance of {@link RuntimeException} or {@link
Error}, or else as a last resort, wraps it in a {@code RuntimeException} then propagates.

<p>This method always throws an exception. The {@code RuntimeException} return type is only for
client code to make Java type system happy in case a return value is required by the enclosing
method. Example usage:

<pre>
  T doSomething() {
    try {
      return someMethodThatCouldThrowAnything();
    } catch (IKnowWhatToDoWithThisException e) {
      return handle(e);
    } catch (Throwable t) {
      throw Throwables.propagate(t);
    }
  }
</pre>

@param throwable the Throwable to propagate
@return nothing will ever be returned; this return type is only for your convenience, as
    illustrated in the example above
fbcore/src/main/java/com/facebook/common/internal/Throwables.java