Skip to content

Conversation

@coleleavitt
Copy link
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