Program: 16005
Project: 16005
Buggy source:
public String getPlanSQL(){
  Expression[] exprList=expressions.toArray(new Expression[expressions.size()]);
  StatementBuilder buff=new StatementBuilder("String_Node_Str");
  if (distinct) {
    buff.append("String_Node_Str");
  }
  for (int i=0; i < visibleColumnCount; i++) {
    buff.appendExceptFirst("String_Node_Str");
    buff.append("String_Node_Str");
    buff.append(StringUtils.indent(exprList[i].getSQL(),4,false));
  }
  buff.append("String_Node_Str");
  TableFilter filter=topTableFilter;
  if (filter != null) {
    buff.resetCount();
    int i=0;
    do {
      buff.appendExceptFirst("String_Node_Str");
      buff.append(filter.getPlanSQL(i++ > 0));
      filter=filter.getJoin();
    }
 while (filter != null);
  }
 else {
    buff.resetCount();
    int i=0;
    for (    TableFilter f : topFilters) {
      do {
        buff.appendExceptFirst("String_Node_Str");
        buff.append(f.getPlanSQL(i++ > 0));
        f=f.getJoin();
      }
 while (f != null);
    }
  }
  if (condition != null) {
    buff.append("String_Node_Str").append(StringUtils.unEnclose(condition.getSQL()));
  }
  if (groupIndex != null) {
    buff.append("String_Node_Str");
    buff.resetCount();
    for (    int gi : groupIndex) {
      Expression g=exprList[gi];
      g=g.getNonAliasExpression();
      buff.appendExceptFirst("String_Node_Str");
      buff.append(StringUtils.unEnclose(g.getSQL()));
    }
  }
  if (group != null) {
    buff.append("String_Node_Str");
    buff.resetCount();
    for (    Expression g : group) {
      buff.appendExceptFirst("String_Node_Str");
      buff.append(StringUtils.unEnclose(g.getSQL()));
    }
  }
  if (having != null) {
    Expression h=having;
    buff.append("String_Node_Str").append(StringUtils.unEnclose(h.getSQL()));
  }
 else   if (havingIndex >= 0) {
    Expression h=exprList[havingIndex];
    buff.append("String_Node_Str").append(StringUtils.unEnclose(h.getSQL()));
  }
  if (sort != null) {
    buff.append("String_Node_Str").append(sort.getSQL(exprList,visibleColumnCount));
  }
  if (orderList != null) {
    buff.append("String_Node_Str");
    buff.resetCount();
    for (    SelectOrderBy o : orderList) {
      buff.appendExceptFirst("String_Node_Str");
      buff.append(StringUtils.unEnclose(o.getSQL()));
    }
  }
  if (limitExpr != null) {
    buff.append("String_Node_Str").append(StringUtils.unEnclose(limitExpr.getSQL()));
    if (offsetExpr != null) {
      buff.append("String_Node_Str").append(StringUtils.unEnclose(offsetExpr.getSQL()));
    }
  }
  if (sampleSize != 0) {
    buff.append("String_Node_Str").append(sampleSize);
  }
  if (isForUpdate) {
    buff.append("String_Node_Str");
  }
  if (isQuickAggregateQuery) {
    buff.append("String_Node_Str");
  }
  if (isDistinctQuery) {
    buff.append("String_Node_Str");
  }
  if (sortUsingIndex) {
    buff.append("String_Node_Str");
  }
  if (isGroupQuery) {
    if (isGroupSortedQuery) {
      buff.append("String_Node_Str");
    }
  }
  return buff.toString();
}

Fixed version (ground truth):
public String getPlanSQL(){
  Expression[] exprList=expressions.toArray(new Expression[expressions.size()]);
  StatementBuilder buff=new StatementBuilder("String_Node_Str");
  if (distinct) {
    buff.append("String_Node_Str");
  }
  for (int i=0; i < visibleColumnCount; i++) {
    buff.appendExceptFirst("String_Node_Str");
    buff.append('\n');
    buff.append(StringUtils.indent(exprList[i].getSQL(),4,false));
  }
  buff.append("String_Node_Str");
  TableFilter filter=topTableFilter;
  if (filter != null) {
    buff.resetCount();
    int i=0;
    do {
      buff.appendExceptFirst("String_Node_Str");
      buff.append(filter.getPlanSQL(i++ > 0));
      filter=filter.getJoin();
    }
 while (filter != null);
  }
 else {
    buff.resetCount();
    int i=0;
    for (    TableFilter f : topFilters) {
      do {
        buff.appendExceptFirst("String_Node_Str");
        buff.append(f.getPlanSQL(i++ > 0));
        f=f.getJoin();
      }
 while (f != null);
    }
  }
  if (condition != null) {
    buff.append("String_Node_Str").append(StringUtils.unEnclose(condition.getSQL()));
  }
  if (groupIndex != null) {
    buff.append("String_Node_Str");
    buff.resetCount();
    for (    int gi : groupIndex) {
      Expression g=exprList[gi];
      g=g.getNonAliasExpression();
      buff.appendExceptFirst("String_Node_Str");
      buff.append(StringUtils.unEnclose(g.getSQL()));
    }
  }
  if (group != null) {
    buff.append("String_Node_Str");
    buff.resetCount();
    for (    Expression g : group) {
      buff.appendExceptFirst("String_Node_Str");
      buff.append(StringUtils.unEnclose(g.getSQL()));
    }
  }
  if (having != null) {
    Expression h=having;
    buff.append("String_Node_Str").append(StringUtils.unEnclose(h.getSQL()));
  }
 else   if (havingIndex >= 0) {
    Expression h=exprList[havingIndex];
    buff.append("String_Node_Str").append(StringUtils.unEnclose(h.getSQL()));
  }
  if (sort != null) {
    buff.append("String_Node_Str").append(sort.getSQL(exprList,visibleColumnCount));
  }
  if (orderList != null) {
    buff.append("String_Node_Str");
    buff.resetCount();
    for (    SelectOrderBy o : orderList) {
      buff.appendExceptFirst("String_Node_Str");
      buff.append(StringUtils.unEnclose(o.getSQL()));
    }
  }
  if (limitExpr != null) {
    buff.append("String_Node_Str").append(StringUtils.unEnclose(limitExpr.getSQL()));
    if (offsetExpr != null) {
      buff.append("String_Node_Str").append(StringUtils.unEnclose(offsetExpr.getSQL()));
    }
  }
  if (sampleSize != 0) {
    buff.append("String_Node_Str").append(sampleSize);
  }
  if (isForUpdate) {
    buff.append("String_Node_Str");
  }
  if (isQuickAggregateQuery) {
    buff.append("String_Node_Str");
  }
  if (isDistinctQuery) {
    buff.append("String_Node_Str");
  }
  if (sortUsingIndex) {
    buff.append("String_Node_Str");
  }
  if (isGroupQuery) {
    if (isGroupSortedQuery) {
      buff.append("String_Node_Str");
    }
  }
  return buff.toString();
}