Program: 33962
Project: 33962
Buggy source:
public void getProjectResponse(JSONObject response){
  try {
    final String responseProject=response.getString("String_Node_Str");
    final String responseUser=response.getString("String_Node_Str");
    final JSONArray files=response.getJSONArray("String_Node_Str");
    if (this.username.equals(responseUser)) {
      for (int i=0; i < files.length(); i++) {
        JSONObject resource=files.getJSONObject(i);
        String resourcePath=resource.getString("String_Node_Str");
        long timestamp=resource.getLong("String_Node_Str");
        String type=resource.optString("String_Node_Str");
        if (type.equals("String_Node_Str")) {
          if (!resourcePath.isEmpty()) {
            IFolder folder=project.getFolder(new Path(resourcePath));
            if (!folder.exists()) {
              folder.create(true,true,null);
            }
            folder.setLocalTimeStamp(timestamp);
          }
        }
 else         if (type.equals("String_Node_Str")) {
          requestedFileCount.incrementAndGet();
        }
      }
      for (int i=0; i < files.length(); i++) {
        JSONObject resource=files.getJSONObject(i);
        String resourcePath=resource.getString("String_Node_Str");
        String type=resource.optString("String_Node_Str");
        if (type.equals("String_Node_Str")) {
          this.projectFiles.add(resourcePath);
          JSONObject message=new JSONObject();
          message.put("String_Node_Str",callbackID);
          message.put("String_Node_Str",this.username);
          message.put("String_Node_Str",responseProject);
          message.put("String_Node_Str",resourcePath);
          messagingConnector.send("String_Node_Str",message);
        }
      }
    }
  }
 catch (  Exception e) {
    e.printStackTrace();
    this.messagingConnector.removeMessageHandler(projectResponseHandler);
    this.messagingConnector.removeMessageHandler(resourceResponseHandler);
    this.completionCallback.downloadFailed();
  }
}

Fixed version (ground truth):
public void getProjectResponse(JSONObject response){
  try {
    final String responseProject=response.getString("String_Node_Str");
    final String responseUser=response.getString("String_Node_Str");
    final JSONArray files=response.getJSONArray("String_Node_Str");
    if (this.username.equals(responseUser)) {
      Set<String> newFiles=new HashSet<String>();
      for (int i=0; i < files.length(); i++) {
        JSONObject resource=files.getJSONObject(i);
        String resourcePath=resource.getString("String_Node_Str");
        long timestamp=resource.getLong("String_Node_Str");
        String type=resource.optString("String_Node_Str");
        if (type.equals("String_Node_Str")) {
          if (!resourcePath.isEmpty()) {
            IFolder folder=project.getFolder(new Path(resourcePath));
            createFolder(folder);
            folder.setLocalTimeStamp(timestamp);
          }
        }
 else         if (type.equals("String_Node_Str")) {
          boolean added=this.projectFiles.add(resourcePath);
          if (added) {
            newFiles.add(resourcePath);
          }
        }
      }
      for (Iterator<String> newFilesIterator=newFiles.iterator(); newFilesIterator.hasNext(); ) {
        String resourcePath=(String)newFilesIterator.next();
        this.requestedProjectFiles.add(resourcePath);
        JSONObject message=new JSONObject();
        message.put("String_Node_Str",callbackID);
        message.put("String_Node_Str",this.username);
        message.put("String_Node_Str",responseProject);
        message.put("String_Node_Str",resourcePath);
        messagingConnector.send("String_Node_Str",message);
      }
    }
  }
 catch (  Exception e) {
    e.printStackTrace();
    this.messagingConnector.removeMessageHandler(projectResponseHandler);
    this.messagingConnector.removeMessageHandler(resourceResponseHandler);
    this.completionCallback.downloadFailed();
  }
}