static Type getSupertype(Type context, Class<?> contextRawType, Class<?> supertype) {
    if (!supertype.isAssignableFrom(contextRawType)) {
      throw new IllegalArgumentException();
    }
    return resolve(
        context, contextRawType, getGenericSupertype(context, contextRawType, supertype));
  }
Returns the generic form of {@code supertype}. For example, if this is {@code
ArrayList<String>}, this returns {@code Iterable<String>} given the input {@code
Iterable.class}.

@param supertype a superclass of, or interface implemented by, this.
core/src/main/java/feign/Types.java