Program: 25270
Project: 25270
Buggy source:
/** 
 * Recursively reconstruct query string given a query AST
 * @param root
 * @param buf  preallocated builder where the reconstructed string will be written
 */
public static void toInfixString(ASTNode root,StringBuilder buf){
  if (root == null) {
    return;
  }
  int rootType=root.getToken().getType();
  String rootText=root.getText();
  if (Identifier == rootType || Number == rootType || StringLiteral == rootType || KW_TRUE == rootType || KW_FALSE == rootType || KW_FORMATTED == rootType || KW_EXTENDED == rootType || KW_DEPENDENCY == rootType) {
    if (StringLiteral == rootType) {
      buf.append(' ').append(rootText).append(' ');
    }
 else     if (KW_TRUE == rootType) {
      buf.append("String_Node_Str");
    }
 else     if (KW_FALSE == rootType) {
      buf.append("String_Node_Str");
    }
 else     if (Identifier == rootType && TOK_SELEXPR == ((ASTNode)root.getParent()).getToken().getType() && hasSpaces(rootText)) {
      buf.append("String_Node_Str").append(rootText).append("String_Node_Str");
    }
 else     if (Identifier == rootType && TOK_FUNCTIONSTAR == ((ASTNode)root.getParent()).getToken().getType()) {
      buf.append("String_Node_Str").append(rootText == null ? "String_Node_Str" : rootText.toLowerCase());
    }
 else {
      buf.append("String_Node_Str").append(rootText == null ? "String_Node_Str" : rootText.toLowerCase()).append("String_Node_Str");
    }
  }
 else   if (TOK_ALLCOLREF == rootType) {
    if (root.getChildCount() > 0) {
      for (int i=0; i < root.getChildCount(); i++) {
        toInfixString((ASTNode)root.getChild(i),buf);
      }
      buf.append("String_Node_Str");
    }
    buf.append("String_Node_Str");
  }
 else   if (TOK_FUNCTIONSTAR == rootType) {
    if (root.getChildCount() > 0) {
      for (int i=0; i < root.getChildCount(); i++) {
        toInfixString((ASTNode)root.getChild(i),buf);
      }
    }
    buf.append("String_Node_Str");
  }
 else   if (UNARY_OPERATORS.contains(Integer.valueOf(rootType))) {
    if (KW_NOT == rootType) {
      if (!(findNodeByPath(root,TOK_FUNCTION,KW_IN) != null)) {
        buf.append("String_Node_Str");
      }
    }
 else     if (TILDE == rootType) {
      buf.append("String_Node_Str");
    }
    for (int i=0; i < root.getChildCount(); i++) {
      toInfixString((ASTNode)root.getChild(i),buf);
    }
  }
 else   if (BINARY_OPERATORS.contains(Integer.valueOf(root.getToken().getType()))) {
    buf.append("String_Node_Str");
    if (MINUS == rootType && root.getChildCount() == 1) {
      buf.append(' ').append(rootText.toLowerCase()).append(' ');
      toInfixString((ASTNode)root.getChild(0),buf);
    }
 else {
      toInfixString((ASTNode)root.getChild(0),buf);
      if (root.getToken().getType() != DOT) {
        buf.append(' ').append(rootText.toLowerCase()).append(' ');
      }
 else {
        buf.append(rootText.toLowerCase());
      }
      toInfixString((ASTNode)root.getChild(1),buf);
    }
    buf.append("String_Node_Str");
  }
 else   if (LSQUARE == rootType) {
    toInfixString((ASTNode)root.getChild(0),buf);
    buf.append("String_Node_Str");
    toInfixString((ASTNode)root.getChild(1),buf);
    buf.append("String_Node_Str");
  }
 else   if (TOK_FUNCTION == root.getToken().getType()) {
    functionString(root,buf);
  }
 else   if (TOK_FUNCTIONDI == rootType) {
    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");
  }
 else   if (TOK_TABSORTCOLNAMEDESC == rootType || TOK_TABSORTCOLNAMEASC == rootType) {
    for (int i=0; i < root.getChildCount(); i++) {
      StringBuilder orderByCol=new StringBuilder();
      toInfixString((ASTNode)root.getChild(i),orderByCol);
      String colStr=orderByCol.toString().trim();
      if (colStr.startsWith("String_Node_Str") && colStr.endsWith("String_Node_Str")) {
        colStr=colStr.substring(1,colStr.length() - 1);
      }
      buf.append(colStr);
      buf.append("String_Node_Str");
    }
    if (TOK_TABSORTCOLNAMEDESC == rootType) {
      buf.append("String_Node_Str");
    }
 else     if (TOK_TABSORTCOLNAMEASC == rootType) {
      buf.append("String_Node_Str");
    }
  }
 else   if (TOK_SELECT == rootType || TOK_ORDERBY == rootType || TOK_GROUPBY == rootType) {
    for (int i=0; i < root.getChildCount(); i++) {
      toInfixString((ASTNode)root.getChild(i),buf);
      if (i != root.getChildCount() - 1) {
        buf.append("String_Node_Str");
      }
    }
  }
 else   if (TOK_SELECTDI == rootType) {
    buf.append("String_Node_Str");
    for (int i=0; i < root.getChildCount(); i++) {
      toInfixString((ASTNode)root.getChild(i),buf);
      if (i != root.getChildCount() - 1) {
        buf.append("String_Node_Str");
      }
    }
  }
 else   if (TOK_DIR == rootType) {
    buf.append("String_Node_Str");
    for (int i=0; i < root.getChildCount(); i++) {
      toInfixString((ASTNode)root.getChild(i),buf);
    }
  }
 else   if (TOK_LOCAL_DIR == rootType) {
    buf.append("String_Node_Str");
    for (int i=0; i < root.getChildCount(); i++) {
      toInfixString((ASTNode)root.getChild(i),buf);
    }
  }
 else   if (TOK_TAB == rootType) {
    buf.append("String_Node_Str");
    for (int i=0; i < root.getChildCount(); i++) {
      toInfixString((ASTNode)root.getChild(i),buf);
    }
  }
 else {
    for (int i=0; i < root.getChildCount(); i++) {
      toInfixString((ASTNode)root.getChild(i),buf);
    }
  }
}

