mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 14:23:28 +07:00
IJPL-796 AsyncFileEditorProvider is DumbAware
GitOrigin-RevId: d7413d9838a802c6e099b4a649f718f850fed200
This commit is contained in:
committed by
intellij-monorepo-bot
parent
c389b99142
commit
989b64cd22
@@ -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.
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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) &&
|
||||
|
||||
Reference in New Issue
Block a user