[scopes] IJ-CR-168030 create modules intellij.platform.scopes and intellij.platform.scopes.backend

move SearchScopeData to scopes module
(cherry picked from commit 1e18ec6d51426d8946693e416519e1e80f5b36d0)

GitOrigin-RevId: a05ee31c9989a732d514a8aa3eb3fd7d1d209855
This commit is contained in:
Vera Petrenkova
2025-06-24 17:08:41 +02:00
committed by intellij-monorepo-bot
parent 71018ebb56
commit 88830c6ae4
38 changed files with 235 additions and 70 deletions

2
.idea/modules.xml generated
View File

@@ -916,6 +916,8 @@
<module fileurl="file://$PROJECT_DIR$/platform/runtime/product/tests/intellij.platform.runtime.product.tests.iml" filepath="$PROJECT_DIR$/platform/runtime/product/tests/intellij.platform.runtime.product.tests.iml" /> <module fileurl="file://$PROJECT_DIR$/platform/runtime/product/tests/intellij.platform.runtime.product.tests.iml" filepath="$PROJECT_DIR$/platform/runtime/product/tests/intellij.platform.runtime.product.tests.iml" />
<module fileurl="file://$PROJECT_DIR$/platform/runtime/repository/intellij.platform.runtime.repository.iml" filepath="$PROJECT_DIR$/platform/runtime/repository/intellij.platform.runtime.repository.iml" /> <module fileurl="file://$PROJECT_DIR$/platform/runtime/repository/intellij.platform.runtime.repository.iml" filepath="$PROJECT_DIR$/platform/runtime/repository/intellij.platform.runtime.repository.iml" />
<module fileurl="file://$PROJECT_DIR$/platform/runtime/repository/tests/intellij.platform.runtime.repository.tests.iml" filepath="$PROJECT_DIR$/platform/runtime/repository/tests/intellij.platform.runtime.repository.tests.iml" /> <module fileurl="file://$PROJECT_DIR$/platform/runtime/repository/tests/intellij.platform.runtime.repository.tests.iml" filepath="$PROJECT_DIR$/platform/runtime/repository/tests/intellij.platform.runtime.repository.tests.iml" />
<module fileurl="file://$PROJECT_DIR$/platform/scopes/intellij.platform.scopes.iml" filepath="$PROJECT_DIR$/platform/scopes/intellij.platform.scopes.iml" />
<module fileurl="file://$PROJECT_DIR$/platform/scopes/backend/intellij.platform.scopes.backend.iml" filepath="$PROJECT_DIR$/platform/scopes/backend/intellij.platform.scopes.backend.iml" />
<module fileurl="file://$PROJECT_DIR$/platform/script-debugger/backend/intellij.platform.scriptDebugger.backend.iml" filepath="$PROJECT_DIR$/platform/script-debugger/backend/intellij.platform.scriptDebugger.backend.iml" /> <module fileurl="file://$PROJECT_DIR$/platform/script-debugger/backend/intellij.platform.scriptDebugger.backend.iml" filepath="$PROJECT_DIR$/platform/script-debugger/backend/intellij.platform.scriptDebugger.backend.iml" />
<module fileurl="file://$PROJECT_DIR$/platform/script-debugger/protocol/protocol-reader-runtime/intellij.platform.scriptDebugger.protocolReaderRuntime.iml" filepath="$PROJECT_DIR$/platform/script-debugger/protocol/protocol-reader-runtime/intellij.platform.scriptDebugger.protocolReaderRuntime.iml" /> <module fileurl="file://$PROJECT_DIR$/platform/script-debugger/protocol/protocol-reader-runtime/intellij.platform.scriptDebugger.protocolReaderRuntime.iml" filepath="$PROJECT_DIR$/platform/script-debugger/protocol/protocol-reader-runtime/intellij.platform.scriptDebugger.protocolReaderRuntime.iml" />
<module fileurl="file://$PROJECT_DIR$/platform/script-debugger/debugger-ui/intellij.platform.scriptDebugger.ui.iml" filepath="$PROJECT_DIR$/platform/script-debugger/debugger-ui/intellij.platform.scriptDebugger.ui.iml" /> <module fileurl="file://$PROJECT_DIR$/platform/script-debugger/debugger-ui/intellij.platform.scriptDebugger.ui.iml" filepath="$PROJECT_DIR$/platform/script-debugger/debugger-ui/intellij.platform.scriptDebugger.ui.iml" />

View File

@@ -16,7 +16,6 @@ jvm_library(
"//platform/testFramework", "//platform/testFramework",
"//platform/util/coroutines", "//platform/util/coroutines",
"//platform/platform-impl/eel:ide-impl-wsl", "//platform/platform-impl/eel:ide-impl-wsl",
"//platform/execution",
] ]
) )
### auto-generated section `build intellij.platform.ijent.community.testFramework` end ### auto-generated section `build intellij.platform.ijent.community.testFramework` end

View File

@@ -22,6 +22,7 @@ java_library(
"//spellchecker/xml", "//spellchecker/xml",
"//platform/find/backend", "//platform/find/backend",
"//platform/managed-cache/managed.cache.backend", "//platform/managed-cache/managed.cache.backend",
"//platform/scopes/backend",
] ]
) )
### auto-generated section `build intellij.platform.backend.main` end ### auto-generated section `build intellij.platform.backend.main` end

View File

