remove "fileEditorProvider preloading"

GitOrigin-RevId: 8cf5d7a0f239f16998eca747e9cbb6ea2049708c
This commit is contained in:
Vladimir Krivosheev
2023-07-31 21:18:31 +00:00
committed by intellij-monorepo-bot
parent 274e0b3e9b
commit 90fa33fb11
2 changed files with 24 additions and 16 deletions
@@ -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<FileEditorProvider> {
private val ExtensionPointName.LazyExtension<FileEditorProvider>.isDocumentRequired
get() = getCustomAttribute("isDocumentRequired").toBoolean()
private val ExtensionPointName.LazyExtension<FileEditorProvider>.fileType
get() = getCustomAttribute("fileType")
private fun isAcceptedByFileType(item: ExtensionPointName.LazyExtension<FileEditorProvider>,
fileType: Lazy<FileType>,
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."
@@ -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())
}