editor: introduce API for StructureViewBuilder creation without FileEditor

Follow-up: 4bff20b5ba

GitOrigin-RevId: c589ce26e73426af36bd27051008d931845a6cf0
This commit is contained in:
Aleksey Pivovarov
2022-12-05 13:45:43 +00:00
committed by intellij-monorepo-bot
parent b3fcc71f0c
commit ff2fb768ed
4 changed files with 35 additions and 6 deletions
@@ -0,0 +1,17 @@
// 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.ide.structureView.StructureViewBuilder;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* If {@link FileEditor} implements this interface it be used instead of
* creating a temp FileEditor just to call {@link FileEditor#getStructureViewBuilder()}.
*/
public interface StructureViewFileEditorProvider {
@Nullable StructureViewBuilder getStructureViewBuilder(@NotNull Project project, @NotNull VirtualFile file);
}
@@ -121,6 +121,9 @@ public interface FileEditor extends UserDataHolder, Disposable {
return null;
}
/**
* @see com.intellij.openapi.fileEditor.impl.text.StructureViewFileEditorProvider
*/
default @Nullable StructureViewBuilder getStructureViewBuilder() {
return null;
}
@@ -20,9 +20,9 @@ import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.FileEditorProvider;
import com.intellij.openapi.fileEditor.ex.FileEditorProviderManager;
import com.intellij.openapi.fileEditor.ex.StructureViewFileEditorProvider;
import com.intellij.openapi.fileEditor.impl.EditorWindow;
import com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl;
import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.module.ModuleUtilCore;
@@ -470,8 +470,8 @@ public final class StructureViewWrapperImpl implements StructureViewWrapper, Dis
List<FileEditorProvider> providers = FileEditorProviderManager.getInstance().getProviderList(myProject, file);
FileEditorProvider provider = providers.size() == 0 ? null : providers.get(0);
if (provider == null) return null;
if (provider instanceof TextEditorProvider) {
return StructureViewBuilder.PROVIDER.getStructureViewBuilder(file.getFileType(), file, myProject);
if (provider instanceof StructureViewFileEditorProvider) {
return ((StructureViewFileEditorProvider)provider).getStructureViewBuilder(myProject, file);
}
FileEditor editor = provider.createEditor(myProject, file);
@@ -8,6 +8,7 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.*;
import com.intellij.openapi.editor.ex.util.EditorUtil;
import com.intellij.openapi.fileEditor.*;
import com.intellij.openapi.fileEditor.ex.StructureViewFileEditorProvider;
import com.intellij.openapi.fileEditor.impl.DefaultPlatformFileEditorProvider;
import com.intellij.openapi.fileTypes.BinaryFileTypeDecompilers;
import com.intellij.openapi.fileTypes.FileType;
@@ -35,8 +36,11 @@ import java.util.Arrays;
import java.util.List;
import java.util.Objects;
public class TextEditorProvider
implements DefaultPlatformFileEditorProvider, TextBasedFileEditorProvider, QuickDefinitionProvider, DumbAware {
public class TextEditorProvider implements DefaultPlatformFileEditorProvider,
TextBasedFileEditorProvider,
StructureViewFileEditorProvider,
QuickDefinitionProvider,
DumbAware {
protected static final Logger LOG = Logger.getInstance(TextEditorProvider.class);
private static final Key<TextEditor> TEXT_EDITOR_KEY = Key.create("textEditor");
@@ -277,6 +281,11 @@ public class TextEditorProvider
});
}
@Override
public @Nullable StructureViewBuilder getStructureViewBuilder(@NotNull Project project, @NotNull VirtualFile file) {
return StructureViewBuilder.PROVIDER.getStructureViewBuilder(file.getFileType(), file, project);
}
protected class EditorWrapper extends UserDataHolderBase implements TextEditor {
private final Editor myEditor;
@@ -312,7 +321,7 @@ public class TextEditorProvider
final Project project = myEditor.getProject();
if (project == null) return null;
return StructureViewBuilder.PROVIDER.getStructureViewBuilder(file.getFileType(), file, project);
return TextEditorProvider.this.getStructureViewBuilder(project, file);
}
@Override