code: protected Content throwsTagsOutput(Map<List<? extends DocTree>, ExecutableElement> throwTags,
          TagletWriter writer, Set<String> alreadyDocumented, boolean allowDups) {
          Utils utils = writer.configuration().utils;
          Content result = writer.getOutputInstance();
          if (!throwTags.isEmpty()) {
              for (Entry<List<? extends DocTree>, ExecutableElement> entry : throwTags.entrySet()) {
                  CommentHelper ch = utils.getCommentHelper(entry.getValue());
                  Element e = entry.getValue();
                  for (DocTree dt : entry.getKey()) {
                      Element te = ch.getException(utils.configuration, dt);
                      String excName = ch.getExceptionName(dt).toString();
                      if ((!allowDups) &&
                          (alreadyDocumented.contains(excName) ||
                          (te != null && alreadyDocumented.contains(utils.getFullyQualifiedName(te))))) {
                          continue;
                      }
                      if (alreadyDocumented.isEmpty()) {
                          result.addContent(writer.getThrowsHeader());
                      }
                      result.addContent(writer.throwsTagOutput(e, dt));
                      alreadyDocumented.add(te != null
                              ? utils.getFullyQualifiedName(te)
                              : excName);
                  }
              }
          }
          return result;
      }
docs: Given an array of <code>Tag</code>s representing this custom
  tag, return its string representation.
  @param throwTags the array of <code>ThrowsTag</code>s to convert.
  @param writer the TagletWriter that will write this tag.
  @param alreadyDocumented the set of exceptions that have already
  been documented.
  @param allowDups True if we allow duplicate throws tags to be documented.
  @return the Content representation of this <code>Tag</code>.