/** Must be synchronized (lockSetInfos). */
 private void stopTrack(IInterpreterManager manager, IPathWatch pathWatch) {
   List<InfoTracker> currTrackers = managerToPathsTracker.remove(manager);
   if (currTrackers != null) {
     for (InfoTracker infoTracker : currTrackers) {
       for (File f : infoTracker.filepathsTracked) {
         pathWatch.stopTrack(f, infoTracker);
       }
     }
   }
 }
 /** Stops the synchronization. */
 public void stop() {
   job.cancel();
   IInterpreterManager[] managers = PydevPlugin.getAllInterpreterManagers();
   synchronized (lockSetInfos) {
     for (IInterpreterManager iInterpreterManager : managers) {
       if (iInterpreterManager != null) {
         stopTrack(iInterpreterManager, pathWatch);
       }
     }
   }
   pathWatch.dispose();
 }
  public void afterSetInfos(
      IInterpreterManager manager,
      IInterpreterInfo[] interpreterInfos,
      IInfoTrackerListener listener) {
    synchronized (lockSetInfos) {
      stopTrack(manager, pathWatch);

      List<InfoTracker> currTrackers = new ArrayList<>();
      managerToPathsTracker.put(manager, currTrackers);
      for (IInterpreterInfo info : interpreterInfos) {
        List<String> pythonPath = info.getPythonPath();
        InfoTracker tracker = new InfoTracker(manager, info, listener);
        for (String string : pythonPath) {
          File f = new File(string);
          if (SynchSystemModulesManager.DEBUG) {
            System.out.println("Tracking file: " + f + " for: " + info.getNameForUI());
          }
          tracker.registerTracking(f);
          pathWatch.track(f, tracker);
          currTrackers.add(tracker);
        }
      }
    }
  }
 public SyncSystemModulesManagerScheduler() {
   pathWatch.setDirectoryFileFilter(filter, dirFilter);
 }