diff --git a/platform/analysis-api/src/com/intellij/openapi/fileEditor/ex/StructureViewFileEditorProvider.java b/platform/analysis-api/src/com/intellij/openapi/fileEditor/ex/StructureViewFileEditorProvider.java new file mode 100644 index 000000000000..d5a2a79fb4c0 --- /dev/null +++ b/platform/analysis-api/src/com/intellij/openapi/fileEditor/ex/StructureViewFileEditorProvider.java @@ -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); +} diff --git a/platform/editor-ui-api/src/com/intellij/openapi/fileEditor/FileEditor.java b/platform/editor-ui-api/src/com/intellij/openapi/fileEditor/FileEditor.java index 5f1f7566405c..9daa7fd9501a 100644 --- a/platform/editor-ui-api/src/com/intellij/openapi/fileEditor/FileEditor.java +++ b/platform/editor-ui-api/src/com/intellij/openapi/fileEditor/FileEditor.java @@ -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; } diff --git a/platform/lang-impl/src/com/intellij/ide/impl/StructureViewWrapperImpl.java b/platform/lang-impl/src/com/intellij/ide/impl/StructureViewWrapperImpl.java index d2586f9d8a7f..9a27936cf993 100644 --- a/platform/lang-impl/src/com/intellij/ide/impl/StructureViewWrapperImpl.java +++ b/platform/lang-impl/src/com/intellij/ide/impl/StructureViewWrapperImpl.java @@ -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 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); diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorProvider.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorProvider.java index 1f35fe7b97bd..eaff7793feea 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorProvider.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorProvider.java @@ -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 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