Program: 12947
Project: 12947
Buggy source:
/** 
 * Given an array of <code>Tag</code>s representing this custom tag, return its string representation.  Print a warning for param tags that do not map to parameters.  Print a warning for param tags that are duplicated.
 * @param paramTags the array of <code>ParamTag</code>s to convert.
 * @param writer the TagletWriter that will write this tag.
 * @param alreadyDocumented the set of exceptions that have alreadybeen documented.
 * @param rankMap a {@link java.util.Map} which holds orderinginformation about the parameters.
 * @param nameMap a {@link java.util.Map} which holds a mappingof a rank of a parameter to its name.  This is used to ensure that the right name is used when parameter documentation is inherited.
 * @return the TagletOutput representation of this <code>Tag</code>.
 */
private TagletOutput processParamTags(boolean isNonTypeParams,ParamTag[] paramTags,Map<String,String> rankMap,TagletWriter writer,Set<String> alreadyDocumented){
  TagletOutput result=writer.getOutputInstance();
  if (paramTags.length > 0) {
    for (int i=0; i < paramTags.length; ++i) {
      ParamTag pt=paramTags[i];
      String paramName=isNonTypeParams ? pt.parameterName() : "String_Node_Str" + pt.parameterName() + "String_Node_Str";
      if (!rankMap.containsKey(pt.parameterName())) {
        writer.getMsgRetriever().warning(pt.position(),isNonTypeParams ? "String_Node_Str" : "String_Node_Str",paramName);
      }
      String rank=rankMap.get(pt.parameterName());
      if (rank != null && alreadyDocumented.contains(rank)) {
        writer.getMsgRetriever().warning(pt.position(),isNonTypeParams ? "String_Node_Str" : "String_Node_Str",paramName);
      }
      result.appendOutput(processParamTag(isNonTypeParams,writer,pt,pt.parameterName(),alreadyDocumented.size() == 0));
      alreadyDocumented.add(rank);
    }
  }
  return result;
}

Fixed version (ground truth):
/** 
 * Given an array of <code>Tag</code>s representing this custom tag, return its string representation.  Print a warning for param tags that do not map to parameters.  Print a warning for param tags that are duplicated.
 * @param paramTags the array of <code>ParamTag</code>s to convert.
 * @param writer the TagletWriter that will write this tag.
 * @param alreadyDocumented the set of exceptions that have alreadybeen documented.
 * @param rankMap a {@link java.util.Map} which holds orderinginformation about the parameters.
 * @param rankMap a {@link java.util.Map} which holds a mappingof a rank of a parameter to its name.  This is used to ensure that the right name is used when parameter documentation is inherited.
 * @return the TagletOutput representation of this <code>Tag</code>.
 */
private TagletOutput processParamTags(boolean isNonTypeParams,ParamTag[] paramTags,Map<String,String> rankMap,TagletWriter writer,Set<String> alreadyDocumented){
  TagletOutput result=writer.getOutputInstance();
  if (paramTags.length > 0) {
    for (int i=0; i < paramTags.length; ++i) {
      ParamTag pt=paramTags[i];
      String paramName=isNonTypeParams ? pt.parameterName() : "String_Node_Str" + pt.parameterName() + "String_Node_Str";
      if (!rankMap.containsKey(pt.parameterName())) {
        writer.getMsgRetriever().warning(pt.position(),isNonTypeParams ? "String_Node_Str" : "String_Node_Str",paramName);
      }
      String rank=rankMap.get(pt.parameterName());
      if (rank != null && alreadyDocumented.contains(rank)) {
        writer.getMsgRetriever().warning(pt.position(),isNonTypeParams ? "String_Node_Str" : "String_Node_Str",paramName);
      }
      result.appendOutput(processParamTag(isNonTypeParams,writer,pt,pt.parameterName(),alreadyDocumented.size() == 0));
      alreadyDocumented.add(rank);
    }
  }
  return result;
}