Skip to content

Guard against invalid PSI elements in annotator, intentions, and inspection fixes#972

Merged
SeeSharpSoft merged 3 commits intomainfrom
copilot/fix-invalid-psi-element
Mar 29, 2026
Merged

Guard against invalid PSI elements in annotator, intentions, and inspection fixes#972
SeeSharpSoft merged 3 commits intomainfrom
copilot/fix-invalid-psi-element

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Mar 21, 2026

  • Analyze the issue: Invalid PSI Element: class CsvFile occurs when PSI elements are accessed after becoming invalid (file deleted/moved)
  • Fix CsvAnnotator.annotate() - added csvFile.isValid() check before processing (primary fix for reported exception)
  • Fix CsvIntentionAction.isAvailable() - added containingFile.isValid() check
  • Fix CsvShiftColumnLeftIntentionAction.invoke() - added instanceof + isValid() guard
  • Fix CsvShiftColumnRightIntentionAction.invoke() - added instanceof + isValid() guard
  • Fix CsvValidationInspection.applyFix methods (3) - added element.isValid() guard
  • Update CHANGELOG.md with new ## 4.2.1 - Mar 29, 2026 section
  • Code review passed
  • CodeQL security scan: 0 alerts
Original prompt

This section details on the original issue you should resolve

<issue_title>[Automated Report] com.intellij.diagnostic.PluginException: Invalid PSI Element: class net.seesharpsoft.intellij.plugins.csv.psi.CsvFile #csv because: file:///Users/jaapbranderhorst/IdeaProjects/SBWZ_Docs-datamodel/docs/designs/boekhouding-tasks.tsv (invalid) is invalid</issue_title>
<issue_description>Message

Stacktrace

com.intellij.diagnostic.PluginException: Invalid PSI Element: class net.seesharpsoft.intellij.plugins.csv.psi.CsvFile #csv because: file:///Users/jaapbranderhorst/IdeaProjects/SBWZ_Docs-datamodel/docs/designs/boekhouding-tasks.tsv (invalid) is invalid
invalidated at: see attachment [Plugin: net.seesharpsoft.intellij.plugins.csv]
at com.intellij.diagnostic.PluginProblemReporterImpl.createPluginExceptionByClass(PluginProblemReporterImpl.java:23)
at com.intellij.diagnostic.PluginException.createByClass(PluginException.java:100)
at com.intellij.psi.util.PsiUtilCore.ensureValid(PsiUtilCore.java:509)
at com.intellij.psi.impl.source.PsiFileImpl.getTextLength(PsiFileImpl.java:349)
at com.intellij.psi.impl.source.PsiFileImpl.getTextRange(PsiFileImpl.java:355)
at com.intellij.codeInsight.daemon.impl.FileStatusMap.getFileDirtyScope(FileStatusMap.java:224)
at com.intellij.codeInsight.daemon.impl.DaemonCodeAnalyzerImpl.isErrorAnalyzingFinished(DaemonCodeAnalyzerImpl.java:931)
at com.anthropic.code.plugin.mcp.tools.DiagnosticTools$addTools$1$1$1.daemonFinished(DiagnosticTools.kt:106)
at com.intellij.codeInsight.daemon.DaemonCodeAnalyzer$DaemonListener.daemonFinished(DaemonCodeAnalyzer.java:123)
at com.intellij.util.messages.impl.MessageBusImplKt.invokeMethod(MessageBusImpl.kt:820)
at com.intellij.util.messages.impl.MessageBusImplKt.invokeListener(MessageBusImpl.kt:764)
at com.intellij.util.messages.impl.MessageBusImplKt.executeOrAddToQueue(MessageBusImpl.kt:585)
at com.intellij.util.messages.impl.MessagePublisher.publish$intellij_platform_core(MessageBusImpl.kt:556)
at com.intellij.util.messages.impl.MessagePublisher.invoke(MessageBusImpl.kt:533)
at jdk.proxy2/jdk.proxy2.$Proxy85.daemonFinished(Unknown Source)
at com.intellij.codeInsight.daemon.impl.DaemonCodeAnalyzerImpl$MyDaemonProgressIndicator.onStop(DaemonCodeAnalyzerImpl.java:1685)
at com.intellij.codeInsight.daemon.impl.DaemonProgressIndicator.stop(DaemonProgressIndicator.java:39)
at com.intellij.codeInsight.daemon.impl.PassExecutorService.lambda$applyInformationToEditorsLater$3(PassExecutorService.java:554)
at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:239)
at com.intellij.openapi.application.TransactionGuardImpl.access$100(TransactionGuardImpl.java:25)
at com.intellij.openapi.application.TransactionGuardImpl$1.run(TransactionGuardImpl.java:201)
at com.intellij.openapi.application.impl.AppImplKt$runnableUnitFunction$1.invoke(appImpl.kt:124)
at com.intellij.openapi.application.impl.AppImplKt$runnableUnitFunction$1.invoke(appImpl.kt:124)
at com.intellij.platform.locking.impl.NestedLocksThreadingSupport.doRunWriteIntentReadAction(NestedLocksThreadingSupport.kt:736)
at com.intellij.platform.locking.impl.NestedLocksThreadingSupport.runPreventiveWriteIntentReadAction(NestedLocksThreadingSupport.kt:710)
at com.intellij.platform.locking.impl.NestedLocksThreadingSupport.runWriteIntentReadAction(NestedLocksThreadingSupport.kt:664)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:1048)
at com.intellij.openapi.application.impl.ApplicationImpl$7.lambda$run$0(ApplicationImpl.java:602)
at com.intellij.concurrency.ThreadContext.installThreadContext(threadContext.kt:305)
at com.intellij.openapi.application.impl.ApplicationImpl$7.run(ApplicationImpl.java:600)
at com.intellij.util.concurrency.ChildContext$runInChildContext$1.invoke(propagation.kt:167)
at com.intellij.util.concurrency.ChildContext$runInChildContext$1.invoke(propagation.kt:167)
at com.intellij.util.concurrency.ChildContext.runInChildContext(propagation.kt:173)
at com.intellij.util.concurrency.ChildContext.runInChildContext(propagation.kt:167)
at com.intellij.util.concurrency.ContextRunnable.lambda$run$0(ContextRunnable.java:26)
at com.intellij.concurrency.ThreadContext.resetThreadContext(threadContext.kt:294)
at com.intellij.util.concurrency.ContextRunnable.run(ContextRunnable.java:25)
at com.intellij.openapi.application.impl.NonBlockingFlushQueue.runNextEvent$lambda$1$1$0(NonBlockingFlushQueue.kt:334)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:901)
at com.intellij.openapi.application.impl.NonBlockingFlushQueue.runNextEvent$lambda$1$1(NonBlockingFlushQueue.kt:333)
at com.intellij.concurrency.ThreadContext.resetThreadContext(threadContext.kt:294)
at com.intellij.openapi.application.impl.NonBlockingFlushQueue.runNextEvent$lambda$1(NonBlockingFlushQueue.kt:330)
at com.i...


⚡ Quickly spin up Copilot coding agent tasks from anywhere on your macOS or Windows machine with Raycast.

Copilot AI changed the title [WIP] Fix invalid PSI element in CSV plugin Guard against invalid PSI elements in annotator, intentions, and inspection fixes Mar 21, 2026
Copilot AI requested a review from SeeSharpSoft March 21, 2026 13:38
Comment thread CHANGELOG.md
### Fixed

## 4.2.0 - Jan 26, 2026
- PluginException: Invalid PSI Element CsvFile when file is invalidated during annotation, intention actions, or inspection fixes
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead removing the old version, create a new section above like this:

Suggested change
- PluginException: Invalid PSI Element CsvFile when file is invalidated during annotation, intention actions, or inspection fixes
## 4.2.1 - Mar 29, 2026
### Fixed
- PluginException: Invalid PSI Element CsvFile when file is invalidated during annotation, intention actions, or inspection fixes

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in 72ed1d3 — added the ## 4.2.1 - Mar 29, 2026 section above ## 4.2.0 and left ## Unreleased empty.

@SeeSharpSoft SeeSharpSoft marked this pull request as ready for review March 29, 2026 21:56
@SeeSharpSoft SeeSharpSoft merged commit e2dae44 into main Mar 29, 2026
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants