1
1
package net .seesharpsoft .intellij .plugins .csv .editor .table .swing ;
2
2
3
3
import com .intellij .openapi .application .ApplicationManager ;
4
+ import com .intellij .openapi .util .Computable ;
4
5
import com .intellij .psi .PsiElement ;
5
6
import net .seesharpsoft .intellij .plugins .csv .CsvHelper ;
6
7
import net .seesharpsoft .intellij .plugins .csv .editor .table .CsvTableEditor ;
@@ -30,7 +31,7 @@ public class CsvTableModelSwing extends CsvTableModelBase<CsvTableEditor> implem
30
31
*/
31
32
protected EventListenerList listenerList = new EventListenerList ();
32
33
33
- protected ScheduledFuture delayedUpdate ;
34
+ protected ScheduledFuture <?> delayedUpdate ;
34
35
35
36
protected ScheduledExecutorService executorService ;
36
37
@@ -95,19 +96,23 @@ public void removeTableModelListener(TableModelListener l) {
95
96
listenerList .remove (TableModelListener .class , l );
96
97
}
97
98
99
+ /**
100
+ * Gets header name for a given column, with index formatting.
101
+ * PSI access is wrapped in a read action for thread safety.
102
+ */
98
103
@ Override
99
104
public String getColumnName (int column ) {
100
- PsiElement headerField = PsiHelper . findFirst ( getPsiFile (), CsvTypes . FIELD );
101
- if ( headerField != null ) {
102
- headerField = PsiHelper . getNextNthSiblingOfType (headerField , column , CsvField . class );
103
- }
104
- String headerText = headerField == null ? "" : CsvHelper . unquoteCsvValue ( headerField . getText (), getEscapeCharacter ()). trim ();
105
-
106
- Map <String , Object > params = new HashMap <>();
107
- params .put ("header" , headerText );
108
- params .put ("index" , CsvEditorSettings .getInstance ().isZeroBasedColumnNumbering () ? column : column + 1 );
109
-
110
- return CsvHelper . formatString ( "${header} (${index})" , params );
105
+ return ApplicationManager . getApplication (). runReadAction (( Computable < String >) () -> {
106
+ PsiElement headerField = PsiHelper . findFirst ( getPsiFile (), CsvTypes . FIELD );
107
+ if (headerField != null ) {
108
+ headerField = PsiHelper . getNextNthSiblingOfType ( headerField , column , CsvField . class );
109
+ }
110
+ String headerText = headerField == null ? "" : CsvHelper . unquoteCsvValue ( headerField . getText (), getEscapeCharacter ()). trim ();
111
+ Map <String , Object > params = new HashMap <>();
112
+ params .put ("header" , headerText );
113
+ params .put ("index" , CsvEditorSettings .getInstance ().isZeroBasedColumnNumbering () ? column : column + 1 );
114
+ return CsvHelper . formatString ( "${header} (${index})" , params );
115
+ } );
111
116
}
112
117
113
118
@ Override
@@ -119,4 +124,4 @@ public Class<?> getColumnClass(int columnIndex) {
119
124
public boolean isCellEditable (int rowIndex , int columnIndex ) {
120
125
return getPsiFileHolder ().isEditable ();
121
126
}
122
- }
127
+ }
0 commit comments