@@ -22,5 +22,6 @@
<orderEntry type="module" module-name="intellij.spellchecker.xml" scope="RUNTIME" /> <orderEntry type="module" module-name="intellij.spellchecker.xml" scope="RUNTIME" />
<orderEntry type="module" module-name="intellij.platform.find.backend" scope="RUNTIME" /> <orderEntry type="module" module-name="intellij.platform.find.backend" scope="RUNTIME" />
<orderEntry type="module" module-name="intellij.platform.managed.cache.backend" scope="RUNTIME" /> <orderEntry type="module" module-name="intellij.platform.managed.cache.backend" scope="RUNTIME" />
<orderEntry type="module" module-name="intellij.platform.scopes.backend" scope="RUNTIME" />
</component> </component>
</module> </module>

View File

@@ -13,6 +13,9 @@
<module name="intellij.platform.project.backend"/> <module name="intellij.platform.project.backend"/>
<module name="intellij.platform.progress.backend"/> <module name="intellij.platform.progress.backend"/>
<module name="intellij.platform.scopes"/>
<module name="intellij.platform.scopes.backend"/>
<!-- todo navbar is not essential--> <!-- todo navbar is not essential-->
<module name="intellij.platform.navbar"/> <module name="intellij.platform.navbar"/>
<module name="intellij.platform.navbar.backend"/> <module name="intellij.platform.navbar.backend"/>

View File

@@ -0,0 +1,28 @@
### auto-generated section `build intellij.platform.scopes` start
load("@rules_jvm//:jvm.bzl", "jvm_library", "jvm_resources")
jvm_resources(
name = "scopes_resources",
files = glob(["resources/**/*"]),
strip_prefix = "resources"
)
jvm_library(
name = "scopes",
module_name = "intellij.platform.scopes",
visibility = ["//visibility:public"],
srcs = glob(["src/**/*.kt", "src/**/*.java"], allow_empty = True),
deps = [
"@lib//:kotlin-stdlib",
"//platform/util",
"//platform/core-api:core",
"//platform/core-ui",
"//platform/ide-core",
"//platform/platform-impl/rpc",
"@lib//:kotlinx-serialization-core",
"@lib//:kotlinx-serialization-json",
"//platform/lang-impl",
],
runtime_deps = [":scopes_resources"]
)
### auto-generated section `build intellij.platform.scopes` end

View File

@@ -0,0 +1,8 @@
c:com.intellij.ide.util.scopeChooser.ScopeDescriptor
- com.intellij.openapi.util.ColoredItem
- <init>(com.intellij.psi.search.SearchScope):V
- getColor():java.awt.Color
- getDisplayName():java.lang.String
- getIcon():javax.swing.Icon
- getScope():com.intellij.psi.search.SearchScope
- scopeEquals(com.intellij.psi.search.SearchScope):Z

View File

@@ -0,0 +1,21 @@
### auto-generated section `build intellij.platform.scopes.backend` start
load("@rules_jvm//:jvm.bzl", "jvm_library", "jvm_resources")
jvm_resources(
name = "backend_resources",
files = glob(["resources/**/*"]),
strip_prefix = "resources"
)
jvm_library(
name = "backend",
module_name = "intellij.platform.scopes.backend",
visibility = ["//visibility:public"],
srcs = glob(["src/**/*.kt", "src/**/*.java"], allow_empty = True),
deps = ["@lib//:kotlin-stdlib"],
runtime_deps = [
":backend_resources",
"//platform/backend",
]
)
### auto-generated section `build intellij.platform.scopes.backend` end

View File

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="kotlin-language" name="Kotlin">
<configuration version="5" platform="JVM 17" allPlatforms="JVM [17]" useProjectSettings="false">
<compilerSettings>
<option name="additionalArguments" value="-Xjvm-default=all" />
</compilerSettings>
<compilerArguments>
<stringArguments>
<stringArg name="jvmTarget" arg="17" />
<stringArg name="apiVersion" arg="2.2" />
<stringArg name="languageVersion" arg="2.2" />
</stringArguments>
<arrayArguments>
<arrayArg name="pluginClasspaths">
<args>$KOTLIN_BUNDLED$/lib/kotlinx-serialization-compiler-plugin.jar</args>
</arrayArg>
<arrayArg name="pluginOptions" />
</arrayArguments>
</compilerArguments>
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" packagePrefix="com.intellij.platform.scopes.backend" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="kotlin-stdlib" level="project" />
<orderEntry type="module" module-name="intellij.platform.backend" scope="RUNTIME" />
</component>
</module>

View File

@@ -0,0 +1,6 @@
<idea-plugin>
<dependencies>
<module name="intellij.platform.backend"/>
<module name="intellij.platform.scopes"/>
</dependencies>
</idea-plugin>

View File

@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="kotlin-language" name="Kotlin">
<configuration version="5" platform="JVM 17" allPlatforms="JVM [17]" useProjectSettings="false">
<compilerSettings>
<option name="additionalArguments" value="-Xjvm-default=all" />
</compilerSettings>
<compilerArguments>
<stringArguments>
<stringArg name="jvmTarget" arg="17" />
<stringArg name="apiVersion" arg="2.2" />
<stringArg name="languageVersion" arg="2.2" />
</stringArguments>
<arrayArguments>
<arrayArg name="pluginClasspaths">
<args>$KOTLIN_BUNDLED$/lib/kotlinx-serialization-compiler-plugin.jar</args>
</arrayArg>
<arrayArg name="pluginOptions" />
</arrayArguments>
</compilerArguments>
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="kotlin-stdlib" level="project" />
<orderEntry type="module" module-name="intellij.platform.util" />
<orderEntry type="module" module-name="intellij.platform.core" />
<orderEntry type="module" module-name="intellij.platform.core.ui" />
<orderEntry type="module" module-name="intellij.platform.ide.core" />
<orderEntry type="module" module-name="intellij.platform.ide.rpc" />
<orderEntry type="library" name="kotlinx-serialization-core" level="project" />
<orderEntry type="library" name="kotlinx-serialization-json" level="project" />
<orderEntry type="module" module-name="intellij.platform.lang.impl" />
</component>
</module>

View File

@@ -0,0 +1,2 @@
<idea-plugin>
</idea-plugin>

View File

@@ -0,0 +1,34 @@
// 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.platform.scopes
import com.intellij.ide.ui.colors.ColorId
import com.intellij.ide.ui.colors.rpcId
import com.intellij.ide.ui.icons.IconId
import com.intellij.ide.ui.icons.rpcId
import com.intellij.ide.util.scopeChooser.ScopeDescriptor
import com.intellij.ide.util.scopeChooser.ScopeSeparator
import kotlinx.serialization.Serializable
import org.jetbrains.annotations.ApiStatus
import org.jetbrains.annotations.Nls
@ApiStatus.Internal
@Serializable
class SearchScopeData(val scopeId: String, val name: @Nls String, val iconId: IconId?, val colorId: ColorId?, val isSeparator: Boolean) {
companion object {
fun from(descriptor: ScopeDescriptor, scopeId: String): SearchScopeData? {
val name = descriptor.displayName ?: return null
return SearchScopeData(scopeId,
name,
descriptor.icon?.rpcId(),
descriptor.color?.rpcId(),
descriptor is ScopeSeparator)
}
}
}
@ApiStatus.Internal
@Serializable
class SearchScopesInfo(val scopes: List<SearchScopeData>,
val selectedScopeId: String?,
val projectScopeId: String?,
val everywhereScopeId: String?)

View File

@@ -31,6 +31,7 @@ jvm_library(
"//platform/usageView-impl", "//platform/usageView-impl",
"//platform/refactoring", "//platform/refactoring",
"//platform/indexing-api:indexing", "//platform/indexing-api:indexing",
"//platform/scopes",
], ],
runtime_deps = [ runtime_deps = [
":backend_resources", ":backend_resources",

View File

@@ -53,5 +53,6 @@
<orderEntry type="module" module-name="intellij.platform.usageView.impl" /> <orderEntry type="module" module-name="intellij.platform.usageView.impl" />
<orderEntry type="module" module-name="intellij.platform.refactoring" /> <orderEntry type="module" module-name="intellij.platform.refactoring" />
<orderEntry type="module" module-name="intellij.platform.indexing" /> <orderEntry type="module" module-name="intellij.platform.indexing" />
<orderEntry type="module" module-name="intellij.platform.scopes" />
</component> </component>
</module> </module>

View File

@@ -11,6 +11,7 @@ import com.intellij.openapi.components.service
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.Disposer
import com.intellij.platform.project.ProjectId import com.intellij.platform.project.ProjectId
import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.* import com.intellij.platform.searchEverywhere.*
import com.intellij.platform.searchEverywhere.equalityProviders.SeEqualityChecker import com.intellij.platform.searchEverywhere.equalityProviders.SeEqualityChecker
import com.intellij.platform.searchEverywhere.providers.SeLog import com.intellij.platform.searchEverywhere.providers.SeLog
@@ -143,7 +144,7 @@ class SeBackendService(val project: Project, private val coroutineScope: Corouti
dataContextId: DataContextId, dataContextId: DataContextId,
providerIds: List<SeProviderId>, providerIds: List<SeProviderId>,
isAllTab: Boolean, isAllTab: Boolean,
): Map<SeProviderId, SeSearchScopesInfo> { ): Map<SeProviderId, SearchScopesInfo> {
return providerIds.mapNotNull { providerId -> return providerIds.mapNotNull { providerId ->
val provider = getProvidersHolder(sessionRef, dataContextId)?.get(providerId, isAllTab) val provider = getProvidersHolder(sessionRef, dataContextId)?.get(providerId, isAllTab)
provider?.getSearchScopesInfo()?.let { provider?.getSearchScopesInfo()?.let {

View File

@@ -4,6 +4,7 @@ package com.intellij.platform.searchEverywhere.backend.impl
import com.intellij.ide.rpc.DataContextId import com.intellij.ide.rpc.DataContextId
import com.intellij.platform.project.ProjectId import com.intellij.platform.project.ProjectId
import com.intellij.platform.project.findProjectOrNull import com.intellij.platform.project.findProjectOrNull
import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.* import com.intellij.platform.searchEverywhere.*
import com.intellij.platform.searchEverywhere.impl.SeRemoteApi import com.intellij.platform.searchEverywhere.impl.SeRemoteApi
import com.intellij.platform.searchEverywhere.providers.target.SeTypeVisibilityStatePresentation import com.intellij.platform.searchEverywhere.providers.target.SeTypeVisibilityStatePresentation
@@ -84,7 +85,7 @@ class SeRemoteApiImpl: SeRemoteApi {
dataContextId: DataContextId, dataContextId: DataContextId,
providerIds: List<SeProviderId>, providerIds: List<SeProviderId>,
isAllTab: Boolean, isAllTab: Boolean,
): Map<SeProviderId, SeSearchScopesInfo> { ): Map<SeProviderId, SearchScopesInfo> {
val project = projectId.findProjectOrNull() ?: return emptyMap() val project = projectId.findProjectOrNull() ?: return emptyMap()
return SeBackendService.getInstance(project).getSearchScopesInfoForProviders(sessionRef, dataContextId, providerIds, isAllTab) return SeBackendService.getInstance(project).getSearchScopesInfoForProviders(sessionRef, dataContextId, providerIds, isAllTab)
} }

View File

@@ -4,13 +4,13 @@ package com.intellij.platform.searchEverywhere.backend.providers
import com.intellij.ide.actions.searcheverywhere.ScopeChooserAction import com.intellij.ide.actions.searcheverywhere.ScopeChooserAction
import com.intellij.ide.util.scopeChooser.ScopeDescriptor import com.intellij.ide.util.scopeChooser.ScopeDescriptor
import com.intellij.openapi.application.readAction import com.intellij.openapi.application.readAction
import com.intellij.platform.searchEverywhere.SeSearchScopeData import com.intellij.platform.scopes.SearchScopeData
import com.intellij.platform.searchEverywhere.SeSearchScopesInfo import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.providers.SeAsyncWeightedContributorWrapper import com.intellij.platform.searchEverywhere.providers.SeAsyncWeightedContributorWrapper
import com.intellij.platform.searchEverywhere.utils.SuspendLazyProperty import com.intellij.platform.searchEverywhere.utils.SuspendLazyProperty
import com.intellij.platform.searchEverywhere.utils.suspendLazy import com.intellij.platform.searchEverywhere.utils.suspendLazy
import org.jetbrains.annotations.ApiStatus import org.jetbrains.annotations.ApiStatus
import java.util.UUID import java.util.*
import kotlin.concurrent.atomics.AtomicReference import kotlin.concurrent.atomics.AtomicReference
import kotlin.concurrent.atomics.ExperimentalAtomicApi import kotlin.concurrent.atomics.ExperimentalAtomicApi
@@ -18,12 +18,12 @@ import kotlin.concurrent.atomics.ExperimentalAtomicApi
@ApiStatus.Internal @ApiStatus.Internal
class ScopeChooserActionProviderDelegate(private val contributorWrapper: SeAsyncWeightedContributorWrapper<Any>) { class ScopeChooserActionProviderDelegate(private val contributorWrapper: SeAsyncWeightedContributorWrapper<Any>) {
val searchScopesInfo: SuspendLazyProperty<SeSearchScopesInfo?> = suspendLazy { getSearchScopesInfo() } val searchScopesInfo: SuspendLazyProperty<SearchScopesInfo?> = suspendLazy { getSearchScopesInfo() }
@Volatile @Volatile
private var scopeIdToScope: AtomicReference<Map<String, ScopeDescriptor>> = AtomicReference(emptyMap()) private var scopeIdToScope: AtomicReference<Map<String, ScopeDescriptor>> = AtomicReference(emptyMap())
suspend fun getSearchScopesInfo(): SeSearchScopesInfo? { suspend fun getSearchScopesInfo(): SearchScopesInfo? {
val scopeChooserAction: ScopeChooserAction = contributorWrapper.contributor.getActions({ }).filterIsInstance<ScopeChooserAction>().firstOrNull() val scopeChooserAction: ScopeChooserAction = contributorWrapper.contributor.getActions({ }).filterIsInstance<ScopeChooserAction>().firstOrNull()
?: return null ?: return null
@@ -35,7 +35,7 @@ class ScopeChooserActionProviderDelegate(private val contributorWrapper: SeAsync
scopeChooserAction.scopesWithSeparators scopeChooserAction.scopesWithSeparators
}.mapNotNull { scope -> }.mapNotNull { scope ->
val key = UUID.randomUUID().toString() val key = UUID.randomUUID().toString()
val data = SeSearchScopeData.from(scope, key) val data = SearchScopeData.from(scope, key)
if (data != null) all[key] = scope if (data != null) all[key] = scope
data data
} }
@@ -62,10 +62,10 @@ class ScopeChooserActionProviderDelegate(private val contributorWrapper: SeAsync
}?.scopeId }?.scopeId
} }
return SeSearchScopesInfo(scopeDataList, return SearchScopesInfo(scopeDataList,
selectedScopeId, selectedScopeId,
projectScopeId, projectScopeId,
everywhereScopeId) everywhereScopeId)
} }
fun applyScope(scopeId: String?) { fun applyScope(scopeId: String?) {

View File

@@ -3,6 +3,7 @@ package com.intellij.platform.searchEverywhere.backend.providers.classes
import com.intellij.ide.util.gotoByName.LanguageRef import com.intellij.ide.util.gotoByName.LanguageRef
import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.Disposer
import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.* import com.intellij.platform.searchEverywhere.*
import com.intellij.platform.searchEverywhere.backend.providers.target.SeTargetsProviderDelegate import com.intellij.platform.searchEverywhere.backend.providers.target.SeTargetsProviderDelegate
import com.intellij.platform.searchEverywhere.providers.SeAsyncWeightedContributorWrapper import com.intellij.platform.searchEverywhere.providers.SeAsyncWeightedContributorWrapper
@@ -36,7 +37,7 @@ class SeClassesProvider(private val contributorWrapper: SeAsyncWeightedContribut
Disposer.dispose(contributorWrapper) Disposer.dispose(contributorWrapper)
} }
override suspend fun getSearchScopesInfo(): SeSearchScopesInfo? = targetsProviderDelegate.getSearchScopesInfo() override suspend fun getSearchScopesInfo(): SearchScopesInfo? = targetsProviderDelegate.getSearchScopesInfo()
override suspend fun getTypeVisibilityStates(index: Int): List<SeTypeVisibilityStatePresentation> = override suspend fun getTypeVisibilityStates(index: Int): List<SeTypeVisibilityStatePresentation> =
targetsProviderDelegate.getTypeVisibilityStates<LanguageRef>(index) targetsProviderDelegate.getTypeVisibilityStates<LanguageRef>(index)

View File

@@ -3,6 +3,7 @@ package com.intellij.platform.searchEverywhere.backend.providers.files
import com.intellij.ide.util.gotoByName.FileTypeRef import com.intellij.ide.util.gotoByName.FileTypeRef
import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.Disposer
import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.* import com.intellij.platform.searchEverywhere.*
import com.intellij.platform.searchEverywhere.backend.providers.target.SeTargetsProviderDelegate import com.intellij.platform.searchEverywhere.backend.providers.target.SeTargetsProviderDelegate
import com.intellij.platform.searchEverywhere.providers.SeAsyncWeightedContributorWrapper import com.intellij.platform.searchEverywhere.providers.SeAsyncWeightedContributorWrapper
@@ -36,7 +37,7 @@ class SeFilesProvider(private val contributorWrapper: SeAsyncWeightedContributor
Disposer.dispose(contributorWrapper) Disposer.dispose(contributorWrapper)
} }
override suspend fun getSearchScopesInfo(): SeSearchScopesInfo? = targetsProviderDelegate.getSearchScopesInfo() override suspend fun getSearchScopesInfo(): SearchScopesInfo? = targetsProviderDelegate.getSearchScopesInfo()
override suspend fun getTypeVisibilityStates(index: Int): List<SeTypeVisibilityStatePresentation> = override suspend fun getTypeVisibilityStates(index: Int): List<SeTypeVisibilityStatePresentation> =
targetsProviderDelegate.getTypeVisibilityStates<FileTypeRef>(index) targetsProviderDelegate.getTypeVisibilityStates<FileTypeRef>(index)

View File

@@ -3,6 +3,7 @@ package com.intellij.platform.searchEverywhere.backend.providers.recentFiles
import com.intellij.ide.util.gotoByName.FileTypeRef import com.intellij.ide.util.gotoByName.FileTypeRef
import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.Disposer
import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.* import com.intellij.platform.searchEverywhere.*
import com.intellij.platform.searchEverywhere.backend.providers.target.SeTargetsProviderDelegate import com.intellij.platform.searchEverywhere.backend.providers.target.SeTargetsProviderDelegate
import com.intellij.platform.searchEverywhere.providers.SeAsyncWeightedContributorWrapper import com.intellij.platform.searchEverywhere.providers.SeAsyncWeightedContributorWrapper
@@ -36,7 +37,7 @@ class SeRecentFilesProvider(private val contributorWrapper: SeAsyncWeightedContr
Disposer.dispose(contributorWrapper) Disposer.dispose(contributorWrapper)
} }
override suspend fun getSearchScopesInfo(): SeSearchScopesInfo? = targetsProviderDelegate.getSearchScopesInfo() override suspend fun getSearchScopesInfo(): SearchScopesInfo? = targetsProviderDelegate.getSearchScopesInfo()
override suspend fun getTypeVisibilityStates(index: Int): List<SeTypeVisibilityStatePresentation> = override suspend fun getTypeVisibilityStates(index: Int): List<SeTypeVisibilityStatePresentation> =
targetsProviderDelegate.getTypeVisibilityStates<FileTypeRef>(index) targetsProviderDelegate.getTypeVisibilityStates<FileTypeRef>(index)

View File

@@ -3,6 +3,7 @@ package com.intellij.platform.searchEverywhere.backend.providers.symbols
import com.intellij.ide.util.gotoByName.LanguageRef import com.intellij.ide.util.gotoByName.LanguageRef
import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.Disposer
import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.* import com.intellij.platform.searchEverywhere.*
import com.intellij.platform.searchEverywhere.backend.providers.target.SeTargetsProviderDelegate import com.intellij.platform.searchEverywhere.backend.providers.target.SeTargetsProviderDelegate
import com.intellij.platform.searchEverywhere.providers.SeAsyncWeightedContributorWrapper import com.intellij.platform.searchEverywhere.providers.SeAsyncWeightedContributorWrapper
@@ -36,7 +37,7 @@ class SeSymbolsProvider(private val contributorWrapper: SeAsyncWeightedContribut
Disposer.dispose(contributorWrapper) Disposer.dispose(contributorWrapper)
} }
override suspend fun getSearchScopesInfo(): SeSearchScopesInfo? = targetsProviderDelegate.getSearchScopesInfo() override suspend fun getSearchScopesInfo(): SearchScopesInfo? = targetsProviderDelegate.getSearchScopesInfo()
override suspend fun getTypeVisibilityStates(index: Int): List<SeTypeVisibilityStatePresentation> = override suspend fun getTypeVisibilityStates(index: Int): List<SeTypeVisibilityStatePresentation> =
targetsProviderDelegate.getTypeVisibilityStates<LanguageRef>(index) targetsProviderDelegate.getTypeVisibilityStates<LanguageRef>(index)

View File

@@ -10,6 +10,7 @@ import com.intellij.ide.util.PsiElementListCellRenderer.ItemMatchers
import com.intellij.openapi.application.EDT import com.intellij.openapi.application.EDT
import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.progress.coroutineToIndicator import com.intellij.openapi.progress.coroutineToIndicator
import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.* import com.intellij.platform.searchEverywhere.*
import com.intellij.platform.searchEverywhere.backend.providers.ScopeChooserActionProviderDelegate import com.intellij.platform.searchEverywhere.backend.providers.ScopeChooserActionProviderDelegate
import com.intellij.platform.searchEverywhere.providers.* import com.intellij.platform.searchEverywhere.providers.*
@@ -101,7 +102,7 @@ class SeTargetsProviderDelegate(private val contributorWrapper: SeAsyncWeightedC
scopeProviderDelegate.applyScope(scopeId) scopeProviderDelegate.applyScope(scopeId)
} }
suspend fun getSearchScopesInfo(): SeSearchScopesInfo? { suspend fun getSearchScopesInfo(): SearchScopesInfo? {
return scopeProviderDelegate.searchScopesInfo.getValue() return scopeProviderDelegate.searchScopesInfo.getValue()
} }

View File

@@ -12,13 +12,10 @@ import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.progress.coroutineToIndicator import com.intellij.openapi.progress.coroutineToIndicator
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.Disposer
import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.* import com.intellij.platform.searchEverywhere.*
import com.intellij.platform.searchEverywhere.backend.providers.ScopeChooserActionProviderDelegate import com.intellij.platform.searchEverywhere.backend.providers.ScopeChooserActionProviderDelegate
import com.intellij.platform.searchEverywhere.providers.AsyncProcessor import com.intellij.platform.searchEverywhere.providers.*
import com.intellij.platform.searchEverywhere.providers.SeAsyncWeightedContributorWrapper
import com.intellij.platform.searchEverywhere.providers.SeEverywhereFilter
import com.intellij.platform.searchEverywhere.providers.SeTextFilter
import com.intellij.platform.searchEverywhere.providers.getExtendedDescription
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.jetbrains.annotations.ApiStatus import org.jetbrains.annotations.ApiStatus
@@ -97,7 +94,7 @@ class SeTextItemsProvider(project: Project, private val contributorWrapper: SeAs
scopeProviderDelegate.applyScope(scopeId) scopeProviderDelegate.applyScope(scopeId)
} }
override suspend fun getSearchScopesInfo(): SeSearchScopesInfo? { override suspend fun getSearchScopesInfo(): SearchScopesInfo? {
return scopeProviderDelegate.searchScopesInfo.getValue() return scopeProviderDelegate.searchScopesInfo.getValue()
} }
} }

