Skip to content

Fix PSI access threading issues in CsvTableModelSwing#915

Merged
SeeSharpSoft merged 2 commits intoSeeSharpSoft:mainfrom
coleleavitt:fix/psi-access-threading
Sep 7, 2025
Merged

Fix PSI access threading issues in CsvTableModelSwing#915
SeeSharpSoft merged 2 commits intoSeeSharpSoft:mainfrom
coleleavitt:fix/psi-access-threading

Conversation

@coleleavitt
Copy link
Copy Markdown
Contributor

getColumnName(int column)

now wraps all PSI access in

 ApplicationManager.getApplication().runReadAction

This ensures that reading PSI elements occurs safely within the required read action context, fixing runtime errors about improper thread access.
resolves exceptions like: Read access is allowed from inside read-action only

log:


com.intellij.openapi.diagnostic.RuntimeExceptionWithAttachments: Read access is allowed from inside read-action only (see Application.runReadAction()); If you access or modify model on EDT consider wrapping your code in WriteIntentReadAction ; see https://jb.gg/ij-platform-threading for details
Current thread: Thread[#44,AWT-EventQueue-0,6,InnocuousThreadGroup] 2058101782 (EventQueue.isDispatchThread()=true)
SystemEventQueueThread: (same)
   at com.intellij.util.concurrency.ThreadingAssertions.createThreadAccessException(ThreadingAssertions.java:257)
   at com.intellij.util.concurrency.ThreadingAssertions.softAssertReadAccess(ThreadingAssertions.java:173)
   at com.intellij.openapi.application.impl.ApplicationImpl.assertReadAccessAllowed(ApplicationImpl.java:1171)
   at com.intellij.psi.impl.source.tree.TreeElement.assertReadAccessAllowed(TreeElement.java:437)
   at com.intellij.psi.impl.source.tree.CompositeElement.textToCharArray(CompositeElement.java:243)
   at com.intellij.psi.impl.source.tree.CompositeElement.getText(CompositeElement.java:226)
   at com.intellij.extapi.psi.ASTDelegatePsiElement.getText(ASTDelegatePsiElement.java:136)
   at net.seesharpsoft.intellij.plugins.csv.editor.table.swing.CsvTableModelSwing.getColumnName(CsvTableModelSwing.java:104)
   at java.desktop/javax.swing.JTable.addColumn(JTable.java:2853)
   at java.desktop/javax.swing.JTable.createDefaultColumnsFromModel(JTable.java:1356)
   at java.desktop/javax.swing.JTable.tableChanged(JTable.java:4454)
   at net.seesharpsoft.intellij.plugins.csv.editor.table.swing.CsvTableEditorSwing.afterTableModelUpdate(CsvTableEditorSwing.java:174)
   at net.seesharpsoft.intellij.plugins.csv.editor.table.swing.CsvTableModelSwing.doNotifyUpdate(CsvTableModelSwing.java:62)
   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.run(ContextRunnable.java:27)
   at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
   at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:781)
   at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:728)
   at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)
   at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
   at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
   at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:750)
   at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.kt:595)
   at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.kt:488)
   at com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$12$lambda$11$lambda$10$lambda$9(IdeEventQueue.kt:313)
   at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:865)
   at com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$12$lambda$11$lambda$10(IdeEventQueue.kt:312)
   at com.intellij.ide.IdeEventQueueKt.performActivity$lambda$3(IdeEventQueue.kt:974)
   at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:110)
   at com.intellij.ide.IdeEventQueueKt.performActivity(IdeEventQueue.kt:974)
   at com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$12(IdeEventQueue.kt:307)
   at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.kt:347)
   at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207)
   at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
   at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
   at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
   at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
   at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)

@SeeSharpSoft SeeSharpSoft merged commit 91f9049 into SeeSharpSoft:main Sep 7, 2025
3 of 4 checks passed
@coleleavitt coleleavitt deleted the fix/psi-access-threading branch September 8, 2025 06:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants