/**
  * Create a new JSON type for the given declared type. The caller is responsible for providing a
  * list of concrete types to use to replace parameterized type placeholders.
  */
 private JsonType newJsonType(
     DeclaredType type,
     List<? extends TypeMirror> concreteTypes,
     Collection<DeclaredType> typeRecursionGuard) {
   TypeVisitorImpl visitor = new TypeVisitorImpl(type, concreteTypes, typeRecursionGuard);
   return type.accept(visitor, null);
 }
 @Override
 public JsonType visitTypeVariable(TypeVariable typeVariable, Void o) {
   DeclaredType type = getDeclaredTypeForTypeVariable(typeVariable);
   if (type != null) // null: un-parameterized usage of a generics-having type
   {
     return type.accept(this, o);
   } else {
     return null;
   }
 }