guava/src/com/google/common/base/Throwables.java
@CanIgnoreReturnValue
  @GwtIncompatible
  @Deprecated
  public static RuntimeException propagate(Throwable throwable) {
    throwIfUnchecked(throwable);
    throw new RuntimeException(throwable);
  }
@CanIgnoreReturnValue
  @GwtIncompatible
  @Deprecated
  public static RuntimeException propagate(Throwable throwable) {
    throwIfUnchecked(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} and then propagates.

<p>This method always throws an exception. The {@code RuntimeException} return type allows
client code to signal to the compiler that statements after the call are unreachable. 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
@deprecated Use {@code throw e} or {@code throw new RuntimeException(e)} directly, or use a
combination of {@link #throwIfUnchecked} and {@code throw new RuntimeException(e)}. For
background on the deprecation, read <a href="https://goo.gl/Ivn2kc">Why we deprecated
{@code Throwables.propagate}</a>.