void (@NotNull VirtualFile vcsRoot, @NotNull FilePath filePath, boolean recursively) { myAffectedVcsRoots.add(vcsRoot); RecursiveFilePathSet dirsByRoot = myDirtyDirectoriesRecursively.get(vcsRoot); if (dirsByRoot != null && dirsByRoot.hasAncestor(filePath)) return; if (recursively) { if (dirsByRoot == null) { dirsByRoot = newRecursiveFilePathSet(); myDirtyDirectoriesRecursively.put(vcsRoot, dirsByRoot); } dirsByRoot.add(filePath); } else { Set<FilePath> dirtyFiles = myDirtyFiles.get(vcsRoot); if (dirtyFiles == null) { dirtyFiles = newFilePathsSet(); myDirtyFiles.put(vcsRoot, dirtyFiles); } dirtyFiles.add(filePath); } }