public void checkAllNow() {
    // Add all to be tracked
    Map<IInterpreterManager, Map<String, IInterpreterInfo>> addedToTrack = job.addAllToTrack();

    // remove from the preferences any ignore the user had set previously
    Set<Entry<IInterpreterManager, Map<String, IInterpreterInfo>>> entrySet =
        addedToTrack.entrySet();
    IPreferenceStore preferences = PydevPrefs.getPreferences();
    for (Entry<IInterpreterManager, Map<String, IInterpreterInfo>> entry : entrySet) {
      Set<Entry<String, IInterpreterInfo>> entrySet2 = entry.getValue().entrySet();
      for (Entry<String, IInterpreterInfo> entry2 : entrySet2) {
        String key = SynchSystemModulesManager.createKeyForInfo(entry2.getValue());
        preferences.setValue(key, "");
      }
    }
    if (preferences instanceof IPersistentPreferenceStore) {
      IPersistentPreferenceStore iPersistentPreferenceStore =
          (IPersistentPreferenceStore) preferences;
      try {
        iPersistentPreferenceStore.save();
      } catch (IOException e) {
        Log.log(e);
      }
    }

    // schedule changes to be executed.
    job.scheduleLater(0);
  }
    @Override
    protected IStatus run(IProgressMonitor monitor) {
      boolean selectingElementsInDialog = fSynchManager.getSelectingElementsInDialog();
      if (selectingElementsInDialog) {
        // No point in starting a process if the user already has a dialog related to this process
        // open.
        if (SynchSystemModulesManager.DEBUG) {
          System.out.println("Dialog already showing: rescheduling new check for later.");
        }
        this.scheduleLater(20000);
        return Status.OK_STATUS;
      }
      if (SynchSystemModulesManager.DEBUG) {
        System.out.println("Running SynchJob!");
      }

      if (monitor == null) {
        monitor = new NullProgressMonitor();
      }
      ManagerInfoToUpdate managerToNameToInfo;
      synchronized (fManagerToNameToInfoLock) {
        if (this.fManagerToNameToInfo == null || this.fManagerToNameToInfo.size() == 0) {
          return Status.OK_STATUS; // nothing to do if there's nothing there...
        }
        managerToNameToInfo = new ManagerInfoToUpdate(this.fManagerToNameToInfo);
        this.fManagerToNameToInfo = null;
      }

      long initialTime = System.currentTimeMillis();
      ThreadPriorityHelper priorityHelper = new ThreadPriorityHelper(this.getThread());
      priorityHelper.setMinPriority();

      try {
        final DataAndImageTreeNode root = new DataAndImageTreeNode(null, null, null);
        if (monitor.isCanceled()) {
          return Status.OK_STATUS;
        }

        fSynchManager.updateStructures(
            monitor, root, managerToNameToInfo, new CreateInterpreterInfoCallback());
        long delta = System.currentTimeMillis() - initialTime;
        if (SynchSystemModulesManager.DEBUG) {
          System.out.println(
              "Time to check polling for changes in interpreters: " + delta / 1000.0 + " secs.");
        }

        List<TreeNode> initialSelection = new ArrayList<>(0);
        if (root.hasChildren()) {
          initialSelection =
              fSynchManager.createInitialSelectionForDialogConsideringPreviouslyIgnored(
                  root, PydevPrefs.getPreferences());
        }

        if (root.hasChildren() && initialSelection.size() > 0) {
          if (SynchSystemModulesManager.DEBUG) {
            System.out.println("Changes found in PYTHONPATH.");
          }
          fSynchManager.asyncSelectAndScheduleElementsToChangePythonpath(
              root, managerToNameToInfo, initialSelection);
        } else {
          if (SynchSystemModulesManager.DEBUG) {
            System.out.println("PYTHONPATH remained the same.");
          }
          fSynchManager.synchronizeManagerToNameToInfoPythonpath(
              monitor, managerToNameToInfo, null);
        }

      } finally {
        // As jobs are from a thread pool, restore the priority afterwards
        priorityHelper.restoreInitialPriority();
      }
      return Status.OK_STATUS;
    }