@Override
 public String visitTypeVar(TypeVar t, Locale locale) {
   if (unique(t) || !getConfiguration().isEnabled(RichFormatterFeature.UNIQUE_TYPEVAR_NAMES)) {
     return t.toString();
   } else {
     return localize(
         locale, "compiler.misc.type.var", t.toString(), indexOf(t, WhereClauseKind.TYPEVAR));
   }
 }
 private boolean unique(TypeVar typevar) {
   int found = 0;
   for (Type t : whereClauses.get(WhereClauseKind.TYPEVAR).keySet()) {
     if (t.toString().equals(typevar.toString())) {
       found++;
     }
   }
   if (found < 1) throw new AssertionError("Missing type variable in where clause " + typevar);
   return found == 1;
 }
 public Void visitTypeVar(TypeVar type, Void ignore) {
   // For TypeVars (and not subtypes), the bound should always be
   // null or bot. So, only print the bound for subtypes of TypeVar,
   // or if the bound is (erroneously) not null or bot.
   if (!type.hasTag(TypeTag.TYPEVAR)
       || !(type.bound == null || type.bound.hasTag(TypeTag.BOT))) {
     printType("bound", type.bound, Details.FULL);
   }
   printType("lower", type.lower, Details.FULL);
   return visitType(type, null);
 }