@Override
        public void onChangedIInterpreterInfo(InfoTracker infoTracker, File file) {
          if (SynchSystemModulesManager.DEBUG) {
            System.out.println(
                "File changed :" + file + " starting track of: " + infoTracker.info.getNameForUI());
          }
          job.addToTrack(infoTracker.manager, infoTracker.info);
          if (file.exists() && file.isDirectory()) {
            // If it's a directory, it may be a copy operation, so, check until the copy finishes
            // (i.e.:
            // poll for changes and when there are no changes anymore scheduleLater it right away).

            job.scheduleLater(1000);
            long lastFound = 0;
            while (true) {
              long lastModified =
                  FileUtils.getLastModifiedTimeFromDir(
                      file, filter, dirFilter, EventsStackerRunnable.LEVELS_TO_GET_MODIFIED_TIME);
              if (lastFound == lastModified) {
                break;
              }
              lastFound = lastModified;

              // If we don't have a change in the directory structure for 500 millis, stop it.
              synchronized (this) {
                try {
                  this.wait(500);
                } catch (InterruptedException e) {
                  // Ignore
                }
              }
              if (lastFound == 0) {
                return; // I.e.: found no interesting file.
              }
              job.scheduleLater(1000);
            }

          } else {
            job.scheduleLater(5 * 1000); // 5 seconds
          }
        }