docs: @Nullable
    final TypeToken<? super T> getGenericSuperclass() {
      if (runtimeType instanceof TypeVariable) {
        // First bound is always the super class, if one exists.
        return boundAsSuperclass(((TypeVariable<?>) runtimeType).getBounds()[0]);
      }
      if (runtimeType instanceof WildcardType) {
        // wildcard has one and only one upper bound.
        return boundAsSuperclass(((WildcardType) runtimeType).getUpperBounds()[0]);
      }
      Type superclass = getRawType().getGenericSuperclass();
      if (superclass == null) {
        return null;
      }
      @SuppressWarnings("unchecked") // super class of T
      TypeToken<? super T> superToken = (TypeToken<? super T>) resolveSupertype(superclass);
      return superToken;
    }