[find in files] IJPL-191716 IJ-CR-170341 initialize language extensions for Find settings at startup

(cherry picked from commit dd1b3af1284d03517b7ec1076fa56dc235575e2d)

GitOrigin-RevId: 633e81fad0f3832f61ba3db08322e5eb4552fb04
This commit is contained in:
Vera Petrenkova
2025-07-15 18:07:10 +02:00
committed by intellij-monorepo-bot
parent 3dca3897a2
commit 401b758711
2 changed files with 33 additions and 20 deletions

View File

@@ -1,37 +1,32 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.find.impl
import com.intellij.find.FindBundle
import com.intellij.find.FindSettings
import com.intellij.ide.ApplicationInitializedListener
import com.intellij.ide.rpc.performRpcWithRetries
import com.intellij.openapi.Disposable
import com.intellij.openapi.components.Service
import com.intellij.openapi.components.service
import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.progress.runBlockingCancellable
import com.intellij.platform.ide.progress.ModalTaskOwner
import com.intellij.platform.ide.progress.runWithModalProgressBlocking
import com.intellij.util.ArrayUtil
import com.intellij.util.ui.EDT
import fleet.rpc.client.RpcTimeoutException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
private val LOG = logger<LangFindSettingsImpl>()
internal class LangFindSettingsImpl: FindSettingsImpl() {
internal class LangFindSettingsImpl: FindSettingsImpl(), Disposable {
private var languageExtensionsLoadingJob: Job? = null
override fun noStateLoaded() {
if (EDT.isCurrentThreadEdt()) {
runWithModalProgressBlocking(ModalTaskOwner.guess(), FindBundle.message("find.lang.extensions.loading")) {
loadExtensions()
}
} else {
runBlockingCancellable {
loadExtensions()
}
languageExtensionsLoadingJob = FindSettingsCoroutineScopeProvider.getInstance().coroutineScope.launch {
loadExtensions()
}
}
private suspend fun loadExtensions() {
val extensions =
try {
val extensions = LOG.performRpcWithRetries {
IdeLanguageCustomizationApi.getInstance().getPrimaryIdeLanguagesExtensions().toMutableSet()
} catch (e: RpcTimeoutException) {
LOG.error("Cannot get primary IDE languages extensions for FindInProjectSettingsBase initialization", e)
return
}
if (extensions.contains("java")) {
extensions.add("properties")
@@ -55,4 +50,21 @@ internal class LangFindSettingsImpl: FindSettingsImpl() {
FindInProjectSettingsBase.addRecentStringToList("*." + extensionsArray[i], recentFileMasks)
}
}
override fun dispose() {
languageExtensionsLoadingJob?.cancel()
}
}
@Service(Service.Level.APP)
private class FindSettingsCoroutineScopeProvider(val coroutineScope: CoroutineScope) {
companion object {
fun getInstance(): FindSettingsCoroutineScopeProvider = service()
}
}
private class FindSettingsInitializer : ApplicationInitializedListener {
override suspend fun execute() {
FindSettings.getInstance()
}
}

View File

@@ -189,6 +189,7 @@
<applicationService serviceInterface="com.intellij.find.FindSettings"
serviceImplementation="com.intellij.find.impl.LangFindSettingsImpl"/>
<applicationInitializedListener implementation="com.intellij.find.impl.FindSettingsInitializer"/>
<projectService serviceInterface="com.intellij.find.FindInProjectSettings"
serviceImplementation="com.intellij.find.impl.FindInProjectRecents"/>