Program: 15684
Project: 15684
Buggy source:
private String getCustomTokenErrorDescription(){
  final Token nextToken=currentToken.next;
  final int kind=nextToken.kind;
  if (kind == EOF) {
    for (int i=0; i < expectedTokenSequences.length; i++) {
      int[] sequence=expectedTokenSequences[i];
      String name;
switch (sequence[0]) {
case END_FOREACH:
        name="String_Node_Str";
      break;
case END_LIST:
    name="String_Node_Str";
  break;
case END_SWITCH:
name="String_Node_Str";
break;
case END_IF:
name="String_Node_Str";
break;
case END_COMPRESS:
name="String_Node_Str";
break;
case END_MACRO:
case END_FUNCTION:
name="String_Node_Str";
break;
case END_TRANSFORM:
name="String_Node_Str";
break;
case END_ESCAPE:
name="String_Node_Str";
break;
case END_NOESCAPE:
name="String_Node_Str";
break;
case END_ASSIGN:
name="String_Node_Str";
break;
case END_LOCAL:
name="String_Node_Str";
break;
case END_GLOBAL:
name="String_Node_Str";
break;
case END_ATTEMPT:
name="String_Node_Str";
break;
case CLOSE_BRACE:
name="String_Node_Str";
break;
case CLOSE_BRACKET:
name="String_Node_Str";
break;
case CLOSE_PAREN:
name="String_Node_Str";
break;
case UNIFIED_CALL_END:
name="String_Node_Str";
break;
default :
name=null;
}
if (name != null) {
if (!name.startsWith("String_Node_Str") && !name.startsWith("String_Node_Str")) name=StringUtil.jQuote(name);
return "String_Node_Str" + name + "String_Node_Str";
}
}
return "String_Node_Str";
}
 else if (kind == END_IF || kind == ELSE_IF || kind == ELSE) {
return "String_Node_Str" + StringUtil.jQuote(nextToken) + "String_Node_Str";
}
return null;
}

Fixed version (ground truth):
private String getCustomTokenErrorDescription(){
  final Token nextToken=currentToken.next;
  final int kind=nextToken.kind;
  if (kind == EOF) {
    Set endNames=new HashSet();
    for (int i=0; i < expectedTokenSequences.length; i++) {
      int[] sequence=expectedTokenSequences[i];
      for (int j=0; j < sequence.length; j++) {
switch (sequence[j]) {
case END_FOREACH:
          endNames.add("String_Node_Str");
        break;
case END_LIST:
      endNames.add("String_Node_Str");
    break;
case END_SWITCH:
  endNames.add("String_Node_Str");
break;
case END_IF:
endNames.add("String_Node_Str");
break;
case END_COMPRESS:
endNames.add("String_Node_Str");
break;
case END_MACRO:
endNames.add("String_Node_Str");
case END_FUNCTION:
endNames.add("String_Node_Str");
break;
case END_TRANSFORM:
endNames.add("String_Node_Str");
break;
case END_ESCAPE:
endNames.add("String_Node_Str");
break;
case END_NOESCAPE:
endNames.add("String_Node_Str");
break;
case END_ASSIGN:
endNames.add("String_Node_Str");
break;
case END_LOCAL:
endNames.add("String_Node_Str");
break;
case END_GLOBAL:
endNames.add("String_Node_Str");
break;
case END_ATTEMPT:
endNames.add("String_Node_Str");
break;
case CLOSE_BRACE:
endNames.add("String_Node_Str");
break;
case CLOSE_BRACKET:
endNames.add("String_Node_Str");
break;
case CLOSE_PAREN:
endNames.add("String_Node_Str");
break;
case UNIFIED_CALL_END:
endNames.add("String_Node_Str");
break;
}
}
}
return "String_Node_Str" + (endNames.size() == 0 ? "String_Node_Str" : "String_Node_Str" + concatWithOrs(endNames) + "String_Node_Str");
}
 else if (kind == END_IF || kind == ELSE_IF || kind == ELSE) {
return "String_Node_Str" + StringUtil.jQuote(nextToken) + "String_Node_Str";
}
return null;
}