View File

@@ -33,6 +33,7 @@ jvm_library(
"//platform/lang-impl", "//platform/lang-impl",
"//platform/usageView", "//platform/usageView",
"//platform/refactoring", "//platform/refactoring",
"//platform/scopes",
], ],
exports = ["//platform/searchEverywhere/shared:searchEverywhere"], exports = ["//platform/searchEverywhere/shared:searchEverywhere"],
runtime_deps = [":frontend_resources"] runtime_deps = [":frontend_resources"]

View File

@@ -54,5 +54,6 @@
<orderEntry type="module" module-name="intellij.platform.lang.impl" /> <orderEntry type="module" module-name="intellij.platform.lang.impl" />
<orderEntry type="module" module-name="intellij.platform.usageView" /> <orderEntry type="module" module-name="intellij.platform.usageView" />
<orderEntry type="module" module-name="intellij.platform.refactoring" /> <orderEntry type="module" module-name="intellij.platform.refactoring" />
<orderEntry type="module" module-name="intellij.platform.scopes" />
</component> </component>
</module> </module>

View File

@@ -3,6 +3,7 @@ package com.intellij.platform.searchEverywhere.frontend
import com.intellij.ide.rpc.DataContextId import com.intellij.ide.rpc.DataContextId
import com.intellij.platform.project.ProjectId import com.intellij.platform.project.ProjectId
import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.* import com.intellij.platform.searchEverywhere.*
import com.intellij.platform.searchEverywhere.impl.SeRemoteApi import com.intellij.platform.searchEverywhere.impl.SeRemoteApi
import com.intellij.platform.searchEverywhere.providers.SeLog import com.intellij.platform.searchEverywhere.providers.SeLog
@@ -68,7 +69,7 @@ class SeFrontendItemDataProvidersFacade(private val projectId: ProjectId,
return SeRemoteApi.getInstance().itemSelected(projectId, sessionRef, itemData, modifiers, searchText, isAllTab = isAllTab) return SeRemoteApi.getInstance().itemSelected(projectId, sessionRef, itemData, modifiers, searchText, isAllTab = isAllTab)
} }
suspend fun getSearchScopesInfos(): Map<SeProviderId, SeSearchScopesInfo> = suspend fun getSearchScopesInfos(): Map<SeProviderId, SearchScopesInfo> =
SeRemoteApi.getInstance().getSearchScopesInfoForProviders( SeRemoteApi.getInstance().getSearchScopesInfoForProviders(
projectId, providerIds = providerIds, sessionRef = sessionRef, dataContextId = dataContextId, isAllTab = isAllTab projectId, providerIds = providerIds, sessionRef = sessionRef, dataContextId = dataContextId, isAllTab = isAllTab
) )

