Program: 25269
Project: 25269
Buggy source:
private static void functionString(ASTNode root,StringBuilder buf){
  if (findNodeByPath(root,KW_CASE) != null) {
    buf.append("String_Node_Str");
    toInfixString((ASTNode)root.getChild(1),buf);
    ArrayList<Node> caseChildren=root.getChildren();
    int from=2;
    int nchildren=caseChildren.size();
    int to=nchildren % 2 == 1 ? nchildren - 1 : nchildren;
    for (int i=from; i < to; i+=2) {
      buf.append("String_Node_Str");
      toInfixString((ASTNode)caseChildren.get(i),buf);
      buf.append("String_Node_Str");
      toInfixString((ASTNode)caseChildren.get(i + 1),buf);
    }
    if (nchildren % 2 == 1) {
      buf.append("String_Node_Str");
      toInfixString((ASTNode)caseChildren.get(nchildren - 1),buf);
    }
    buf.append("String_Node_Str");
  }
 else   if (findNodeByPath(root,KW_WHEN) != null) {
    buf.append("String_Node_Str");
    ArrayList<Node> caseChildren=root.getChildren();
    int from=1;
    int nchildren=caseChildren.size();
    int to=nchildren % 2 == 1 ? nchildren : nchildren - 1;
    for (int i=from; i < to; i+=2) {
      buf.append("String_Node_Str");
      toInfixString((ASTNode)caseChildren.get(i),buf);
      buf.append("String_Node_Str");
      toInfixString((ASTNode)caseChildren.get(i + 1),buf);
    }
    if (nchildren % 2 == 0) {
      buf.append("String_Node_Str");
      toInfixString((ASTNode)caseChildren.get(nchildren - 1),buf);
    }
    buf.append("String_Node_Str");
  }
 else   if (findNodeByPath(root,TOK_ISNULL) != null) {
    toInfixString((ASTNode)root.getChild(1),buf);
    buf.append("String_Node_Str");
  }
 else   if (findNodeByPath(root,TOK_ISNOTNULL) != null) {
    toInfixString((ASTNode)root.getChild(1),buf);
    buf.append("String_Node_Str");
  }
 else   if (((ASTNode)root.getChild(0)).getToken().getType() == Identifier && ((ASTNode)root.getChild(0)).getToken().getText().equalsIgnoreCase("String_Node_Str")) {
    ASTNode tokTrue=findNodeByPath(root,KW_TRUE);
    ASTNode tokFalse=findNodeByPath(root,KW_FALSE);
    if (tokTrue != null) {
      toInfixString((ASTNode)root.getChild(2),buf);
      buf.append("String_Node_Str");
      toInfixString((ASTNode)root.getChild(3),buf);
      buf.append("String_Node_Str");
      toInfixString((ASTNode)root.getChild(4),buf);
    }
 else     if (tokFalse != null) {
      toInfixString((ASTNode)root.getChild(2),buf);
      buf.append("String_Node_Str");
      toInfixString((ASTNode)root.getChild(3),buf);
      buf.append("String_Node_Str");
      toInfixString((ASTNode)root.getChild(4),buf);
    }
  }
 else   if (findNodeByPath(root,KW_IN) != null) {
    toInfixString((ASTNode)root.getChild(1),buf);
    ASTNode rootParent=(ASTNode)root.getParent();
    if (rootParent != null && rootParent.getToken().getType() == KW_NOT) {
      buf.append("String_Node_Str");
    }
    buf.append("String_Node_Str");
    for (int i=2; i < root.getChildCount(); i++) {
      toInfixString((ASTNode)root.getChild(i),buf);
      if (i < root.getChildCount() - 1) {
        buf.append("String_Node_Str");
      }
    }
    buf.append("String_Node_Str");
  }
 else {
    String fname=((ASTNode)root.getChild(0)).getText();
    buf.append(fname.toLowerCase()).append("String_Node_Str");
    for (int i=1; i < root.getChildCount(); i++) {
      toInfixString((ASTNode)root.getChild(i),buf);
      if (i != root.getChildCount() - 1) {
        buf.append("String_Node_Str");
      }
    }
    buf.append("String_Node_Str");
  }
}

