void (@NotNull List<? extends VFileEvent> events) { boolean needToRemoveInvalidFilesAndDirs = false; for (VFileEvent event : events) { VFileDeleteEvent de = (VFileDeleteEvent)event; VirtualFile vFile = de.getFile(); VirtualFile parent = vFile.getParent(); PsiFile psiFile = myFileManager.getCachedPsiFileInner(vFile); PsiElement element; if (psiFile != null) { myFileManager.setViewProvider(vFile, null); element = psiFile; } else { PsiDirectory psiDir = myFileManager.getCachedDirectory(vFile); if (psiDir != null) { needToRemoveInvalidFilesAndDirs = true; element = psiDir; } else if (parent != null) { handleVfsChangeWithoutPsi(parent); return; } else { element = null; } } PsiDirectory parentDir = getCachedDirectory(parent); if (element != null && parentDir != null) { ApplicationManager.getApplication().runWriteAction((ExternalChangeAction)() -> { PsiTreeChangeEventImpl treeEvent = new PsiTreeChangeEventImpl(myManager); treeEvent.setParent(parentDir); treeEvent.setChild(element); myManager.childRemoved(treeEvent); }); } } if (needToRemoveInvalidFilesAndDirs) { myFileManager.removeInvalidFilesAndDirs(false); } }