View File

@@ -8,6 +8,7 @@ import com.intellij.openapi.application.EDT
import com.intellij.openapi.application.readAction import com.intellij.openapi.application.readAction
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.platform.project.projectId import com.intellij.platform.project.projectId
import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.* import com.intellij.platform.searchEverywhere.*
import com.intellij.platform.searchEverywhere.equalityProviders.SeEqualityChecker import com.intellij.platform.searchEverywhere.equalityProviders.SeEqualityChecker
import com.intellij.platform.searchEverywhere.frontend.SeFrontendItemDataProvidersFacade import com.intellij.platform.searchEverywhere.frontend.SeFrontendItemDataProvidersFacade
@@ -76,7 +77,7 @@ class SeTabDelegate(
} }
} }
suspend fun getSearchScopesInfos(): List<SeSearchScopesInfo> { suspend fun getSearchScopesInfos(): List<SearchScopesInfo> {
return providers.getValue().getSearchScopesInfos() return providers.getValue().getSearchScopesInfos()
} }
@@ -129,7 +130,7 @@ class SeTabDelegate(
fun getProvidersIdToName(): Map<SeProviderId, @Nls String> = localProviders.mapValues { it.value.displayName } + fun getProvidersIdToName(): Map<SeProviderId, @Nls String> = localProviders.mapValues { it.value.displayName } +
(frontendProvidersFacade?.idsWithDisplayNames ?: emptyMap()) (frontendProvidersFacade?.idsWithDisplayNames ?: emptyMap())
suspend fun getSearchScopesInfos(): List<SeSearchScopesInfo> { suspend fun getSearchScopesInfos(): List<SearchScopesInfo> {
return localProviders.values.mapNotNull { it.getSearchScopesInfo() } + return localProviders.values.mapNotNull { it.getSearchScopesInfo() } +
(frontendProvidersFacade?.getSearchScopesInfos()?.values ?: emptyList()) (frontendProvidersFacade?.getSearchScopesInfos()?.values ?: emptyList())
} }

View File

@@ -9,7 +9,7 @@ import com.intellij.ide.util.scopeChooser.ScopeSeparator
import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import com.intellij.platform.searchEverywhere.SeSearchScopesInfo import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.frontend.AutoToggleAction import com.intellij.platform.searchEverywhere.frontend.AutoToggleAction
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import com.intellij.util.Processor import com.intellij.util.Processor
@@ -19,7 +19,7 @@ import java.awt.Color
import javax.swing.Icon import javax.swing.Icon
@ApiStatus.Internal @ApiStatus.Internal
class SeScopeChooserActionProvider(val scopesInfo: SeSearchScopesInfo, private val onSelectedScopeChanged: (String?) -> Unit) { class SeScopeChooserActionProvider(val scopesInfo: SearchScopesInfo, private val onSelectedScopeChanged: (String?) -> Unit) {
private val descriptors: Map<String, ScopeDescriptor> = scopesInfo.scopes.associate { private val descriptors: Map<String, ScopeDescriptor> = scopesInfo.scopes.associate {
val descriptor = val descriptor =
if (it.isSeparator) ScopeSeparator(it.name) if (it.isSeparator) ScopeSeparator(it.name)

View File

@@ -5,7 +5,7 @@ import com.intellij.ide.actions.searcheverywhere.PersistentSearchEverywhereContr
import com.intellij.ide.actions.searcheverywhere.SearchEverywhereFiltersAction import com.intellij.ide.actions.searcheverywhere.SearchEverywhereFiltersAction
import com.intellij.ide.ui.icons.icon import com.intellij.ide.ui.icons.icon
import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnAction
import com.intellij.platform.searchEverywhere.SeSearchScopesInfo import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.frontend.tabs.utils.SeFilterEditorBase import com.intellij.platform.searchEverywhere.frontend.tabs.utils.SeFilterEditorBase
import com.intellij.platform.searchEverywhere.frontend.tabs.utils.SeTypeVisibilityStateHolder import com.intellij.platform.searchEverywhere.frontend.tabs.utils.SeTypeVisibilityStateHolder
import com.intellij.platform.searchEverywhere.providers.target.SeTargetsFilter import com.intellij.platform.searchEverywhere.providers.target.SeTargetsFilter
@@ -13,7 +13,7 @@ import com.intellij.platform.searchEverywhere.providers.target.SeTypeVisibilityS
import org.jetbrains.annotations.ApiStatus.Internal import org.jetbrains.annotations.ApiStatus.Internal
@Internal @Internal
class SeTargetsFilterEditor(private val scopesInfo: SeSearchScopesInfo?, class SeTargetsFilterEditor(private val scopesInfo: SearchScopesInfo?,
typeVisibilityStates: List<SeTypeVisibilityStatePresentation>?) : SeFilterEditorBase<SeTargetsFilter>( typeVisibilityStates: List<SeTypeVisibilityStatePresentation>?) : SeFilterEditorBase<SeTargetsFilter>(
SeTargetsFilter(scopesInfo?.selectedScopeId, hiddenTypes(typeVisibilityStates)) SeTargetsFilter(scopesInfo?.selectedScopeId, hiddenTypes(typeVisibilityStates))
) { ) {

View File

@@ -6,7 +6,7 @@ import com.intellij.find.FindSettings
import com.intellij.find.impl.JComboboxAction import com.intellij.find.impl.JComboboxAction
import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.platform.searchEverywhere.SeSearchScopesInfo import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.frontend.tabs.target.SeScopeChooserActionProvider import com.intellij.platform.searchEverywhere.frontend.tabs.target.SeScopeChooserActionProvider
import com.intellij.platform.searchEverywhere.frontend.tabs.utils.SeFilterEditorBase import com.intellij.platform.searchEverywhere.frontend.tabs.utils.SeFilterEditorBase
import com.intellij.platform.searchEverywhere.providers.SeTextFilter import com.intellij.platform.searchEverywhere.providers.SeTextFilter
@@ -15,7 +15,7 @@ import org.jetbrains.annotations.ApiStatus
@ApiStatus.Internal @ApiStatus.Internal
class SeTextFilterEditor( class SeTextFilterEditor(
private val project: Project?, private val project: Project?,
private val scopesInfo: SeSearchScopesInfo?, private val scopesInfo: SearchScopesInfo?,
) : SeFilterEditorBase<SeTextFilter>( ) : SeFilterEditorBase<SeTextFilter>(
SeTextFilter(scopesInfo?.selectedScopeId, null) SeTextFilter(scopesInfo?.selectedScopeId, null)
) { ) {

View File

@@ -30,6 +30,7 @@ jvm_library(
"//platform/usageView", "//platform/usageView",
"//platform/execution-impl", "//platform/execution-impl",
"//platform/statistics", "//platform/statistics",
"//platform/scopes",
], ],
exports = [ exports = [
"//platform/lang-impl", "//platform/lang-impl",

View File

@@ -51,5 +51,6 @@
<orderEntry type="module" module-name="intellij.platform.usageView" /> <orderEntry type="module" module-name="intellij.platform.usageView" />
<orderEntry type="module" module-name="intellij.platform.execution.impl" /> <orderEntry type="module" module-name="intellij.platform.execution.impl" />
<orderEntry type="module" module-name="intellij.platform.statistics" exported="" /> <orderEntry type="module" module-name="intellij.platform.statistics" exported="" />
<orderEntry type="module" module-name="intellij.platform.scopes" />
</component> </component>
</module> </module>

View File

@@ -1,34 +0,0 @@
// 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.platform.searchEverywhere
import com.intellij.ide.ui.colors.ColorId
import com.intellij.ide.ui.colors.rpcId
import com.intellij.ide.ui.icons.IconId
import com.intellij.ide.ui.icons.rpcId
import com.intellij.ide.util.scopeChooser.ScopeDescriptor
import com.intellij.ide.util.scopeChooser.ScopeSeparator
import kotlinx.serialization.Serializable
import org.jetbrains.annotations.ApiStatus
import org.jetbrains.annotations.Nls
@ApiStatus.Internal
@Serializable
class SeSearchScopeData(val scopeId: String, val name: @Nls String, val iconId: IconId?, val colorId: ColorId?, val isSeparator: Boolean) {
companion object {
fun from(descriptor: ScopeDescriptor, scopeId: String): SeSearchScopeData? {
val name = descriptor.displayName ?: return null
return SeSearchScopeData(scopeId,
name,
descriptor.icon?.rpcId(),
descriptor.color?.rpcId(),
descriptor is ScopeSeparator)
}
}
}
@ApiStatus.Internal
@Serializable
class SeSearchScopesInfo(val scopes: List<SeSearchScopeData>,
val selectedScopeId: String?,
val projectScopeId: String?,
val everywhereScopeId: String?)

View File

@@ -1,9 +1,10 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. // 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.platform.searchEverywhere package com.intellij.platform.searchEverywhere
import com.intellij.platform.scopes.SearchScopesInfo
import org.jetbrains.annotations.ApiStatus import org.jetbrains.annotations.ApiStatus
@ApiStatus.Internal @ApiStatus.Internal
interface SeSearchScopesProvider { interface SeSearchScopesProvider {
suspend fun getSearchScopesInfo(): SeSearchScopesInfo? suspend fun getSearchScopesInfo(): SearchScopesInfo?
} }

View File

@@ -4,6 +4,7 @@ package com.intellij.platform.searchEverywhere.impl
import com.intellij.ide.rpc.DataContextId import com.intellij.ide.rpc.DataContextId
import com.intellij.platform.project.ProjectId import com.intellij.platform.project.ProjectId
import com.intellij.platform.rpc.RemoteApiProviderService import com.intellij.platform.rpc.RemoteApiProviderService
import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.* import com.intellij.platform.searchEverywhere.*
import com.intellij.platform.searchEverywhere.providers.target.SeTypeVisibilityStatePresentation import com.intellij.platform.searchEverywhere.providers.target.SeTypeVisibilityStatePresentation
import fleet.kernel.DurableRef import fleet.kernel.DurableRef
@@ -82,7 +83,7 @@ interface SeRemoteApi : RemoteApi<Unit> {
dataContextId: DataContextId, dataContextId: DataContextId,
providerIds: List<SeProviderId>, providerIds: List<SeProviderId>,
isAllTab: Boolean, isAllTab: Boolean,
): Map<SeProviderId, SeSearchScopesInfo> ): Map<SeProviderId, SearchScopesInfo>
suspend fun getTypeVisibilityStatesForProviders( suspend fun getTypeVisibilityStatesForProviders(
index: Int, index: Int,

View File

@@ -4,6 +4,7 @@ package com.intellij.platform.searchEverywhere.providers
import com.intellij.ide.actions.searcheverywhere.statistics.SearchEverywhereUsageTriggerCollector import com.intellij.ide.actions.searcheverywhere.statistics.SearchEverywhereUsageTriggerCollector
import com.intellij.openapi.Disposable import com.intellij.openapi.Disposable
import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.Disposer
import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.* import com.intellij.platform.searchEverywhere.*
import com.intellij.platform.searchEverywhere.providers.target.SeTypeVisibilityStatePresentation import com.intellij.platform.searchEverywhere.providers.target.SeTypeVisibilityStatePresentation
import fleet.kernel.DurableRef import fleet.kernel.DurableRef
@@ -75,7 +76,7 @@ class SeLocalItemDataProvider(
return provider.itemSelected(item, modifiers, searchText) return provider.itemSelected(item, modifiers, searchText)
} }
suspend fun getSearchScopesInfo(): SeSearchScopesInfo? { suspend fun getSearchScopesInfo(): SearchScopesInfo? {
return (provider as? SeSearchScopesProvider)?.getSearchScopesInfo() return (provider as? SeSearchScopesProvider)?.getSearchScopesInfo()
} }