void (@NotNull VFilePropertyChangeEvent event) { VirtualFile vFile = event.getFile(); String propertyName = event.getPropertyName(); FileViewProvider viewProvider = myFileManager.findCachedViewProvider(vFile); VirtualFile parent = vFile.getParent(); PsiDirectory parentDir = viewProvider != null && parent != null ? myFileManager.findDirectory(parent) : getCachedDirectory(parent); if (parent != null && parentDir == null) return; // do not notifyListeners event if parent directory was never accessed via PSI ApplicationManager.getApplication().runWriteAction( (ExternalChangeAction)() -> { PsiTreeChangeEventImpl treeEvent = new PsiTreeChangeEventImpl(myManager); treeEvent.setParent(parentDir); if (VirtualFile.PROP_NAME.equals(propertyName)) { String newName = (String)event.getNewValue(); if (parentDir == null) return; if (vFile.isDirectory()) { PsiDirectory psiDir = myFileManager.findDirectory(vFile); if (psiDir != null) { if (!FileTypeManager.getInstance().isFileIgnored(newName)) { treeEvent.setChild(psiDir); treeEvent.setPropertyName(PsiTreeChangeEvent.PROP_DIRECTORY_NAME); treeEvent.setOldValue(vFile.getName()); treeEvent.setNewValue(newName); myManager.beforePropertyChange(treeEvent); } else { treeEvent.setChild(psiDir); myManager.beforeChildRemoval(treeEvent); } } else { if ((!Registry.is("ide.hide.excluded.files") || !isExcludeRoot(vFile)) && !FileTypeManager.getInstance().isFileIgnored(newName)) { myManager.beforeChildAddition(treeEvent); } } } else { FileViewProvider viewProvider1 = myFileManager.findViewProvider(vFile); PsiFile psiFile = viewProvider1.getPsi(viewProvider1.getBaseLanguage()); PsiFile psiFile1 = createFileCopyWithNewName(vFile, newName); if (psiFile != null) { if (psiFile1 == null) { treeEvent.setChild(psiFile); myManager.beforeChildRemoval(treeEvent); } else if (!psiFile1.getClass().equals(psiFile.getClass())) { treeEvent.setOldChild(psiFile); myManager.beforeChildReplacement(treeEvent); } else { treeEvent.setChild(psiFile); treeEvent.setPropertyName(PsiTreeChangeEvent.PROP_FILE_NAME); treeEvent.setOldValue(vFile.getName()); treeEvent.setNewValue(newName); myManager.beforePropertyChange(treeEvent); } } else { if (psiFile1 != null) { myManager.beforeChildAddition(treeEvent); } } } } else if (VirtualFile.PROP_WRITABLE.equals(propertyName)) { PsiFile psiFile = myFileManager.getCachedPsiFileInner(vFile); if (psiFile == null) return; treeEvent.setElement(psiFile); treeEvent.setPropertyName(PsiTreeChangeEvent.PROP_WRITABLE); treeEvent.setOldValue(event.getOldValue()); treeEvent.setNewValue(event.getNewValue()); myManager.beforePropertyChange(treeEvent); } } ); }