code: public static RuntimeException propagate(Throwable throwable) {
      propagateIfInstanceOf(throwable, Error.class);
      propagateIfInstanceOf(throwable, RuntimeException.class);
      throw new RuntimeException(throwable);
    }
docs: 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