Program: 119941
Project: 119941
Buggy source:
@SuppressWarnings("String_Node_Str") @Override protected void refreshChildren(){
  Map modelToEditPart=new HashMap();
  List children=getChildren();
  int i;
  for (i=0; i < children.size(); i++) {
    EditPart editPart=(EditPart)children.get(i);
    modelToEditPart.put(editPart.getModel(),editPart);
  }
  List modelObjects=getModelChildren();
  Collections.sort(modelObjects,new Comparator<Node>(){
    @Override public int compare(    Node o1,    Node o2){
      String s1=o1.getUniqueName().toLowerCase();
      String s2=o2.getUniqueName().toLowerCase();
      return s1.compareToIgnoreCase(s2);
    }
  }
);
  for (i=0; i < modelObjects.size(); i++) {
    Object model=modelObjects.get(i);
    if (i >= children.size() || ((EditPart)children.get(i)).getModel() != model) {
      EditPart editPart=(EditPart)modelToEditPart.get(model);
      if (editPart != null) {
        reorderChild(editPart,i);
      }
 else {
        editPart=createChild(model);
        addChild(editPart,i);
      }
    }
  }
  List trash=new ArrayList();
  for (; i < children.size(); i++) {
    trash.add(children.get(i));
  }
  for (i=0; i < trash.size(); i++) {
    EditPart ep=(EditPart)trash.get(i);
    removeChild(ep);
  }
}

Fixed version (ground truth):
@SuppressWarnings("String_Node_Str") @Override protected void refreshChildren(){
  Map modelToEditPart=new HashMap();
  List children=getChildren();
  int i;
  for (i=0; i < children.size(); i++) {
    EditPart editPart=(EditPart)children.get(i);
    modelToEditPart.put(editPart.getModel(),editPart);
  }
  List modelObjects=getModelChildren();
  Collections.sort(modelObjects,new Comparator<Node>(){
    @Override public int compare(    Node o1,    Node o2){
      String s1=o1.getUniqueName().toLowerCase();
      String s2=o2.getUniqueName().toLowerCase();
      if (s1.charAt(0) > s2.charAt(0)) {
        return 1;
      }
 else       if (s1.charAt(0) < s2.charAt(0)) {
        return -1;
      }
 else {
        String alphabet1=s1.replaceAll("String_Node_Str","String_Node_Str");
        String alphabet2=s2.replaceAll("String_Node_Str","String_Node_Str");
        int cmpAlphabet=alphabet1.compareToIgnoreCase(alphabet2);
        if (cmpAlphabet != 0) {
          return cmpAlphabet;
        }
        if (s1.lastIndexOf("String_Node_Str") == -1) {
          return s1.compareToIgnoreCase(s2);
        }
        String numeric1=s1.substring(s1.lastIndexOf("String_Node_Str") + 1);
        String numeric2=s2.substring(s2.lastIndexOf("String_Node_Str") + 1);
        if ("String_Node_Str".equals(numeric1)) {
          return -1;
        }
        if ("String_Node_Str".equals(numeric2)) {
          return 1;
        }
        int result;
        try {
          result=Integer.parseInt(numeric1) - Integer.parseInt(numeric2);
        }
 catch (        NumberFormatException e) {
          return s1.compareToIgnoreCase(s2);
        }
        return result;
      }
    }
  }
);
  for (i=0; i < modelObjects.size(); i++) {
    Object model=modelObjects.get(i);
    if (i >= children.size() || ((EditPart)children.get(i)).getModel() != model) {
      EditPart editPart=(EditPart)modelToEditPart.get(model);
      if (editPart != null) {
        reorderChild(editPart,i);
      }
 else {
        editPart=createChild(model);
        addChild(editPart,i);
      }
    }
  }
  List trash=new ArrayList();
  for (; i < children.size(); i++) {
    trash.add(children.get(i));
  }
  for (i=0; i < trash.size(); i++) {
    EditPart ep=(EditPart)trash.get(i);
    removeChild(ep);
  }
}