Fixed version (ground truth):
/** 
 * Recursively reconstruct query string given a query AST
 * @param root
 * @param buf  preallocated builder where the reconstructed string will be written
 */
public static void toInfixString(ASTNode root,StringBuilder buf){
  if (root == null) {
    return;
  }
  int rootType=root.getToken().getType();
  String rootText=root.getText();
  if (Identifier == rootType || Number == rootType || StringLiteral == rootType || KW_TRUE == rootType || KW_FALSE == rootType || KW_FORMATTED == rootType || KW_EXTENDED == rootType || KW_DEPENDENCY == rootType) {
    if (StringLiteral == rootType) {
      buf.append(' ').append(rootText).append(' ');
    }
 else     if (KW_TRUE == rootType) {
      buf.append("String_Node_Str");
    }
 else     if (KW_FALSE == rootType) {
      buf.append("String_Node_Str");
    }
 else     if (Identifier == rootType && TOK_SELEXPR == ((ASTNode)root.getParent()).getToken().getType() && hasSpaces(rootText)) {
      buf.append("String_Node_Str").append(rootText).append("String_Node_Str");
    }
 else     if (Identifier == rootType && TOK_FUNCTIONSTAR == ((ASTNode)root.getParent()).getToken().getType()) {
      buf.append("String_Node_Str").append(rootText == null ? "String_Node_Str" : rootText.toLowerCase());
    }
 else {
      buf.append("String_Node_Str").append(rootText == null ? "String_Node_Str" : rootText.toLowerCase()).append("String_Node_Str");
    }
  }
 else   if (TOK_ALLCOLREF == rootType) {
    if (root.getChildCount() > 0) {
      for (int i=0; i < root.getChildCount(); i++) {
        toInfixString((ASTNode)root.getChild(i),buf);
      }
      buf.append("String_Node_Str");
    }
    buf.append("String_Node_Str");
  }
 else   if (TOK_FUNCTIONSTAR == rootType) {
    if (root.getChildCount() > 0) {
      for (int i=0; i < root.getChildCount(); i++) {
        toInfixString((ASTNode)root.getChild(i),buf);
      }
    }
    buf.append("String_Node_Str");
  }
 else   if (UNARY_OPERATORS.contains(Integer.valueOf(rootType))) {
    if (KW_NOT == rootType) {
      if (!(findNodeByPath(root,TOK_FUNCTION,KW_IN) != null)) {
        buf.append("String_Node_Str");
      }
    }
 else     if (TILDE == rootType) {
      buf.append("String_Node_Str");
    }
    for (int i=0; i < root.getChildCount(); i++) {
      toInfixString((ASTNode)root.getChild(i),buf);
    }
  }
 else   if (BINARY_OPERATORS.contains(Integer.valueOf(root.getToken().getType()))) {
    buf.append("String_Node_Str");
    if (MINUS == rootType && root.getChildCount() == 1) {
      buf.append(' ').append(rootText.toLowerCase()).append(' ');
      toInfixString((ASTNode)root.getChild(0),buf);
    }
 else {
      toInfixString((ASTNode)root.getChild(0),buf);
      if (root.getToken().getType() != DOT) {
        buf.append(' ').append(rootText.toLowerCase()).append(' ');
      }
 else {
        buf.append(rootText.toLowerCase());
      }
      toInfixString((ASTNode)root.getChild(1),buf);
    }
    buf.append("String_Node_Str");
  }
 else   if (LSQUARE == rootType) {
    toInfixString((ASTNode)root.getChild(0),buf);
    buf.append("String_Node_Str");
    toInfixString((ASTNode)root.getChild(1),buf);
    buf.append("String_Node_Str");
  }
 else   if (PRIMITIVE_TYPES.contains(rootType)) {
    if (rootType == TOK_TINYINT) {
      buf.append("String_Node_Str");
    }
 else     if (rootType == TOK_SMALLINT) {
      buf.append("String_Node_Str");
    }
 else     if (rootType == TOK_INT) {
      buf.append("String_Node_Str");
    }
 else     if (rootType == TOK_BIGINT) {
      buf.append("String_Node_Str");
    }
 else     if (rootType == TOK_BOOLEAN) {
      buf.append("String_Node_Str");
    }
 else     if (rootType == TOK_FLOAT) {
      buf.append("String_Node_Str");
    }
 else     if (rootType == TOK_DOUBLE) {
      buf.append("String_Node_Str");
    }
 else     if (rootType == TOK_DATE) {
      buf.append("String_Node_Str");
    }
 else     if (rootType == TOK_DATETIME) {
      buf.append("String_Node_Str");
    }
 else     if (rootType == TOK_TIMESTAMP) {
      buf.append("String_Node_Str");
    }
 else     if (rootType == TOK_STRING) {
      buf.append("String_Node_Str");
    }
 else     if (rootType == TOK_BINARY) {
      buf.append("String_Node_Str");
    }
 else     if (rootType == TOK_DECIMAL) {
      buf.append("String_Node_Str");
      if (root.getChildCount() >= 1) {
        buf.append("String_Node_Str").append(root.getChild(0).getText());
        if (root.getChildCount() == 2) {
          buf.append("String_Node_Str").append(root.getChild(1).getText());
        }
        buf.append("String_Node_Str");
      }
    }
 else     if (rootType == TOK_VARCHAR) {
      buf.append("String_Node_Str");
      if (root.getChildCount() >= 1) {
        buf.append("String_Node_Str").append(root.getChild(0).getText()).append("String_Node_Str");
      }
    }
 else     if (rootType == TOK_CHAR) {
      buf.append("String_Node_Str");
      if (root.getChildCount() >= 1) {
        buf.append("String_Node_Str").append(root.getChild(0).getText()).append("String_Node_Str");
      }
    }
 else {
      buf.append(rootText);
    }
  }
 else   if (TOK_FUNCTION == root.getToken().getType()) {
    functionString(root,buf);
  }
 else   if (TOK_FUNCTIONDI == rootType) {
    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");
  }
 else   if (TOK_TABSORTCOLNAMEDESC == rootType || TOK_TABSORTCOLNAMEASC == rootType) {
    for (int i=0; i < root.getChildCount(); i++) {
      StringBuilder orderByCol=new StringBuilder();
      toInfixString((ASTNode)root.getChild(i),orderByCol);
      String colStr=orderByCol.toString().trim();
      if (colStr.startsWith("String_Node_Str") && colStr.endsWith("String_Node_Str")) {
        colStr=colStr.substring(1,colStr.length() - 1);
      }
      buf.append(colStr);
      buf.append("String_Node_Str");
    }
    if (TOK_TABSORTCOLNAMEDESC == rootType) {
      buf.append("String_Node_Str");
    }
 else     if (TOK_TABSORTCOLNAMEASC == rootType) {
      buf.append("String_Node_Str");
    }
  }
 else   if (TOK_SELECT == rootType || TOK_ORDERBY == rootType || TOK_GROUPBY == rootType) {
    for (int i=0; i < root.getChildCount(); i++) {
      toInfixString((ASTNode)root.getChild(i),buf);
      if (i != root.getChildCount() - 1) {
        buf.append("String_Node_Str");
      }
    }
  }
 else   if (TOK_SELECTDI == rootType) {
    buf.append("String_Node_Str");
    for (int i=0; i < root.getChildCount(); i++) {
      toInfixString((ASTNode)root.getChild(i),buf);
      if (i != root.getChildCount() - 1) {
        buf.append("String_Node_Str");
      }
    }
  }
 else   if (TOK_DIR == rootType) {
    buf.append("String_Node_Str");
    for (int i=0; i < root.getChildCount(); i++) {
      toInfixString((ASTNode)root.getChild(i),buf);
    }
  }
 else   if (TOK_LOCAL_DIR == rootType) {
    buf.append("String_Node_Str");
    for (int i=0; i < root.getChildCount(); i++) {
      toInfixString((ASTNode)root.getChild(i),buf);
    }
  }
 else   if (TOK_TAB == rootType) {
    buf.append("String_Node_Str");
    for (int i=0; i < root.getChildCount(); i++) {
      toInfixString((ASTNode)root.getChild(i),buf);
    }
  }
 else {
    if (root.getChildCount() > 0) {
      for (int i=0; i < root.getChildCount(); i++) {
        toInfixString((ASTNode)root.getChild(i),buf);
      }
    }
 else {
      buf.append(rootText);
    }
  }
}