docs: public static Type resolveLastTypeParameter(Type genericContext, Class<?> supertype)
        throws IllegalStateException {
      Type resolvedSuperType =
          Types.getSupertype(genericContext, Types.getRawType(genericContext), supertype);
      checkState(resolvedSuperType instanceof ParameterizedType,
          "could not resolve %s into a parameterized type %s",
          genericContext, supertype);
      Type[] types = ParameterizedType.class.cast(resolvedSuperType).getActualTypeArguments();
      for (int i = 0; i < types.length; i++) {
        Type type = types[i];
        if (type instanceof WildcardType) {
          types[i] = ((WildcardType) type).getUpperBounds()[0];
        }
      }
      return types[types.length - 1];
    }