Program: 18377
Project: 18377
Buggy source:
private static void specializeModifiers(FSTTerminal terminalA,FSTTerminal terminalB){
  if (terminalA.getBody().contains("String_Node_Str") || terminalB.getBody().contains("String_Node_Str"))   return;
  StringTokenizer stA=new StringTokenizer(terminalA.getBody(),"String_Node_Str");
  StringTokenizer stB=new StringTokenizer(terminalB.getBody(),"String_Node_Str");
  if (stA.hasMoreTokens() && stB.hasMoreTokens()) {
    stA=new StringTokenizer(stA.nextToken(),"String_Node_Str");
    LinkedHashSet<String> modifierSetA=new LinkedHashSet<String>();
    while (stA.hasMoreTokens()) {
      modifierSetA.add(stA.nextToken());
    }
    stB=new StringTokenizer(stB.nextToken(),"String_Node_Str");
    LinkedHashSet<String> modifierSetB=new LinkedHashSet<String>();
    while (stB.hasMoreTokens()) {
      modifierSetB.add(stB.nextToken());
    }
    String[] modifierArrayA=new String[modifierSetA.size()];
    modifierSetA.toArray(modifierArrayA);
    String[] modifierArrayB=new String[modifierSetB.size()];
    modifierSetB.toArray(modifierArrayB);
    if (modifierArrayA.length <= 1 || modifierArrayB.length <= 1)     return;
    if (!modifierArrayA[modifierArrayA.length - 2].equals(modifierArrayB[modifierArrayB.length - 2])) {
      System.err.println("String_Node_Str" + modifierArrayA[modifierArrayA.length - 1] + "String_Node_Str"+ modifierArrayA[modifierArrayA.length - 2]+ "String_Node_Str"+ modifierArrayB[modifierArrayB.length - 2]);
    }
    String removedDuplicates=new String();
    String[] modifierArrayRes=new String[modifierArrayA.length + modifierArrayB.length - 2];
    System.arraycopy(modifierArrayB,0,modifierArrayRes,0,modifierArrayB.length - 2);
    System.arraycopy(modifierArrayA,0,modifierArrayRes,modifierArrayB.length - 2,modifierArrayA.length);
    boolean isPublic=false;
    boolean isProtected=false;
    boolean isPrivate=false;
    boolean isAbstract=false;
    LinkedList<String> otherModifiers=new LinkedList<String>();
    for (int i=0; i < modifierArrayRes.length; i++) {
      String modifier=modifierArrayRes[i].trim();
      if (modifier.equals("String_Node_Str") && !isPublic && !isProtected&& !isPrivate) {
        isPrivate=true;
        removedDuplicates+=modifier + "String_Node_Str";
      }
 else       if (modifier.equals("String_Node_Str") && !isPublic && !isProtected) {
        isProtected=true;
        removedDuplicates=removedDuplicates.replaceAll("String_Node_Str","String_Node_Str");
        removedDuplicates+=modifier + "String_Node_Str";
      }
 else       if (modifier.equals("String_Node_Str") && !isPublic) {
        isPublic=true;
        removedDuplicates=removedDuplicates.replaceAll("String_Node_Str","String_Node_Str");
        removedDuplicates=removedDuplicates.replaceAll("String_Node_Str","String_Node_Str");
        removedDuplicates+=modifier + "String_Node_Str";
      }
 else       if (!modifier.equals("String_Node_Str") && !modifier.equals("String_Node_Str") && !modifier.equals("String_Node_Str")) {
        if (modifier.equals("String_Node_Str")) {
          isAbstract=true;
          removedDuplicates=removedDuplicates.replaceAll("String_Node_Str","String_Node_Str");
          removedDuplicates+=modifier + "String_Node_Str";
        }
 else         if (modifier.equals("String_Node_Str") && !isAbstract) {
          removedDuplicates+=modifier + "String_Node_Str";
        }
 else         if (!modifier.equals("String_Node_Str") && !modifier.equals("String_Node_Str")) {
          boolean in=false;
          for (          String otherModifier : otherModifiers) {
            if (otherModifier.equals(modifier))             in=true;
          }
          if (!in) {
            removedDuplicates+=modifier + "String_Node_Str";
            otherModifiers.add(modifier);
          }
        }
      }
    }
    if (terminalA.getBody().contains("String_Node_Str"))     terminalA.setBody(removedDuplicates + "String_Node_Str" + terminalA.getBody().substring(terminalA.getBody().indexOf("String_Node_Str")));
    if (terminalB.getBody().contains("String_Node_Str"))     terminalB.setBody(removedDuplicates + "String_Node_Str" + terminalB.getBody().substring(terminalB.getBody().indexOf("String_Node_Str")));
  }
}

