IJPL-53: Add needed explicit read action.

GitOrigin-RevId: 7170d6e03712d56c1800b65e21444d7057a56607
This commit is contained in:
Lev Serebryakov
2023-08-28 18:45:51 +02:00
committed by intellij-monorepo-bot
parent 0e153964f5
commit cc27aebcd0
8 changed files with 66 additions and 44 deletions

View File

@@ -2,6 +2,9 @@
package com.intellij.codeInsight.daemon.impl
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ReadAction
import com.intellij.openapi.application.readAction
import com.intellij.openapi.application.runReadAction
import com.intellij.openapi.components.service
import com.intellij.openapi.diagnostic.debug
import com.intellij.openapi.diagnostic.logger
@@ -18,6 +21,7 @@ import com.intellij.openapi.wm.WindowManager
import com.intellij.openapi.wm.impl.IdeFrameImpl
import com.intellij.openapi.wm.impl.ProjectFrameHelper
import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiFile
import com.intellij.util.concurrency.annotations.RequiresEdt
import java.awt.Window
import java.awt.event.WindowAdapter
@@ -87,7 +91,8 @@ open class EditorTrackerImpl(@JvmField protected val project: Project) : EditorT
override fun editorCreated(event: EditorFactoryEvent) {
val editor = event.editor
val project = editor.project?.takeIf { !it.isDisposed } ?: return
if (PsiDocumentManager.getInstance(project).getPsiFile(editor.document) != null) {
val psi = runReadAction { PsiDocumentManager.getInstance(project).getPsiFile(editor.document) }
if (psi != null) {
getInstance(project).createEditorImpl(editor = editor, project = project)
}
}

View File

@@ -999,10 +999,11 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
myIgnoreMouseEventsConsecutiveToInitial = true;
}
myCaretModel.updateVisualPosition();
// make sure carets won't appear at invalid positions (e.g., on Tab width change)
getCaretModel().doWithCaretMerging(() -> myCaretModel.getAllCarets().forEach(caret -> caret.moveToOffset(caret.getOffset())));
ReadAction.run(() -> {
myCaretModel.updateVisualPosition();
// make sure carets won't appear at invalid positions (e.g., on Tab width change)
getCaretModel().doWithCaretMerging(() -> myCaretModel.getAllCarets().forEach(caret -> caret.moveToOffset(caret.getOffset())));
});
if (myVirtualFile != null && myProject != null) {
EditorNotifications.getInstance(myProject).updateNotifications(myVirtualFile);

View File

@@ -5,6 +5,7 @@ import com.intellij.diagnostic.Dumpable;
import com.intellij.ide.ui.UISettings;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.CustomFoldRegion;
import com.intellij.openapi.editor.FoldRegion;
@@ -666,9 +667,11 @@ public final class EditorView implements TextDrawingCallback, Disposable, Dumpab
}
private void invalidateFoldRegionLayouts() {
for (FoldRegion region : myEditor.getFoldingModel().getAllFoldRegions()) {
invalidateFoldRegionLayout(region);
}
ReadAction.run(() -> {
for (FoldRegion region : myEditor.getFoldingModel().getAllFoldRegions()) {
invalidateFoldRegionLayout(region);
}
});
}
public void invalidateFoldRegionLayout(FoldRegion region) {

View File

@@ -13,6 +13,7 @@ import com.intellij.openapi.actionSystem.DataProvider;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.command.UndoConfirmationPolicy;
import com.intellij.openapi.command.impl.UndoManagerImpl;
@@ -622,7 +623,7 @@ public class EditorTextField extends NonOpaquePanel implements EditorTextCompone
editor.setCaretEnabled(!myIsViewer);
if (project != null) {
PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument());
PsiFile psiFile = ReadAction.compute(() -> PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()));
if (psiFile != null) {
DaemonCodeAnalyzer.getInstance(project).setHighlightingEnabled(psiFile, !myIsViewer);
}
@@ -636,44 +637,46 @@ public class EditorTextField extends NonOpaquePanel implements EditorTextCompone
if (highlighter != null) editor.setHighlighter(highlighter);
}
editor.getSettings().setCaretRowShown(false);
ReadAction.run(() -> {
editor.getSettings().setCaretRowShown(false);
editor.setOneLineMode(myOneLineMode);
editor.getCaretModel().moveToOffset(document.getTextLength());
editor.setOneLineMode(myOneLineMode);
editor.getCaretModel().moveToOffset(document.getTextLength());
if (!shouldHaveBorder()) {
editor.setBorder(null);
}
if (!shouldHaveBorder()) {
editor.setBorder(null);
}
if (myIsViewer) {
editor.getSelectionModel().removeSelection();
}
else if (myWholeTextSelected) {
doSelectAll(editor);
myWholeTextSelected = false;
}
if (myIsViewer) {
editor.getSelectionModel().removeSelection();
}
else if (myWholeTextSelected) {
doSelectAll(editor);
myWholeTextSelected = false;
}
editor.putUserData(SUPPLEMENTARY_KEY, myIsSupplementary);
editor.getContentComponent().setFocusCycleRoot(false);
editor.getContentComponent().addFocusListener(this);
editor.getContentComponent().addMouseListener(this);
editor.putUserData(SUPPLEMENTARY_KEY, myIsSupplementary);
editor.getContentComponent().setFocusCycleRoot(false);
editor.getContentComponent().addFocusListener(this);
editor.getContentComponent().addMouseListener(this);
editor.setPlaceholder(myHintText);
editor.setShowPlaceholderWhenFocused(myShowPlaceholderWhenFocused);
editor.setPlaceholder(myHintText);
editor.setShowPlaceholderWhenFocused(myShowPlaceholderWhenFocused);
initOneLineMode(editor);
initOneLineMode(editor);
if (myIsRendererWithSelection) {
((EditorImpl)editor).setPaintSelection(true);
editor.getColorsScheme().setColor(EditorColors.SELECTION_BACKGROUND_COLOR, myRendererBg);
editor.getColorsScheme().setColor(EditorColors.SELECTION_FOREGROUND_COLOR, myRendererFg);
editor.getSelectionModel().setSelection(0, document.getTextLength());
editor.setBackgroundColor(myRendererBg);
}
if (myIsRendererWithSelection) {
((EditorImpl)editor).setPaintSelection(true);
editor.getColorsScheme().setColor(EditorColors.SELECTION_BACKGROUND_COLOR, myRendererBg);
editor.getColorsScheme().setColor(EditorColors.SELECTION_FOREGROUND_COLOR, myRendererFg);
editor.getSelectionModel().setSelection(0, document.getTextLength());
editor.setBackgroundColor(myRendererBg);
}
for (EditorSettingsProvider provider : mySettingsProviders) {
provider.customizeSettings(editor);
}
for (EditorSettingsProvider provider : mySettingsProviders) {
provider.customizeSettings(editor);
}
});
return editor;
}

