Pull up getComposite() to FileEditorManager ex api

GitOrigin-RevId: baf908d430129998250e5a3d0d5c8a978b9c0994
This commit is contained in:
Dmitry Jemerov
2022-08-24 18:20:53 +00:00
committed by intellij-monorepo-bot
parent 453952ddd7
commit 2e5bde39e9
7 changed files with 50 additions and 23 deletions
@@ -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<FileEditor>, Array<FileEditorProvider>> {
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
}
}
}
}
}
data class TestEditorComposite(val editor: FileEditor, val provider: FileEditorProvider) : EditorCompositeBase() {
override val allEditors: List<FileEditor>
get() = listOf(editor)
override val allProviders: List<FileEditorProvider>
get() = listOf(provider)
override val isPreview: Boolean
get() = false
}
@@ -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<FileEditor>
abstract val allProviders: List<FileEditorProvider>
abstract val isPreview: Boolean
}
@@ -49,6 +49,8 @@ public abstract class FileEditorManagerEx extends FileEditorManager implements B
public abstract @NotNull Pair<FileEditor[], FileEditorProvider[]> 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);
@@ -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<FileEditor @NotNull [], FileEditorProvider @NotNull []> retrofit(@Nullable EditorComposite composite) {
public static @NotNull Pair<FileEditor @NotNull [], FileEditorProvider @NotNull []> retrofit(@Nullable EditorCompositeBase composite) {
if (composite == null) return new Pair<>(FileEditor.EMPTY_ARRAY, FileEditorProvider.EMPTY_ARRAY);
FileEditor[] editors = composite.getAllEditors().toArray(FileEditor.EMPTY_ARRAY);
@@ -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<Elem
FileEditorManagerEx editorManager = FileEditorManagerEx.getInstanceEx(myProject);
Pair<FileEditor[], FileEditorProvider[]> 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<Elem
FileEditor[] editors;
FileEditorProvider[] providers;
if (fileEditor == null || fileEditorProvider == null) {
Pair<FileEditor[], FileEditorProvider[]> 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};
@@ -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()) {
@@ -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;
}