Program: 33973
Project: 33973
Buggy source:
public LiveEditUnits(IMessagingConnector messagingConnector,LiveEditCoordinator liveEditCoordinator,Repository repository){
  this.messagingConnector=messagingConnector;
  this.liveEditCoordinator=liveEditCoordinator;
  this.repository=repository;
  this.liveEditUnits=new ConcurrentHashMap<String,ICompilationUnit>();
  this.liveEditConnector=new ILiveEditConnector(){
    @Override public String getConnectorID(){
      return LIVE_EDIT_CONNECTOR_ID;
    }
    @Override public void liveEditingEvent(    String username,    String resourcePath,    int offset,    int removeCount,    String newText){
      modelChanged(username,resourcePath,offset,removeCount,newText);
    }
    @Override public void liveEditingStarted(    String requestSenderID,    int callbackID,    String username,    String resourcePath,    String hash,    long timestamp){
      startLiveUnit(requestSenderID,callbackID,username,resourcePath,hash,timestamp);
    }
    @Override public void liveEditingStartedResponse(    String requestSenderID,    int callbackID,    String username,    String projectName,    String resourcePath,    String savePointHash,    long savePointTimestamp,    String content){
      updateLiveUnit(requestSenderID,callbackID,username,projectName,resourcePath,savePointHash,savePointTimestamp,content);
    }
    @Override public void liveEditors(    String requestSenderID,    int callbackID,    String username,    String projectRegEx,    String resourceRefEx){
    }
  }
;
  liveEditCoordinator.addLiveEditConnector(this.liveEditConnector);
  this.repositoryListener=new IRepositoryListener(){
    @Override public void projectConnected(    IProject project){
      startupConnectedProject(project);
    }
    @Override public void projectDisconnected(    IProject project){
    }
  }
;
  this.repository.addRepositoryListener(this.repositoryListener);
  startup();
  this.liveResourcesResponseHandler=new CallbackIDAwareMessageHandler("String_Node_Str",GET_LIVE_RESOURCES_CALLBACK){
    @Override public void handleMessage(    String messageType,    JSONObject message){
      startupLiveUnits(message);
    }
  }
;
  messagingConnector.addMessageHandler(this.liveResourcesResponseHandler);
  this.metadataChangeListener=new IResourceChangeListener(){
    @Override public void resourceChanged(    IResourceChangeEvent event){
      try {
        event.getDelta().accept(new IResourceDeltaVisitor(){
          @Override public boolean visit(          IResourceDelta delta) throws CoreException {
            checkForLiveUnitsInvolved(delta);
            return true;
          }
        }
);
      }
 catch (      CoreException e) {
        e.printStackTrace();
      }
    }
  }
;
  ResourcesPlugin.getWorkspace().addResourceChangeListener(this.metadataChangeListener,IResourceChangeEvent.POST_BUILD);
}

Fixed version (ground truth):
public LiveEditUnits(IMessagingConnector messagingConnector,LiveEditCoordinator liveEditCoordinator,Repository repository){
  this.messagingConnector=messagingConnector;
  this.liveEditCoordinator=liveEditCoordinator;
  this.repository=repository;
  this.liveEditUnits=new ConcurrentHashMap<String,ICompilationUnit>();
  this.liveEditConnector=new ILiveEditConnector(){
    @Override public String getConnectorID(){
      return LIVE_EDIT_CONNECTOR_ID;
    }
    @Override public void liveEditingEvent(    String username,    String resourcePath,    int offset,    int removeCount,    String newText){
      modelChanged(username,resourcePath,offset,removeCount,newText);
    }
    @Override public void liveEditingStarted(    String requestSenderID,    int callbackID,    String username,    String resourcePath,    String hash,    long timestamp){
      startLiveUnit(requestSenderID,callbackID,username,resourcePath,hash,timestamp);
    }
    @Override public void liveEditingStartedResponse(    String requestSenderID,    int callbackID,    String username,    String projectName,    String resourcePath,    String savePointHash,    long savePointTimestamp,    String content){
      updateLiveUnit(requestSenderID,callbackID,username,projectName,resourcePath,savePointHash,savePointTimestamp,content);
    }
    @Override public void liveEditors(    String requestSenderID,    int callbackID,    String username,    String projectRegEx,    String resourceRefEx){
    }
  }
;
  liveEditCoordinator.addLiveEditConnector(this.liveEditConnector);
  this.repositoryListener=new IRepositoryListener(){
    @Override public void projectConnected(    IProject project){
      startupConnectedProject(project);
    }
    @Override public void projectDisconnected(    IProject project){
    }
    @Override public void resourceChanged(    IResource resource){
    }
  }
;
  this.repository.addRepositoryListener(this.repositoryListener);
  startup();
  this.liveResourcesResponseHandler=new CallbackIDAwareMessageHandler("String_Node_Str",GET_LIVE_RESOURCES_CALLBACK){
    @Override public void handleMessage(    String messageType,    JSONObject message){
      startupLiveUnits(message);
    }
  }
;
  messagingConnector.addMessageHandler(this.liveResourcesResponseHandler);
  this.metadataChangeListener=new IResourceChangeListener(){
    @Override public void resourceChanged(    IResourceChangeEvent event){
      try {
        event.getDelta().accept(new IResourceDeltaVisitor(){
          @Override public boolean visit(          IResourceDelta delta) throws CoreException {
            checkForLiveUnitsInvolved(delta);
            return true;
          }
        }
);
      }
 catch (      CoreException e) {
        e.printStackTrace();
      }
    }
  }
;
  ResourcesPlugin.getWorkspace().addResourceChangeListener(this.metadataChangeListener,IResourceChangeEvent.POST_BUILD);
}