The following exception is thrown from com.picimako.terra.wdio.toolwindow.TerraWdioTreeModel#buildTree:
java.lang.Throwable: Assertion failed: Changes to PSI are not allowed inside event processing
at com.intellij.openapi.diagnostic.Logger.assertTrue(Logger.java:195)
at com.intellij.psi.impl.PsiManagerImpl.fireEvent(PsiManagerImpl.java:333)
at com.intellij.psi.impl.PsiManagerImpl.beforeChildRemoval(PsiManagerImpl.java:212)
at com.intellij.psi.impl.file.impl.PsiVFSListener.lambda$beforeFileDeletion$1(PsiVFSListener.java:197)
at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:1000)
at com.intellij.psi.impl.file.impl.PsiVFSListener.beforeFileDeletion(PsiVFSListener.java:190)
at com.intellij.psi.impl.file.impl.PsiVFSListener.before(PsiVFSListener.java:705)
at com.intellij.psi.impl.file.impl.PsiVFSListener$1.before(PsiVFSListener.java:127)
at jdk.internal.reflect.GeneratedMethodAccessor103.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.intellij.util.messages.impl.MessageBusImpl.invokeListener(MessageBusImpl.java:652)
at com.intellij.util.messages.impl.MessageBusImpl.deliverMessage(MessageBusImpl.java:426)
at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:401)
at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:383)
at com.intellij.util.messages.impl.MessageBusImpl.access$100(MessageBusImpl.java:33)
at com.intellij.util.messages.impl.MessageBusImpl$MessagePublisher.invoke(MessageBusImpl.java:189)
at com.sun.proxy.$Proxy115.before(Unknown Source)
at com.intellij.openapi.vfs.newvfs.persistent.PersistentFSImpl.fireBeforeEvents(PersistentFSImpl.java:1084)
at com.intellij.openapi.vfs.newvfs.persistent.PersistentFSImpl.applyMultipleEvents(PersistentFSImpl.java:1074)
at com.intellij.openapi.vfs.newvfs.persistent.PersistentFSImpl.processEvents(PersistentFSImpl.java:1063)
at com.intellij.openapi.vfs.newvfs.AsyncEventSupport.processEventsFromRefresh(AsyncEventSupport.java:130)
at com.intellij.openapi.vfs.newvfs.RefreshSessionImpl.fireEventsInWriteAction(RefreshSessionImpl.java:226)
at com.intellij.openapi.vfs.newvfs.RefreshSessionImpl.lambda$fireEvents$1(RefreshSessionImpl.java:204)
at com.intellij.openapi.application.impl.ApplicationImpl.lambda$runEdtProgressWriteAction$12(ApplicationImpl.java:964)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:178)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:658)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:610)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:65)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:165)
at com.intellij.openapi.progress.util.PotemkinProgress.runInSwingThread(PotemkinProgress.java:191)
at com.intellij.openapi.application.impl.ApplicationImpl.lambda$runEdtProgressWriteAction$13(ApplicationImpl.java:964)
at com.intellij.openapi.application.impl.ApplicationImpl.runWriteActionWithClass(ApplicationImpl.java:988)
at com.intellij.openapi.application.impl.ApplicationImpl.runEdtProgressWriteAction(ApplicationImpl.java:962)
at com.intellij.openapi.application.impl.ApplicationImpl.runWriteActionWithNonCancellableProgressInDispatchThread(ApplicationImpl.java:943)
at com.intellij.openapi.vfs.newvfs.RefreshSessionImpl.lambda$fireEvents$2(RefreshSessionImpl.java:198)
at com.intellij.openapi.application.WriteAction.run(WriteAction.java:102)
at com.intellij.openapi.vfs.newvfs.RefreshSessionImpl.fireEvents(RefreshSessionImpl.java:197)
at com.intellij.openapi.vfs.newvfs.RefreshQueueImpl.execute(RefreshQueueImpl.java:54)
at com.intellij.openapi.vfs.newvfs.RefreshSessionImpl.launch(RefreshSessionImpl.java:114)
at com.intellij.openapi.vfs.newvfs.RefreshQueue.refresh(RefreshQueue.java:42)
at com.intellij.openapi.vfs.newvfs.RefreshQueue.refresh(RefreshQueue.java:28)
at com.intellij.openapi.vfs.newvfs.NewVirtualFile.refresh(NewVirtualFile.java:62)
at com.intellij.openapi.vfs.VirtualFile.refresh(VirtualFile.java:672)
at com.picimako.terra.wdio.toolwindow.TerraWdioTreeModel.buildTree(TerraWdioTreeModel.java:142)
at com.picimako.terra.wdio.toolwindow.TerraWdioExternalFileAndFolderChangeListener.after(TerraWdioExternalFileAndFolderChangeListener.java:72)
at jdk.internal.reflect.GeneratedMethodAccessor104.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.intellij.util.messages.impl.MessageBusImpl.invokeListener(MessageBusImpl.java:652)
at com.intellij.util.messages.impl.MessageBusImpl.deliverMessage(MessageBusImpl.java:426)
at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:401)
at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:383)
at com.intellij.util.messages.impl.MessageBusImpl.access$100(MessageBusImpl.java:33)
at com.intellij.util.messages.impl.MessageBusImpl$MessagePublisher.invoke(MessageBusImpl.java:182)
at com.sun.proxy.$Proxy41.modificationCountChanged(Unknown Source)
at com.intellij.psi.impl.PsiModificationTrackerImpl.fireEvent(PsiModificationTrackerImpl.java:81)
at com.intellij.psi.impl.PsiModificationTrackerImpl.incCountersInner(PsiModificationTrackerImpl.java:86)
at com.intellij.psi.impl.PsiModificationTrackerImpl.treeChanged(PsiModificationTrackerImpl.java:96)
at com.intellij.psi.impl.PsiManagerImpl.fireEvent(PsiManagerImpl.java:338)
at com.intellij.psi.impl.PsiManagerImpl.childRemoved(PsiManagerImpl.java:271)
at com.intellij.psi.impl.file.impl.PsiVFSListener.lambda$filesDeleted$2(PsiVFSListener.java:237)
at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:1000)
at com.intellij.psi.impl.file.impl.PsiVFSListener.filesDeleted(PsiVFSListener.java:233)
at com.intellij.psi.impl.file.impl.PsiVFSListener.lambda$fireForGrouped$9(PsiVFSListener.java:735)
at com.intellij.psi.impl.DebugUtil.performPsiModification(DebugUtil.java:567)
at com.intellij.psi.impl.file.impl.PsiVFSListener.fireForGrouped(PsiVFSListener.java:735)
at one.util.streamex.CollapseSpliterator.accept(CollapseSpliterator.java:150)
at one.util.streamex.CollapseSpliterator.forEachRemaining(CollapseSpliterator.java:140)
at one.util.streamex.AbstractStreamEx.forEach(AbstractStreamEx.java:306)
at com.intellij.psi.impl.file.impl.PsiVFSListener.groupAndFire(PsiVFSListener.java:729)
at com.intellij.psi.impl.file.impl.PsiVFSListener.after(PsiVFSListener.java:718)
at com.intellij.psi.impl.file.impl.PsiVFSListener$1.after(PsiVFSListener.java:152)
at jdk.internal.reflect.GeneratedMethodAccessor104.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.intellij.util.messages.impl.MessageBusImpl.invokeListener(MessageBusImpl.java:652)
at com.intellij.util.messages.impl.MessageBusImpl.deliverMessage(MessageBusImpl.java:426)
at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:401)
at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:383)
at com.intellij.util.messages.impl.MessageBusImpl.access$100(MessageBusImpl.java:33)
at com.intellij.util.messages.impl.MessageBusImpl$MessagePublisher.invoke(MessageBusImpl.java:189)
at com.sun.proxy.$Proxy115.after(Unknown Source)
at com.intellij.openapi.vfs.newvfs.persistent.PersistentFSImpl.fireAfterEvents(PersistentFSImpl.java:1091)
at com.intellij.openapi.vfs.newvfs.persistent.PersistentFSImpl.processEvent(PersistentFSImpl.java:781)
at com.intellij.openapi.vfs.newvfs.persistent.PersistentFSImpl.deleteFile(PersistentFSImpl.java:521)
at com.intellij.openapi.vfs.newvfs.impl.VirtualFileSystemEntry.delete(VirtualFileSystemEntry.java:260)
at com.intellij.psi.impl.file.PsiDirectoryImpl.delete(PsiDirectoryImpl.java:486)
at com.intellij.ide.util.DeleteHandler.lambda$doDeleteFiles$5(DeleteHandler.java:318)
at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:1000)
at com.intellij.ide.util.DeleteHandler.doDeleteFiles(DeleteHandler.java:315)
at com.intellij.ide.util.DeleteHandler.lambda$deleteInCommand$0(DeleteHandler.java:208)
at com.intellij.openapi.fileEditor.impl.NonProjectFileWritingAccessProvider.disableChecksDuring(NonProjectFileWritingAccessProvider.java:176)
at com.intellij.ide.util.DeleteHandler.lambda$deleteInCommand$1(DeleteHandler.java:195)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:220)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:177)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:167)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:153)
at com.intellij.ide.util.DeleteHandler.deleteInCommand(DeleteHandler.java:195)
at com.intellij.ide.util.DeleteHandler.deletePsiElement(DeleteHandler.java:180)
at com.intellij.ide.util.DeleteHandler.deletePsiElement(DeleteHandler.java:108)
at com.intellij.ide.projectView.impl.ProjectViewDeleteElementProvider.deleteElement(ProjectViewDeleteElementProvider.java:53)
at com.intellij.ide.actions.DeleteAction.actionPerformed(DeleteAction.java:37)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:281)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher$1.performAction(IdeKeyEventDispatcher.java:615)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.lambda$processAction$3(IdeKeyEventDispatcher.java:675)
at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:95)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction(IdeKeyEventDispatcher.java:674)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction(IdeKeyEventDispatcher.java:625)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processActionOrWaitSecondStroke(IdeKeyEventDispatcher.java:522)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.inInitState(IdeKeyEventDispatcher.java:476)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.dispatchKeyEvent(IdeKeyEventDispatcher.java:225)
at com.intellij.ide.IdeEventQueue.dispatchKeyEvent(IdeEventQueue.java:892)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:837)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:454)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:773)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:453)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:822)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:507)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Technical notes
Call refresh on VirtualFiles in com.picimako.terra.wdio.toolwindow.TerraWdioTreeModel only when the tool window tree is built the first time, and don't call refresh during event processing.
Steps to reproduce
The following exception is thrown from
com.picimako.terra.wdio.toolwindow.TerraWdioTreeModel#buildTree
:Technical notes
com.picimako.terra.wdio.toolwindow.TerraWdioTreeModel
only when the tool window tree is built the first time, and don't call refresh during event processing.Versions affected
<= 0.4.0
Out of scope