View File

@@ -16,6 +16,7 @@
package com.intellij.util.textCompletion;
import com.intellij.codeInsight.AutoPopupController;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.editor.SpellCheckingEditorCustomizationProvider;
import com.intellij.openapi.editor.ex.EditorEx;
import com.intellij.openapi.fileTypes.PlainTextLanguage;
@@ -65,8 +66,12 @@ public class TextFieldWithCompletion extends LanguageTextField {
@Override
protected @NotNull EditorEx createEditor() {
EditorEx editor = super.createEditor();
EditorCustomization disableSpellChecking = SpellCheckingEditorCustomizationProvider.getInstance().getDisabledCustomization();
if (disableSpellChecking != null) disableSpellChecking.customize(editor);
ReadAction.run(() -> {
EditorCustomization disableSpellChecking = SpellCheckingEditorCustomizationProvider.getInstance().getDisabledCustomization();
if (disableSpellChecking != null) {
disableSpellChecking.customize(editor);
}
});
editor.putUserData(AutoPopupController.ALWAYS_AUTO_POPUP, myForceAutoPopup);
if (myShowHint) {

View File

@@ -2,6 +2,8 @@
package org.intellij.plugins.markdown.editor.tables.ui
import com.intellij.codeInsight.daemon.impl.InlayHintsPassFactory
import com.intellij.openapi.application.ReadAction
import com.intellij.openapi.application.readAction
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.editor.event.EditorFactoryEvent
import com.intellij.openapi.editor.event.EditorFactoryListener
@@ -17,7 +19,7 @@ import org.intellij.plugins.markdown.lang.MarkdownFileType
internal class MarkdownInlayUpdateOnSoftWrapListener: EditorFactoryListener {
override fun editorCreated(event: EditorFactoryEvent) {
val editor = event.editor
if (isMarkdownEditor(editor)) {
if (ReadAction.compute<Boolean, Nothing> { isMarkdownEditor(editor) }) {
val softWrapModel = (editor.softWrapModel as? SoftWrapModelEx) ?: return
softWrapModel.addSoftWrapChangeListener(object : SoftWrapChangeListener {
override fun softWrapsChanged() {

View File

@@ -9,6 +9,8 @@ import com.intellij.codeInspection.LocalInspectionTool;
import com.intellij.codeInspection.ex.InspectionProfileImpl;
import com.intellij.codeInspection.ex.InspectionProfileWrapper;
import com.intellij.codeInspection.ex.LocalInspectionToolWrapper;
import com.intellij.execution.dashboard.actions.RunAction;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.editor.ex.EditorEx;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiDocumentManager;
@@ -71,7 +73,7 @@ public class SpellCheckingEditorCustomization extends SimpleEditorCustomization
return;
}
PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument());
PsiFile file = ReadAction.compute(() -> PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()));
if (file == null) {
return;
}

View File

@@ -14,6 +14,7 @@ import com.intellij.lang.xhtml.XHTMLLanguage;
import com.intellij.lang.xml.XMLLanguage;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.command.CommandEvent;
import com.intellij.openapi.command.CommandListener;
import com.intellij.openapi.command.undo.UndoManager;
@@ -124,7 +125,7 @@ public final class XmlTagNameSynchronizer implements EditorFactoryListener {
public static class MyEditorFactoryListener implements EditorFactoryListener {
@Override
public void editorCreated(@NotNull EditorFactoryEvent event) {
createSynchronizerFor(event.getEditor());
ReadAction.compute(() -> { createSynchronizerFor(event.getEditor()); return null; });
}
}