Fixed version (ground truth):
private static void functionString(ASTNode root,StringBuilder buf){
  if (findNodeByPath(root,KW_CASE) != null) {
    buf.append("String_Node_Str");
    toInfixString((ASTNode)root.getChild(1),buf);
    ArrayList<Node> caseChildren=root.getChildren();
    int from=2;
    int nchildren=caseChildren.size();
    int to=nchildren % 2 == 1 ? nchildren - 1 : nchildren;
    for (int i=from; i < to; i+=2) {
      buf.append("String_Node_Str");
      toInfixString((ASTNode)caseChildren.get(i),buf);
      buf.append("String_Node_Str");
      toInfixString((ASTNode)caseChildren.get(i + 1),buf);
    }
    if (nchildren % 2 == 1) {
      buf.append("String_Node_Str");
      toInfixString((ASTNode)caseChildren.get(nchildren - 1),buf);
    }
    buf.append("String_Node_Str");
  }
 else   if (findNodeByPath(root,KW_WHEN) != null) {
    buf.append("String_Node_Str");
    ArrayList<Node> caseChildren=root.getChildren();
    int from=1;
    int nchildren=caseChildren.size();
    int to=nchildren % 2 == 1 ? nchildren : nchildren - 1;
    for (int i=from; i < to; i+=2) {
      buf.append("String_Node_Str");
      toInfixString((ASTNode)caseChildren.get(i),buf);
      buf.append("String_Node_Str");
      toInfixString((ASTNode)caseChildren.get(i + 1),buf);
    }
    if (nchildren % 2 == 0) {
      buf.append("String_Node_Str");
      toInfixString((ASTNode)caseChildren.get(nchildren - 1),buf);
    }
    buf.append("String_Node_Str");
  }
 else   if (findNodeByPath(root,TOK_ISNULL) != null) {
    toInfixString((ASTNode)root.getChild(1),buf);
    buf.append("String_Node_Str");
  }
 else   if (findNodeByPath(root,TOK_ISNOTNULL) != null) {
    toInfixString((ASTNode)root.getChild(1),buf);
    buf.append("String_Node_Str");
  }
 else   if (((ASTNode)root.getChild(0)).getToken().getType() == Identifier && ((ASTNode)root.getChild(0)).getToken().getText().equalsIgnoreCase("String_Node_Str")) {
    ASTNode tokTrue=findNodeByPath(root,KW_TRUE);
    ASTNode tokFalse=findNodeByPath(root,KW_FALSE);
    if (tokTrue != null) {
      toInfixString((ASTNode)root.getChild(2),buf);
      buf.append("String_Node_Str");
      toInfixString((ASTNode)root.getChild(3),buf);
      buf.append("String_Node_Str");
      toInfixString((ASTNode)root.getChild(4),buf);
    }
 else     if (tokFalse != null) {
      toInfixString((ASTNode)root.getChild(2),buf);
      buf.append("String_Node_Str");
      toInfixString((ASTNode)root.getChild(3),buf);
      buf.append("String_Node_Str");
      toInfixString((ASTNode)root.getChild(4),buf);
    }
  }
 else   if (findNodeByPath(root,KW_IN) != null) {
    toInfixString((ASTNode)root.getChild(1),buf);
    ASTNode rootParent=(ASTNode)root.getParent();
    if (rootParent != null && rootParent.getToken().getType() == KW_NOT) {
      buf.append("String_Node_Str");
    }
    buf.append("String_Node_Str");
    for (int i=2; i < root.getChildCount(); i++) {
      toInfixString((ASTNode)root.getChild(i),buf);
      if (i < root.getChildCount() - 1) {
        buf.append("String_Node_Str");
      }
    }
    buf.append("String_Node_Str");
  }
 else   if (findNodeByPath(root,KW_CAST) != null) {
    buf.append("String_Node_Str");
    toInfixString((ASTNode)root.getChild(1),buf);
    buf.append("String_Node_Str");
    toInfixString((ASTNode)root.getChild(0),buf);
  }
 else {
    int rootType=((ASTNode)root.getChild(0)).getToken().getType();
    if (PRIMITIVE_TYPES.contains(rootType)) {
      buf.append("String_Node_Str");
      toInfixString((ASTNode)root.getChild(1),buf);
      buf.append("String_Node_Str");
      toInfixString((ASTNode)root.getChild(0),buf);
      buf.append("String_Node_Str");
    }
 else {
      String fname=((ASTNode)root.getChild(0)).getText();
      buf.append(fname.toLowerCase()).append("String_Node_Str");
      for (int i=1; i < root.getChildCount(); i++) {
        toInfixString((ASTNode)root.getChild(i),buf);
        if (i != root.getChildCount() - 1) {
          buf.append("String_Node_Str");
        }
      }
      buf.append("String_Node_Str");
    }
  }
}