Skip to content

Commit 6e76484

Browse files
SeeSharpSoftMartin Sommer
authored andcommitted
Fix: Access is allowed with explicit read lock #898 #901
1 parent 91f9049 commit 6e76484

File tree

2 files changed

+22
-23
lines changed

2 files changed

+22
-23
lines changed

src/main/java/net/seesharpsoft/intellij/plugins/csv/editor/table/CsvTableEditor.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.intellij.ide.structureView.StructureViewBuilder;
44
import com.intellij.openapi.application.ApplicationManager;
5+
import com.intellij.openapi.application.ReadAction;
56
import com.intellij.openapi.editor.Document;
67
import com.intellij.openapi.editor.colors.EditorColorsManager;
78
import com.intellij.openapi.editor.colors.EditorFontType;
@@ -213,12 +214,11 @@ public final CsvFile getCsvFile() {
213214
return null;
214215
}
215216
if (this.psiFile == null || !this.psiFile.isValid()) {
216-
this.document = FileDocumentManager.getInstance().getDocument(this.file);
217-
218-
PsiDocumentManager documentManager = PsiDocumentManager.getInstance(project);
219-
220-
this.psiFile = documentManager.getPsiFile(this.document);
221-
217+
this.psiFile = ReadAction.compute(() -> {
218+
this.document = FileDocumentManager.getInstance().getDocument(this.file);
219+
PsiDocumentManager documentManager = PsiDocumentManager.getInstance(project);
220+
return documentManager.getPsiFile(this.document);
221+
});
222222
this.currentSeparator = CsvHelper.getValueSeparator(this.psiFile);
223223
this.currentEscapeCharacter = CsvHelper.getEscapeCharacter(this.psiFile);
224224
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/psi/CsvPsiTreeUpdater.java

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.seesharpsoft.intellij.plugins.csv.psi;
22

33
import com.intellij.openapi.application.ApplicationManager;
4+
import com.intellij.openapi.application.WriteAction;
45
import com.intellij.openapi.command.CommandProcessor;
56
import com.intellij.openapi.editor.Document;
67
import com.intellij.openapi.fileTypes.FileType;
@@ -515,27 +516,25 @@ private static class DocumentPsiAction extends PsiAction {
515516

516517
@Override
517518
public void execute() {
518-
ApplicationManager.getApplication().runWriteAction(
519-
() -> {
520-
PsiFile psiFile = (PsiFile) getAnchor();
519+
WriteAction.run(() -> {
520+
PsiFile psiFile = (PsiFile) getAnchor();
521521

522-
PsiDocumentManager manager = PsiDocumentManager.getInstance(psiFile.getProject());
523-
Document document = manager.getDocument(psiFile);
524-
if (document == null) return;
522+
PsiDocumentManager manager = PsiDocumentManager.getInstance(psiFile.getProject());
523+
Document document = manager.getDocument(psiFile);
524+
if (document == null) return;
525525

526-
manager.doPostponedOperationsAndUnblockDocument(document);
526+
manager.doPostponedOperationsAndUnblockDocument(document);
527527

528-
int offset = 0;
529-
for (Pair<TextRange, String> replacement : myReplacements) {
530-
TextRange textRange = replacement.getFirst().shiftRight(offset);
531-
String text = replacement.getSecond();
532-
document.replaceString(textRange.getStartOffset(), textRange.getEndOffset(), text);
533-
offset += text.length() - textRange.getLength();
534-
}
528+
int offset = 0;
529+
for (Pair<TextRange, String> replacement : myReplacements) {
530+
TextRange textRange = replacement.getFirst().shiftRight(offset);
531+
String text = replacement.getSecond();
532+
document.replaceString(textRange.getStartOffset(), textRange.getEndOffset(), text);
533+
offset += text.length() - textRange.getLength();
534+
}
535535

536-
manager.commitDocument(document);
537-
}
538-
);
536+
manager.commitDocument(document);
537+
});
539538
}
540539
}
541540
}

0 commit comments

Comments
 (0)