void fileVcsPathsDirty(@NotNull Map<VcsRoot, Set<FilePath>> filesConverted,
                         @NotNull Map<VcsRoot, Set<FilePath>> dirsConverted) {
    if (filesConverted.isEmpty() && dirsConverted.isEmpty()) return;

    if (LOG.isDebugEnabled()) {
      LOG.debug(String.format("dirty files: %s; dirty dirs: %s; %s",
                              toString(filesConverted), toString(dirsConverted), findFirstInterestingCallerClass()));
    }

    boolean hasSomethingDirty = false;
    for (VcsRoot vcsRoot : ContainerUtil.union(filesConverted.keySet(), dirsConverted.keySet())) {
      Set<FilePath> files = ContainerUtil.notNullize(filesConverted.get(vcsRoot));
      Set<FilePath> dirs = ContainerUtil.notNullize(dirsConverted.get(vcsRoot));

      synchronized (LOCK) {
        if (myReady) {
          hasSomethingDirty |= myDirtBuilder.addDirtyFiles(vcsRoot, files, dirs);
        }
      }
    }

    if (hasSomethingDirty) {
      ChangeListManagerImpl.getInstanceImpl(myProject).scheduleUpdateImpl();
    }
  }
void fileVcsPathsDirty(@NotNull Map<VcsRoot, Set<FilePath>> filesConverted,
                         @NotNull Map<VcsRoot, Set<FilePath>> dirsConverted)