code: protected Content throwsTagsOutput(ThrowsTag[] throwTags,
          TagletWriter writer, Set<String> alreadyDocumented, boolean allowDups) {
          Content result = writer.getOutputInstance();
          if (throwTags.length > 0) {
              for (int i = 0; i < throwTags.length; ++i) {
                  ThrowsTag tt = throwTags[i];
                  ClassDoc cd = tt.exception();
                  if ((!allowDups) && (alreadyDocumented.contains(tt.exceptionName()) ||
                      (cd != null && alreadyDocumented.contains(cd.qualifiedName())))) {
                      continue;
                  }
                  if (alreadyDocumented.size() == 0) {
                      result.addContent(writer.getThrowsHeader());
                  }
                  result.addContent(writer.throwsTagOutput(tt));
                  alreadyDocumented.add(cd != null ?
                      cd.qualifiedName() : tt.exceptionName());
              }
          }
          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>.