diff --git a/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/TestEditorManagerImpl.kt b/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/TestEditorManagerImpl.kt index b55986982ce4..e1c60ed0652f 100644 --- a/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/TestEditorManagerImpl.kt +++ b/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/TestEditorManagerImpl.kt @@ -17,6 +17,7 @@ import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.EditorFactory import com.intellij.openapi.editor.ex.EditorEx import com.intellij.openapi.fileEditor.* +import com.intellij.openapi.fileEditor.ex.EditorCompositeBase import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx import com.intellij.openapi.fileEditor.ex.FileEditorWithProvider import com.intellij.openapi.fileEditor.impl.text.TextEditorImpl @@ -474,20 +475,17 @@ internal class TestEditorManagerImpl(private val project: Project) : FileEditorM override fun getPreferredFocusedComponent(): JComponent = throw UnsupportedOperationException() override fun getEditorsWithProviders(file: VirtualFile): Pair, Array> { + return EditorComposite.retrofit(getComposite(file)) + } + + override fun getComposite(file: VirtualFile): EditorCompositeBase? { if (!isCurrentlyUnderLocalId) { - val clientManager = clientFileEditorManager - ?: return Pair(FileEditor.EMPTY_ARRAY, FileEditorProvider.EMPTY_ARRAY) - return EditorComposite.retrofit(clientManager.getComposite(file)) + return clientFileEditorManager?.getComposite(file) } - val editorAndProvider = testEditorSplitter.getEditorAndProvider(file) - var fileEditor = FileEditor.EMPTY_ARRAY - var fileEditorProvider = FileEditorProvider.EMPTY_ARRAY - if (editorAndProvider != null) { - fileEditor = arrayOf(editorAndProvider.first) - fileEditorProvider = arrayOf(editorAndProvider.second) + return testEditorSplitter.getEditorAndProvider(file)?.let { + TestEditorComposite(it.first, it.second) } - return Pair(fileEditor, fileEditorProvider) } override fun getWindowSplitCount() = 0 @@ -512,4 +510,13 @@ internal class TestEditorManagerImpl(private val project: Project) : FileEditorM } } } -} \ No newline at end of file +} + +data class TestEditorComposite(val editor: FileEditor, val provider: FileEditorProvider) : EditorCompositeBase() { + override val allEditors: List + get() = listOf(editor) + override val allProviders: List + get() = listOf(provider) + override val isPreview: Boolean + get() = false +} diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/ex/EditorCompositeBase.kt b/platform/platform-impl/src/com/intellij/openapi/fileEditor/ex/EditorCompositeBase.kt new file mode 100644 index 000000000000..c8fa0c436deb --- /dev/null +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/ex/EditorCompositeBase.kt @@ -0,0 +1,12 @@ +// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.openapi.fileEditor.ex + +import com.intellij.openapi.fileEditor.FileEditor +import com.intellij.openapi.fileEditor.FileEditorProvider +import com.intellij.openapi.util.UserDataHolderBase + +abstract class EditorCompositeBase : UserDataHolderBase() { + abstract val allEditors: List + abstract val allProviders: List + abstract val isPreview: Boolean +} diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/ex/FileEditorManagerEx.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/ex/FileEditorManagerEx.java index c0bd0f208288..7cfe518f7372 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/ex/FileEditorManagerEx.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/ex/FileEditorManagerEx.java @@ -49,6 +49,8 @@ public abstract class FileEditorManagerEx extends FileEditorManager implements B public abstract @NotNull Pair getEditorsWithProviders(@NotNull VirtualFile file); + public abstract @Nullable EditorCompositeBase getComposite(@NotNull VirtualFile file); + /** @deprecated use {@link FileEditor#getFile()} instead */ @Deprecated(forRemoval = true) public abstract @Nullable VirtualFile getFile(@NotNull FileEditor editor); diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorComposite.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorComposite.java index 783b9629e23b..fa0c6da7d2ff 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorComposite.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorComposite.java @@ -16,10 +16,7 @@ import com.intellij.openapi.editor.colors.EditorColors; import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.editor.colors.EditorColorsScheme; import com.intellij.openapi.fileEditor.*; -import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx; -import com.intellij.openapi.fileEditor.ex.FileEditorProviderManager; -import com.intellij.openapi.fileEditor.ex.FileEditorWithProvider; -import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory; +import com.intellij.openapi.fileEditor.ex.*; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.*; @@ -57,7 +54,7 @@ import java.util.function.Supplier; * It's a composite what can be pinned in the tabs list or opened as a preview, not concrete file editors. * It also manages the internal UI structure: bottom and top components, panels, labels, actions for navigating between editors it owns. */ -public class EditorComposite extends UserDataHolderBase implements Disposable { +public class EditorComposite extends EditorCompositeBase implements Disposable { private static final Logger LOG = Logger.getInstance(EditorComposite.class); /** @@ -236,6 +233,7 @@ public class EditorComposite extends UserDataHolderBase implements Disposable { } } + @Override public boolean isPreview() { return myPreview; } @@ -313,6 +311,7 @@ public class EditorComposite extends UserDataHolderBase implements Disposable { return getAllEditors().toArray(FileEditor.EMPTY_ARRAY); } + @Override public @NotNull List<@NotNull FileEditor> getAllEditors() { return ContainerUtil.map(getAllEditorsWithProviders(), it -> it.getFileEditor()); } @@ -667,7 +666,7 @@ public class EditorComposite extends UserDataHolderBase implements Disposable { /** * A mapper for old API with arrays and pairs */ - public static @NotNull Pair retrofit(@Nullable EditorComposite composite) { + public static @NotNull Pair retrofit(@Nullable EditorCompositeBase composite) { if (composite == null) return new Pair<>(FileEditor.EMPTY_ARRAY, FileEditorProvider.EMPTY_ARRAY); FileEditor[] editors = composite.getAllEditors().toArray(FileEditor.EMPTY_ARRAY); diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorHistoryManager.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorHistoryManager.java index b92c239277fa..46c0b09f08cf 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorHistoryManager.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorHistoryManager.java @@ -10,6 +10,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.ExtensionPointListener; import com.intellij.openapi.extensions.PluginDescriptor; import com.intellij.openapi.fileEditor.*; +import com.intellij.openapi.fileEditor.ex.EditorCompositeBase; import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx; import com.intellij.openapi.fileEditor.ex.FileEditorWithProvider; import com.intellij.openapi.progress.ProcessCanceledException; @@ -102,9 +103,9 @@ public final class EditorHistoryManager implements PersistentStateComponent editorsWithProviders = editorManager.getEditorsWithProviders(file); - FileEditor[] editors = editorsWithProviders.getFirst(); - FileEditorProvider[] oldProviders = editorsWithProviders.getSecond(); + @Nullable EditorCompositeBase editorComposite = editorManager.getComposite(file); + FileEditor[] editors = editorComposite == null ? FileEditor.EMPTY_ARRAY : editorComposite.getAllEditors().toArray(FileEditor.EMPTY_ARRAY); + FileEditorProvider[] oldProviders = editorComposite == null ? FileEditorProvider.EMPTY_ARRAY : editorComposite.getAllProviders().toArray(FileEditorProvider.EMPTY_ARRAY); LOG.assertTrue(editors.length == oldProviders.length, "Different number of editors and providers"); if (editors.length <= 0 && fallbackEditor != null && fallbackProvider != null) { editors = new FileEditor[] { fallbackEditor }; @@ -159,9 +160,9 @@ public final class EditorHistoryManager implements PersistentStateComponent editorsWithProviders = editorManager.getEditorsWithProviders(file); - editors = editorsWithProviders.getFirst(); - providers = editorsWithProviders.getSecond(); + EditorCompositeBase composite = editorManager.getComposite(file); + editors = composite == null ? FileEditor.EMPTY_ARRAY : composite.getAllEditors().toArray(FileEditor.EMPTY_ARRAY); + providers = composite == null ? FileEditorProvider.EMPTY_ARRAY : composite.getAllProviders().toArray(FileEditorProvider.EMPTY_ARRAY); } else { editors = new FileEditor[] {fileEditor}; diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java index 3967820ef7d7..a8b16a229e9a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java @@ -1595,6 +1595,7 @@ public abstract class FileEditorManagerImpl extends FileEditorManagerEx implemen return result.toArray(FileEditor.EMPTY_ARRAY); } + @Override public @Nullable EditorComposite getComposite(@NotNull VirtualFile file) { ApplicationManager.getApplication().assertIsDispatchThread(); if (!ClientId.isCurrentlyUnderLocalId()) { diff --git a/platform/testFramework/src/com/intellij/mock/Mock.java b/platform/testFramework/src/com/intellij/mock/Mock.java index 81128257fbfc..ea7aee264942 100644 --- a/platform/testFramework/src/com/intellij/mock/Mock.java +++ b/platform/testFramework/src/com/intellij/mock/Mock.java @@ -181,6 +181,11 @@ public class Mock { throw new UnsupportedOperationException(); } + @Override + public @Nullable EditorComposite getComposite(@NotNull VirtualFile file) { + throw new UnsupportedOperationException(); + } + public FileEditorProvider getProvider(FileEditor editor) { return null; }