Program: 17550
Project: 17550
Buggy source:
/** 
 * Handles a closing, non-single tag. It will insert two lines. The first will be the next line that the cursor will be upon and will be indented by the opener tag's indent + 1 tab. The 2nd line will be on the same level as the opener and will contain the closing tag.
 * @param doc - the document that this action is taking place within
 * @param docCommand - the document command to modify
 * @return the modified document command
 * @throws BadLocationException
 */
private DocumentCommand doCloser(IDocument doc,DocumentCommand docCommand) throws BadLocationException {
  char lastChar=' ';
  char nextChar=' ';
  boolean autoCloseTag=this.autoClose_Tags;
  boolean isSingleTag=false;
  if (docCommand.offset >= 0)   lastChar=doc.getChar(docCommand.offset - 1);
  if (docCommand.offset < doc.getLength())   nextChar=doc.getChar(docCommand.offset + 1);
  String closingTag=getClosingTag((ICFDocument)doc,docCommand.offset + 1);
  isSingleTag=tagIsSingle(doc,docCommand,closingTag);
  if (!autoCloseTag || nextChar != '>')   closingTag+="String_Node_Str";
  closingTag="String_Node_Str" + closingTag;
  if (this.autoIndent_OnTagClose == INDENT_ONTAGCLOSE)   doInBetweenTagIndent(doc,docCommand,lastChar);
 else {
    try {
      if (docCommand.offset != doc.getLength() && doc.getChar(docCommand.offset) == '>') {
        stepThrough(docCommand);
      }
 else {
        docCommand.caretOffset=docCommand.offset + 1;
        docCommand.shiftsCaret=false;
      }
      if (autoCloseTag)       closingTag+="String_Node_Str";
    }
 catch (    Exception e) {
      e.printStackTrace();
    }
  }
  if (!isSingleTag)   docCommand.text+=closingTag;
  return docCommand;
}

Fixed version (ground truth):
/** 
 * Handles a closing, non-single tag. It will insert two lines. The first will be the next line that the cursor will be upon and will be indented by the opener tag's indent + 1 tab. The 2nd line will be on the same level as the opener and will contain the closing tag.
 * @param doc - the document that this action is taking place within
 * @param docCommand - the document command to modify
 * @return the modified document command
 * @throws BadLocationException
 */
private DocumentCommand doCloser(IDocument doc,DocumentCommand docCommand) throws BadLocationException {
  char lastChar=' ';
  char nextChar=' ';
  boolean autoCloseTag=this.autoClose_Tags;
  boolean isSingleTag=false;
  if (docCommand.offset >= 0)   lastChar=doc.getChar(docCommand.offset - 1);
  if (docCommand.offset < doc.getLength())   nextChar=doc.getChar(docCommand.offset + 1);
  String closingTag=getClosingTag((ICFDocument)doc,docCommand.offset + 1);
  isSingleTag=tagIsSingle(doc,docCommand,closingTag);
  if (!autoCloseTag)   closingTag+="String_Node_Str";
  closingTag="String_Node_Str" + closingTag;
  if (this.autoIndent_OnTagClose == INDENT_ONTAGCLOSE)   doInBetweenTagIndent(doc,docCommand,lastChar);
 else {
    try {
      if (docCommand.offset != doc.getLength() && doc.getChar(docCommand.offset) == '>') {
        stepThrough(docCommand);
      }
 else {
        docCommand.caretOffset=docCommand.offset + 1;
        docCommand.shiftsCaret=false;
      }
      if (autoCloseTag)       closingTag+="String_Node_Str";
    }
 catch (    Exception e) {
      e.printStackTrace();
    }
  }
  if (!isSingleTag)   docCommand.text+=closingTag;
  return docCommand;
}