void (@NotNull VFileDeleteEvent event) { VirtualFile file = event.getFile(); if (!file.exists()) { LOG.error("Deleting a file which does not exist: " + ((VirtualFileWithId)file).getId() + " " + file.getPath()); return; } clearIdCache(); int id = getFileId(file); VirtualFile parent = file.getParent(); int parentId = parent == null ? 0 : getFileId(parent); if (parentId == 0) { String rootUrl = UriUtil.trimTrailingSlashes(file.getUrl()); synchronized (myRoots) { myRoots.remove(rootUrl); myIdToDirCache.remove(id); vfsPeer.deleteRootRecord(id); } } else { removeIdFromChildren(parent, parentId, id); VirtualDirectoryImpl directory = (VirtualDirectoryImpl)file.getParent(); assert directory != null : file; directory.removeChild(file); } vfsPeer.deleteRecordRecursively(id); invalidateSubtree(file, "File deleted", event); incStructuralModificationCount(); }