code: static String wildcardTypeToString(DocEnv env,
                                         Type.WildcardType wildThing, boolean full) {
          if (env.legacyDoclet) {
              return TypeMaker.getTypeName(env.types.erasure(wildThing), full);
          }
          StringBuilder s = new StringBuilder("?");
          List<Type> bounds = getExtendsBounds(wildThing);
          if (bounds.nonEmpty()) {
              s.append(" extends ");
          } else {
              bounds = getSuperBounds(wildThing);
              if (bounds.nonEmpty()) {
                  s.append(" super ");
              }
          }
          boolean first = true;   // currently only one bound is allowed
          for (Type b : bounds) {
              if (!first) {
                  s.append(" & ");
              }
              s.append(TypeMaker.getTypeString(env, b, full));
              first = false;
          }
          return s.toString();
      }
docs: Return the string form of a wildcard type ("?") along with any
  "extends" or "super" clause.  Delimiting brackets are not
  included.  Class names are qualified if "full" is true.