Fixed version (ground truth):
private static void specializeModifiers(FSTTerminal terminalA,FSTTerminal terminalB){
  if (terminalA.getBody().contains("String_Node_Str") || terminalB.getBody().contains("String_Node_Str"))   return;
  StringTokenizer stA=new StringTokenizer(terminalA.getBody(),"String_Node_Str");
  StringTokenizer stB=new StringTokenizer(terminalB.getBody(),"String_Node_Str");
  if (stA.hasMoreTokens() && stB.hasMoreTokens()) {
    stA=new StringTokenizer(stA.nextToken(),"String_Node_Str");
    LinkedHashSet<String> modifierSetA=new LinkedHashSet<String>();
    while (stA.hasMoreTokens()) {
      modifierSetA.add(stA.nextToken());
    }
    stB=new StringTokenizer(stB.nextToken(),"String_Node_Str");
    LinkedHashSet<String> modifierSetB=new LinkedHashSet<String>();
    while (stB.hasMoreTokens()) {
      modifierSetB.add(stB.nextToken());
    }
    String[] modifierArrayA=new String[modifierSetA.size()];
    modifierSetA.toArray(modifierArrayA);
    String[] modifierArrayB=new String[modifierSetB.size()];
    modifierSetB.toArray(modifierArrayB);
    if (modifierArrayA.length <= 1 || modifierArrayB.length <= 1)     return;
    if (!modifierArrayA[modifierArrayA.length - 2].equals(modifierArrayB[modifierArrayB.length - 2])) {
      System.err.println("String_Node_Str" + modifierArrayA[modifierArrayA.length - 1] + "String_Node_Str"+ modifierArrayA[modifierArrayA.length - 2]+ "String_Node_Str"+ modifierArrayB[modifierArrayB.length - 2]);
    }
    String removedDuplicates=new String();
    String[] modifierArrayRes=new String[modifierArrayA.length + modifierArrayB.length - 2];
    System.arraycopy(modifierArrayB,0,modifierArrayRes,0,modifierArrayB.length - 2);
    System.arraycopy(modifierArrayA,0,modifierArrayRes,modifierArrayB.length - 2,modifierArrayA.length);
    boolean isPublic=false;
    boolean isProtected=false;
    boolean isPrivate=false;
    boolean isAbstract=false;
    boolean isFinal=false;
    LinkedList<String> otherModifiers=new LinkedList<String>();
    for (int i=0; i < modifierArrayRes.length; i++) {
      String modifier=modifierArrayRes[i].trim();
      if (modifier.equals("String_Node_Str") && !isPublic && !isProtected&& !isPrivate) {
        isPrivate=true;
        removedDuplicates+=modifier + "String_Node_Str";
      }
 else       if (modifier.equals("String_Node_Str") && !isPublic && !isProtected) {
        isProtected=true;
        removedDuplicates=removedDuplicates.replaceAll("String_Node_Str","String_Node_Str");
        removedDuplicates+=modifier + "String_Node_Str";
      }
 else       if (modifier.equals("String_Node_Str") && !isPublic) {
        isPublic=true;
        removedDuplicates=removedDuplicates.replaceAll("String_Node_Str","String_Node_Str");
        removedDuplicates=removedDuplicates.replaceAll("String_Node_Str","String_Node_Str");
        removedDuplicates+=modifier + "String_Node_Str";
      }
 else       if (!modifier.equals("String_Node_Str") && !modifier.equals("String_Node_Str") && !modifier.equals("String_Node_Str")) {
        if (modifier.equals("String_Node_Str")) {
          isAbstract=true;
          removedDuplicates=removedDuplicates.replaceAll("String_Node_Str","String_Node_Str");
          removedDuplicates+=modifier + "String_Node_Str";
        }
 else         if (modifier.equals("String_Node_Str") && !isAbstract && !isFinal) {
          removedDuplicates+=modifier + "String_Node_Str";
          isFinal=true;
        }
 else         if (!modifier.equals("String_Node_Str") && !modifier.equals("String_Node_Str")) {
          boolean in=false;
          for (          String otherModifier : otherModifiers) {
            if (otherModifier.equals(modifier))             in=true;
          }
          if (!in) {
            removedDuplicates+=modifier + "String_Node_Str";
            otherModifiers.add(modifier);
          }
        }
      }
    }
    if (terminalA.getBody().contains("String_Node_Str"))     terminalA.setBody(removedDuplicates + "String_Node_Str" + terminalA.getBody().substring(terminalA.getBody().indexOf("String_Node_Str")));
    if (terminalB.getBody().contains("String_Node_Str"))     terminalB.setBody(removedDuplicates + "String_Node_Str" + terminalB.getBody().substring(terminalB.getBody().indexOf("String_Node_Str")));
  }
}