Program: 8950
Project: 8950
Buggy source:
/** 
 * Remove redundant pattern parts and make patterns more simple.
 * @param tokens Original modifiable list.
 * @return Return tokens,
 */
@NotNull public static List<String> normalizePattern(@NotNull List<String> tokens){
  if (tokens.size() == 1) {
    if (tokens.get(0).equals("String_Node_Str")) {
      tokens.set(0,"String_Node_Str");
    }
 else {
      tokens.add(0,"String_Node_Str");
    }
  }
  if (tokens.size() == 0 || !tokens.get(0).equals("String_Node_Str")) {
    tokens.add(0,"String_Node_Str");
  }
  int index=1;
  while (index < tokens.size()) {
    final String thisToken=tokens.get(index);
    final String prevToken=tokens.get(index - 1);
    if (thisToken.equals("String_Node_Str")) {
      tokens.remove(index);
      continue;
    }
    if (thisToken.equals("String_Node_Str") && prevToken.equals("String_Node_Str")) {
      tokens.remove(index);
      continue;
    }
    if ((!thisToken.equals("String_Node_Str")) && thisToken.startsWith("String_Node_Str")) {
      tokens.add(index,"String_Node_Str");
      tokens.set(index + 1,thisToken.substring(1));
      continue;
    }
    if (thisToken.equals("String_Node_Str") && prevToken.equals("String_Node_Str")) {
      tokens.set(index - 1,"String_Node_Str");
      tokens.set(index,"String_Node_Str");
      index--;
      continue;
    }
    index++;
  }
  while (!tokens.isEmpty()) {
    final String token=tokens.get(tokens.size() - 1);
    if (token.equals("String_Node_Str") || token.equals("String_Node_Str")) {
      tokens.remove(tokens.size() - 1);
    }
 else {
      break;
    }
  }
  return tokens;
}

Fixed version (ground truth):
/** 
 * Remove redundant pattern parts and make patterns more simple.
 * @param tokens Original modifiable list.
 * @return Return tokens,
 */
@NotNull public static List<String> normalizePattern(@NotNull List<String> tokens){
  if (tokens.size() == 1 && !tokens.get(0).contains("String_Node_Str")) {
    tokens.add(0,"String_Node_Str");
  }
  if (tokens.size() == 0 || !tokens.get(0).equals("String_Node_Str")) {
    tokens.add(0,"String_Node_Str");
  }
  int index=1;
  while (index < tokens.size()) {
    final String thisToken=tokens.get(index);
    final String prevToken=tokens.get(index - 1);
    if (thisToken.equals("String_Node_Str")) {
      tokens.remove(index);
      continue;
    }
    if (thisToken.equals("String_Node_Str") && prevToken.equals("String_Node_Str")) {
      tokens.remove(index);
      continue;
    }
    if ((!thisToken.equals("String_Node_Str")) && thisToken.startsWith("String_Node_Str")) {
      tokens.add(index,"String_Node_Str");
      tokens.set(index + 1,thisToken.substring(1));
      continue;
    }
    if (thisToken.equals("String_Node_Str") && prevToken.equals("String_Node_Str")) {
      tokens.set(index - 1,"String_Node_Str");
      tokens.set(index,"String_Node_Str");
      index--;
      continue;
    }
    index++;
  }
  while (!tokens.isEmpty()) {
    final String token=tokens.get(tokens.size() - 1);
    if (token.equals("String_Node_Str") || token.equals("String_Node_Str")) {
      tokens.remove(tokens.size() - 1);
    }
 else {
      break;
    }
  }
  return tokens;
}