IJPL-796 AsyncFileEditorProvider is DumbAware

GitOrigin-RevId: d7413d9838a802c6e099b4a649f718f850fed200
This commit is contained in:
Vladimir Krivosheev
2024-06-13 12:56:26 +02:00
committed by intellij-monorepo-bot
parent c389b99142
commit 989b64cd22
6 changed files with 24 additions and 36 deletions

View File

@@ -4,6 +4,7 @@ package com.intellij.openapi.fileEditor
import com.intellij.openapi.application.EDT
import com.intellij.openapi.application.readAction
import com.intellij.openapi.editor.Document
import com.intellij.openapi.project.DumbAware
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.util.concurrency.annotations.RequiresBlockingContext
@@ -14,7 +15,7 @@ import kotlinx.coroutines.withContext
import org.jetbrains.annotations.ApiStatus.Experimental
import org.jetbrains.annotations.ApiStatus.Internal
interface AsyncFileEditorProvider : FileEditorProvider {
interface AsyncFileEditorProvider : FileEditorProvider, DumbAware {
/**
* This method is intended to be called from background thread. It should perform all time-consuming tasks required to build an editor,
* and return a builder instance that will be called in EDT to create UI for the editor.

View File

@@ -1,4 +1,4 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.openapi.fileEditor;
import com.intellij.codeHighlighting.BackgroundEditorHighlighter;
@@ -29,7 +29,6 @@ import com.intellij.ui.JBSplitter;
import com.intellij.ui.OnePixelSplitter;
import com.intellij.ui.components.JBLayeredPane;
import com.intellij.util.Alarm;
import com.intellij.util.ObjectUtils;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.StartupUiUtil;
import com.intellij.util.ui.UIUtil;
@@ -53,10 +52,7 @@ import java.util.function.Supplier;
import static com.intellij.openapi.actionSystem.ActionPlaces.TEXT_EDITOR_WITH_PREVIEW;
/**
* Two panel editor with three states: Editor, Preview and Editor with Preview.
* Based on SplitFileEditor by Valentin Fondaratov
*
* @author Konstantin Bulenkov
* Two-panel editor with three states: Editor, Preview and Editor with Preview.
*/
public class TextEditorWithPreview extends UserDataHolderBase implements TextEditor {
private static final Key<TextEditorWithPreview> PARENT_SPLIT_EDITOR_KEY = Key.create("parentSplit");
@@ -68,7 +64,7 @@ public class TextEditorWithPreview extends UserDataHolderBase implements TextEdi
private boolean myIsVerticalSplit;
private JComponent myComponent;
private JBSplitter mySplitter;
private SplitEditorToolbar myToolbarWrapper;
private SplitEditorToolbar toolbarWrapper;
private final @Nls String myName;
public static final Key<Layout> DEFAULT_LAYOUT_FOR_FILE = Key.create("TextEditorWithPreview.DefaultLayout");
@@ -80,7 +76,8 @@ public class TextEditorWithPreview extends UserDataHolderBase implements TextEdi
myEditor = editor;
myPreview = preview;
myName = editorName;
myDefaultLayout = ObjectUtils.notNull(getLayoutForFile(myEditor.getFile()), defaultLayout);
TextEditorWithPreview.Layout value = getLayoutForFile(myEditor.getFile());
myDefaultLayout = value == null ? defaultLayout : value;
myIsVerticalSplit = isVerticalSplit;
editor.putUserData(PARENT_SPLIT_EDITOR_KEY, this);
preview.putUserData(PARENT_SPLIT_EDITOR_KEY, this);
@@ -150,7 +147,7 @@ public class TextEditorWithPreview extends UserDataHolderBase implements TextEdi
mySplitter.setDividerWidth(ExperimentalUI.isNewUI() ? 1 : 2); // We're using OnePixelSplitter, but it actually supports wider dividers.
mySplitter.getDivider().setBackground(JBColor.lazy(() -> Objects.requireNonNullElse(EditorColorsManager.getInstance().getGlobalScheme().getColor(EditorColors.PREVIEW_BORDER_COLOR), UIUtil.getPanelBackground())));
myToolbarWrapper = createSplitEditorToolbar(mySplitter);
toolbarWrapper = createSplitEditorToolbar(mySplitter);
if (myLayout == null) {
String lastUsed = PropertiesComponent.getInstance().getValue(getLayoutPropertyName());
@@ -158,16 +155,16 @@ public class TextEditorWithPreview extends UserDataHolderBase implements TextEdi
}
adjustEditorsVisibility();
BorderLayoutPanel panel = JBUI.Panels.simplePanel(mySplitter).addToTop(myToolbarWrapper);
BorderLayoutPanel panel = JBUI.Panels.simplePanel(mySplitter).addToTop(toolbarWrapper);
if (!isShowFloatingToolbar()) {
myComponent = panel;
return myComponent;
}
myToolbarWrapper.setVisible(false);
toolbarWrapper.setVisible(false);
MyEditorLayeredComponentWrapper layeredPane = new MyEditorLayeredComponentWrapper(panel);
myComponent = layeredPane;
ActionGroup toolbarGroup = myToolbarWrapper.getRightToolbar().getActionGroup();
ActionGroup toolbarGroup = toolbarWrapper.getRightToolbar().getActionGroup();
LayoutActionsFloatingToolbar toolbar = new LayoutActionsFloatingToolbar(myComponent, toolbarGroup, this);
layeredPane.add(panel, JLayeredPane.DEFAULT_LAYER);
myComponent.add(toolbar, JLayeredPane.POPUP_LAYER);
@@ -176,7 +173,7 @@ public class TextEditorWithPreview extends UserDataHolderBase implements TextEdi
}
protected boolean isShowFloatingToolbar() {
return Registry.is("ide.text.editor.with.preview.show.floating.toolbar") && myToolbarWrapper.isLeftToolbarEmpty();
return Registry.is("ide.text.editor.with.preview.show.floating.toolbar") && toolbarWrapper.isLeftToolbarEmpty();
}
protected boolean isShowActionsInTabs() {
@@ -257,7 +254,7 @@ public class TextEditorWithPreview extends UserDataHolderBase implements TextEdi
private void invalidateLayout() {
adjustEditorsVisibility();
myToolbarWrapper.refresh();
toolbarWrapper.refresh();
myComponent.repaint();
final JComponent focusComponent = getPreferredFocusedComponent();
@@ -582,7 +579,7 @@ public class TextEditorWithPreview extends UserDataHolderBase implements TextEdi
if (myIsVerticalSplit == isVerticalSplit) return;
myIsVerticalSplit = isVerticalSplit;
myToolbarWrapper.refresh();
toolbarWrapper.refresh();
mySplitter.setOrientation(myIsVerticalSplit);
myComponent.repaint();
}

View File

@@ -5,7 +5,6 @@ import com.intellij.openapi.editor.Document
import com.intellij.openapi.fileEditor.TextEditorWithPreview.MyFileEditorState
import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider
import com.intellij.openapi.progress.runBlockingCancellable
import com.intellij.openapi.project.DumbAware
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import org.jdom.Attribute
@@ -19,7 +18,7 @@ private const val SPLIT_LAYOUT = "split_layout"
private const val VERTICAL_SPLIT = "is_vertical_split"
@ApiStatus.Experimental
abstract class TextEditorWithPreviewProvider(private val previewProvider: FileEditorProvider): AsyncFileEditorProvider, DumbAware {
abstract class TextEditorWithPreviewProvider(private val previewProvider: FileEditorProvider): AsyncFileEditorProvider {
private val mainProvider: TextEditorProvider = TextEditorProvider.getInstance()
private val editorTypeId = createSplitEditorProviderTypeId(mainProvider.editorTypeId, previewProvider.editorTypeId)
@@ -127,9 +126,7 @@ abstract class TextEditorWithPreviewProvider(private val previewProvider: FileEd
return TextEditorWithPreview(firstEditor, secondEditor)
}
override fun getPolicy(): FileEditorPolicy {
return FileEditorPolicy.HIDE_DEFAULT_EDITOR
}
override fun getPolicy(): FileEditorPolicy = FileEditorPolicy.HIDE_DEFAULT_EDITOR
}
private fun createEditorBuilder(

View File

@@ -1,4 +1,4 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.editorconfig.configmanagement.editor;
import com.intellij.application.options.CodeStyle;
@@ -19,7 +19,6 @@ import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeRegistry;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.text.StringUtil;
@@ -35,7 +34,7 @@ import org.jetbrains.annotations.Nullable;
import java.io.IOException;
import java.util.Set;
final class EditorConfigEditorProvider implements AsyncFileEditorProvider, DumbAware {
final class EditorConfigEditorProvider implements AsyncFileEditorProvider {
private static final String EDITOR_TYPE_ID = "org.editorconfig.configmanagement.editor";
static final int MAX_PREVIEW_LENGTH = 10000;

View File

@@ -1,3 +1,4 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.intellij.plugins.markdown.ui.preview
import com.intellij.openapi.fileEditor.FileEditor
@@ -10,7 +11,7 @@ import org.intellij.plugins.markdown.lang.hasMarkdownType
import org.jetbrains.annotations.ApiStatus
@ApiStatus.Internal
class MarkdownPreviewFileEditorProvider: WeighedFileEditorProvider() {
class MarkdownPreviewFileEditorProvider : WeighedFileEditorProvider() {
override fun accept(project: Project, file: VirtualFile): Boolean {
if (!MarkdownHtmlPanelProvider.hasAvailableProviders()) {
return false
@@ -18,15 +19,9 @@ class MarkdownPreviewFileEditorProvider: WeighedFileEditorProvider() {
return file.hasMarkdownType() || isMarkdownScratchFile(project, file)
}
override fun createEditor(project: Project, file: VirtualFile): FileEditor {
return MarkdownPreviewFileEditor(project, file)
}
override fun createEditor(project: Project, file: VirtualFile): FileEditor = MarkdownPreviewFileEditor(project, file)
override fun getEditorTypeId(): String {
return "markdown-preview-editor"
}
override fun getEditorTypeId(): String = "markdown-preview-editor"
override fun getPolicy(): FileEditorPolicy {
return FileEditorPolicy.PLACE_AFTER_DEFAULT_EDITOR
}
override fun getPolicy(): FileEditorPolicy = FileEditorPolicy.PLACE_AFTER_DEFAULT_EDITOR
}

View File

@@ -7,7 +7,6 @@ import com.intellij.openapi.editor.Document
import com.intellij.openapi.fileEditor.*
import com.intellij.openapi.fileTypes.FileTypeRegistry
import com.intellij.openapi.module.ModuleUtilCore
import com.intellij.openapi.project.DumbAware
import com.intellij.openapi.project.Project
import com.intellij.openapi.roots.ProjectFileIndex
import com.intellij.openapi.vfs.VirtualFile
@@ -20,7 +19,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.jdom.Element
private class UIFormEditorProvider : FileEditorProvider, DumbAware, AsyncFileEditorProvider {
private class UIFormEditorProvider : FileEditorProvider, AsyncFileEditorProvider {
override fun accept(project: Project, file: VirtualFile): Boolean {
SlowOperations.knownIssue("IDEA-307701, EA-762786").use {
return FileTypeRegistry.getInstance().isFileOfType(file, GuiFormFileType.INSTANCE) &&