code: static TypeMirror replaceTypeVariablesWithUpperBounds(Types types, TypeMirror type) {
      return type.accept(UpperBoundSubstitutingVisitor.INSTANCE, types);
    }
docs: <p>Use this when you want a field's type that can be used from a static context (e.g. where
  the type vars are no longer available).</p>
  
  <p>Must never be called on types that have recursive type arguments, e.g.
  {@literal T extends Comparable<T>}.</p>