Program: 32409
Project: 32409
Buggy source:
void genAggrCode(ST code,String headTable,ST ifUpdated){
  AggrFunction f=headP.getAggrF();
  String contains=containsGroupbyPrefix(headTable,f);
  ST if_=tmplGroup.getInstanceOf("String_Node_Str");
  if (f.isSimpleAggr()) {
    if_.add("String_Node_Str","String_Node_Str" + contains);
    if_.add("String_Node_Str",assignVars(Arrays.asList(new Object[]{aggrVar()}),f.getArgs()));
    if_.add("String_Node_Str",insertHeadParamsTo(headTable));
    if_.add("String_Node_Str",isUpdatedVar() + "String_Node_Str");
    if_.add("String_Node_Str",ifUpdated);
    if_.add("String_Node_Str","String_Node_Str");
    code.add("String_Node_Str",if_);
  }
 else {
    if_.add("String_Node_Str","String_Node_Str" + contains);
    if (f.getAggrColumnType().isArray()) {
      String aggrValType=f.getAggrColumnType().getComponentType().getSimpleName();
      Variable v=(Variable)f.getArgs().get(0);
      if_.add("String_Node_Str",aggrValType + "String_Node_Str" + aggrVar()+ "String_Node_Str"+ aggrValType+ "String_Node_Str"+ v+ "String_Node_Str");
      if_.add("String_Node_Str","String_Node_Str" + aggrVar() + "String_Node_Str"+ aggrVar()+ "String_Node_Str"+ aggrValType+ "String_Node_Str");
    }
 else {
      String aggrValType=f.getAggrColumnType().getSimpleName();
      if_.add("String_Node_Str",aggrValType + "String_Node_Str" + aggrVar()+ "String_Node_Str"+ aggrValType+ "String_Node_Str"+ "String_Node_Str");
    }
    if_.add("String_Node_Str",isUpdatedVar() + "String_Node_Str" + f.codegen(aggrVar()).render());
    if_.add("String_Node_Str",insertHeadParamsTo(headTable));
    if_.add("String_Node_Str","String_Node_Str");
    code.add("String_Node_Str",if_);
  }
  genAggrUpdateCode(code,headTable,ifUpdated);
  if (useChoice()) {
    ifUpdated.add("String_Node_Str",choiceMadeVar() + "String_Node_Str");
    if (hasOnlyChoiceVar(rule.getHead())) {
      ifUpdated.add("String_Node_Str","String_Node_Str");
    }
  }
}

Fixed version (ground truth):
void genAggrCode(ST code,String headTable,ST ifUpdated){
  AggrFunction f=headP.getAggrF();
  String contains=containsGroupbyPrefix(headTable,f);
  ST ifElse=tmplGroup.getInstanceOf("String_Node_Str");
  if (f.isSimpleAggr()) {
    ifElse.add("String_Node_Str","String_Node_Str" + contains);
    if (isNextId(f)) {
      String nextId="String_Node_Str" + f.getArgs().get(0) + "String_Node_Str";
      ifElse.add("String_Node_Str",assignVars(Arrays.asList(new Object[]{aggrVar()}),Arrays.asList(new Object[]{nextId})));
    }
 else {
      ifElse.add("String_Node_Str",assignVars(Arrays.asList(new Object[]{aggrVar()}),f.getArgs()));
    }
    ifElse.add("String_Node_Str",insertHeadParamsTo(headTable));
    ifElse.add("String_Node_Str",isUpdatedVar() + "String_Node_Str");
    code.add("String_Node_Str",ifElse);
  }
 else {
    ifElse.add("String_Node_Str","String_Node_Str" + contains);
    if (f.getAggrColumnType().isArray()) {
      String aggrValType=f.getAggrColumnType().getComponentType().getSimpleName();
      Variable v=(Variable)f.getArgs().get(0);
      ifElse.add("String_Node_Str",aggrValType + "String_Node_Str" + aggrVar()+ "String_Node_Str"+ aggrValType+ "String_Node_Str"+ v+ "String_Node_Str");
      ifElse.add("String_Node_Str","String_Node_Str" + aggrVar() + "String_Node_Str"+ aggrVar()+ "String_Node_Str"+ aggrValType+ "String_Node_Str");
    }
 else {
      String aggrValType=f.getAggrColumnType().getSimpleName();
      ifElse.add("String_Node_Str",aggrValType + "String_Node_Str" + aggrVar()+ "String_Node_Str"+ aggrValType+ "String_Node_Str"+ "String_Node_Str");
    }
    ifElse.add("String_Node_Str",isUpdatedVar() + "String_Node_Str" + f.codegen(aggrVar()).render());
    ifElse.add("String_Node_Str",insertHeadParamsTo(headTable));
    ifElse.add("String_Node_Str","String_Node_Str");
    code.add("String_Node_Str",ifElse);
  }
  ST elseStmts=tmplGroup.getInstanceOf("String_Node_Str");
  ifElse.add("String_Node_Str",elseStmts);
  genAggrUpdateCode(elseStmts,headTable);
  if (useChoice()) {
    ifUpdated.add("String_Node_Str",choiceMadeVar() + "String_Node_Str");
    if (hasOnlyChoiceVar(rule.getHead())) {
      ifUpdated.add("String_Node_Str","String_Node_Str");
    }
  }
}