mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-05 01:50:56 +07:00
[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:
committed by
intellij-monorepo-bot
parent
3dca3897a2
commit
401b758711
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user