From 90fa33fb113dde6a7f19bfe4a3e0448b3084ea70 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Mon, 31 Jul 2023 21:26:58 +0300 Subject: [PATCH] remove "fileEditorProvider preloading" GitOrigin-RevId: 8cf5d7a0f239f16998eca747e9cbb6ea2049708c --- .../impl/FileEditorProviderManagerImpl.kt | 34 +++++++++++++------ .../project/impl/ProjectFrameAllocator.kt | 6 ---- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorProviderManagerImpl.kt b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorProviderManagerImpl.kt index fe0e34b238fa..2ac39c7b07c7 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorProviderManagerImpl.kt +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorProviderManagerImpl.kt @@ -17,6 +17,7 @@ import com.intellij.openapi.fileEditor.FileEditorPolicy import com.intellij.openapi.fileEditor.FileEditorProvider import com.intellij.openapi.fileEditor.WeighedFileEditorProvider import com.intellij.openapi.fileEditor.ex.FileEditorProviderManager +import com.intellij.openapi.fileTypes.FileType import com.intellij.openapi.fileTypes.FileTypeRegistry import com.intellij.openapi.project.DumbService import com.intellij.openapi.project.Project @@ -53,8 +54,9 @@ class FileEditorProviderManagerImpl : FileEditorProviderManager, FileDocumentManager.getInstance().getDocument(file) != null } } + val fileType = lazy { file.fileType } for (item in FileEditorProvider.EP_FILE_EDITOR_PROVIDER.filterableLazySequence()) { - if (item.isDocumentRequired && !hasDocument) { + if (!isAcceptedByFileType(item = item, fileType = fileType, file = file) || (item.isDocumentRequired && !hasDocument)) { continue } @@ -88,7 +90,7 @@ class FileEditorProviderManagerImpl : FileEditorProviderManager, var hasHighPriorityEditors = false val suppressors = FileEditorProviderSuppressor.EP_NAME.extensionList - val fileType by lazy { file.fileType } + val fileType = lazy { file.fileType } val sharedProviders = coroutineScope { var hasDocument: Boolean? = null @@ -96,14 +98,8 @@ class FileEditorProviderManagerImpl : FileEditorProviderManager, FileEditorProvider.EP_FILE_EDITOR_PROVIDER.filterableLazySequence().map { item -> async { try { - val providerFileTypeName = item.getCustomAttribute("fileType") - // VcsLogFileType is not registered in FileTypeRegistry - we should check also by name - if (providerFileTypeName != null && fileType.name != providerFileTypeName) { - val fileTypeRegistry = FileTypeRegistry.getInstance() - val providerFileType = fileTypeRegistry.findFileTypeByName(providerFileTypeName) - if (providerFileType == null || !fileTypeRegistry.isFileOfType(file, providerFileType)) { - return@async null - } + if (!isAcceptedByFileType(item = item, fileType = fileType, file = file)) { + return@async null } if (item.isDocumentRequired) { @@ -260,6 +256,24 @@ private object MyComparator : Comparator { private val ExtensionPointName.LazyExtension.isDocumentRequired get() = getCustomAttribute("isDocumentRequired").toBoolean() +private val ExtensionPointName.LazyExtension.fileType + get() = getCustomAttribute("fileType") + +private fun isAcceptedByFileType(item: ExtensionPointName.LazyExtension, + fileType: Lazy, + file: VirtualFile): Boolean { + val providerFileTypeName = item.fileType + // VcsLogFileType is not registered in FileTypeRegistry - we should check also by name + if (providerFileTypeName != null && fileType.value.name != providerFileTypeName) { + val fileTypeRegistry = FileTypeRegistry.getInstance() + val providerFileType = fileTypeRegistry.findFileTypeByName(providerFileTypeName) + if (providerFileType == null || !fileTypeRegistry.isFileOfType(file, providerFileType)) { + return false + } + } + return true +} + private fun checkPolicy(provider: FileEditorProvider) { if (provider.policy == FileEditorPolicy.HIDE_DEFAULT_EDITOR && !DumbService.isDumbAware(provider)) { val message = "HIDE_DEFAULT_EDITOR is supported only for DumbAware providers; ${provider.javaClass} is not DumbAware." diff --git a/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectFrameAllocator.kt b/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectFrameAllocator.kt index e7f97b61c0df..9941d0c0be7c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectFrameAllocator.kt +++ b/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectFrameAllocator.kt @@ -23,7 +23,6 @@ import com.intellij.openapi.components.serviceAsync import com.intellij.openapi.components.serviceIfCreated import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.fileEditor.FileEditorManager -import com.intellij.openapi.fileEditor.FileEditorProvider import com.intellij.openapi.fileEditor.TextEditor import com.intellij.openapi.fileEditor.TextEditorWithPreview import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx @@ -183,11 +182,6 @@ internal class ProjectUiFrameAllocator(val options: OpenProjectTask, scheduleInitFrame(rawProjectDeferred = rawProjectDeferred, reopeningEditorJob = reopeningEditorJob, deferredProjectFrameHelper = deferredProjectFrameHelper) - - outOfLoadingScope.launch(CoroutineName("fileEditorProvider preloading") + Dispatchers.IO) { - FileEditorProvider.EP_FILE_EDITOR_PROVIDER.extensionList - } - task(scheduleSaveTemplate(options), projectInitObserver) startOfWaitingForReadyFrame.set(System.nanoTime()) }