Program: 27352
Project: 27352
Buggy source:
private static void appendTypeNode(StringBuilder sb,Node typeNode){
  if (typeNode.getToken() == Token.BANG) {
    sb.append("String_Node_Str");
    appendTypeNode(sb,typeNode.getFirstChild());
  }
 else   if (typeNode.getToken() == Token.EQUALS) {
    appendTypeNode(sb,typeNode.getFirstChild());
    sb.append("String_Node_Str");
  }
 else   if (typeNode.getToken() == Token.PIPE) {
    sb.append("String_Node_Str");
    for (int i=0; i < typeNode.getChildCount() - 1; i++) {
      appendTypeNode(sb,typeNode.getChildAtIndex(i));
      sb.append("String_Node_Str");
    }
    appendTypeNode(sb,typeNode.getLastChild());
    sb.append("String_Node_Str");
  }
 else   if (typeNode.getToken() == Token.ELLIPSIS) {
    sb.append("String_Node_Str");
    if (typeNode.hasChildren() && !typeNode.getFirstChild().isEmpty()) {
      appendTypeNode(sb,typeNode.getFirstChild());
    }
  }
 else   if (typeNode.getToken() == Token.STAR) {
    sb.append("String_Node_Str");
  }
 else   if (typeNode.getToken() == Token.QMARK) {
    sb.append("String_Node_Str");
    if (typeNode.hasChildren()) {
      appendTypeNode(sb,typeNode.getFirstChild());
    }
  }
 else   if (typeNode.isFunction()) {
    appendFunctionNode(sb,typeNode);
  }
 else   if (typeNode.getToken() == Token.LC) {
    sb.append("String_Node_Str");
    Node lb=typeNode.getFirstChild();
    for (int i=0; i < lb.getChildCount() - 1; i++) {
      Node colon=lb.getChildAtIndex(i);
      if (colon.hasChildren()) {
        sb.append(colon.getFirstChild().getString()).append("String_Node_Str");
        appendTypeNode(sb,colon.getLastChild());
      }
 else {
        sb.append(colon.getString());
      }
      sb.append("String_Node_Str");
    }
    Node lastColon=lb.getLastChild();
    if (lastColon.hasChildren()) {
      sb.append(lastColon.getFirstChild().getString()).append("String_Node_Str");
      appendTypeNode(sb,lastColon.getLastChild());
    }
 else {
      sb.append(lastColon.getString());
    }
    sb.append("String_Node_Str");
  }
 else   if (typeNode.getToken() == Token.VOID) {
    sb.append("String_Node_Str");
  }
 else {
    if (typeNode.hasChildren()) {
      sb.append(typeNode.getString()).append("String_Node_Str");
      Node child=typeNode.getFirstChild();
      appendTypeNode(sb,child.getFirstChild());
      for (int i=1; i < child.getChildCount(); i++) {
        sb.append("String_Node_Str");
        appendTypeNode(sb,child.getChildAtIndex(i));
      }
      sb.append("String_Node_Str");
    }
 else {
      sb.append(typeNode.getString());
    }
  }
}

Fixed version (ground truth):
private void appendTypeNode(StringBuilder sb,Node typeNode){
  if (useOriginalName && typeNode.getOriginalName() != null) {
    sb.append(typeNode.getOriginalName());
    return;
  }
  if (typeNode.getToken() == Token.BANG) {
    sb.append("String_Node_Str");
    appendTypeNode(sb,typeNode.getFirstChild());
  }
 else   if (typeNode.getToken() == Token.EQUALS) {
    appendTypeNode(sb,typeNode.getFirstChild());
    sb.append("String_Node_Str");
  }
 else   if (typeNode.getToken() == Token.PIPE) {
    sb.append("String_Node_Str");
    for (int i=0; i < typeNode.getChildCount() - 1; i++) {
      appendTypeNode(sb,typeNode.getChildAtIndex(i));
      sb.append("String_Node_Str");
    }
    appendTypeNode(sb,typeNode.getLastChild());
    sb.append("String_Node_Str");
  }
 else   if (typeNode.getToken() == Token.ELLIPSIS) {
    sb.append("String_Node_Str");
    if (typeNode.hasChildren() && !typeNode.getFirstChild().isEmpty()) {
      appendTypeNode(sb,typeNode.getFirstChild());
    }
  }
 else   if (typeNode.getToken() == Token.STAR) {
    sb.append("String_Node_Str");
  }
 else   if (typeNode.getToken() == Token.QMARK) {
    sb.append("String_Node_Str");
    if (typeNode.hasChildren()) {
      appendTypeNode(sb,typeNode.getFirstChild());
    }
  }
 else   if (typeNode.isFunction()) {
    appendFunctionNode(sb,typeNode);
  }
 else   if (typeNode.getToken() == Token.LC) {
    sb.append("String_Node_Str");
    Node lb=typeNode.getFirstChild();
    for (int i=0; i < lb.getChildCount() - 1; i++) {
      Node colon=lb.getChildAtIndex(i);
      if (colon.hasChildren()) {
        sb.append(colon.getFirstChild().getString()).append("String_Node_Str");
        appendTypeNode(sb,colon.getLastChild());
      }
 else {
        sb.append(colon.getString());
      }
      sb.append("String_Node_Str");
    }
    Node lastColon=lb.getLastChild();
    if (lastColon.hasChildren()) {
      sb.append(lastColon.getFirstChild().getString()).append("String_Node_Str");
      appendTypeNode(sb,lastColon.getLastChild());
    }
 else {
      sb.append(lastColon.getString());
    }
    sb.append("String_Node_Str");
  }
 else   if (typeNode.getToken() == Token.VOID) {
    sb.append("String_Node_Str");
  }
 else {
    if (typeNode.hasChildren()) {
      sb.append(typeNode.getString()).append("String_Node_Str");
      Node child=typeNode.getFirstChild();
      appendTypeNode(sb,child.getFirstChild());
      for (int i=1; i < child.getChildCount(); i++) {
        sb.append("String_Node_Str");
        appendTypeNode(sb,child.getChildAtIndex(i));
      }
      sb.append("String_Node_Str");
    }
 else {
      sb.append(typeNode.getString());
    }
  }
}