diff --git a/.idea/modules.xml b/.idea/modules.xml
index 5a14c43b72c8..81cc091b2c68 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -916,6 +916,8 @@
+
+
diff --git a/platform/ijent/testFramework/BUILD.bazel b/platform/ijent/testFramework/BUILD.bazel
index 1c0d373257c6..ea6812e97883 100644
--- a/platform/ijent/testFramework/BUILD.bazel
+++ b/platform/ijent/testFramework/BUILD.bazel
@@ -16,7 +16,6 @@ jvm_library(
"//platform/testFramework",
"//platform/util/coroutines",
"//platform/platform-impl/eel:ide-impl-wsl",
- "//platform/execution",
]
)
### auto-generated section `build intellij.platform.ijent.community.testFramework` end
\ No newline at end of file
diff --git a/platform/main/intellij.platform.backend.main/BUILD.bazel b/platform/main/intellij.platform.backend.main/BUILD.bazel
index 62b3161c77b8..bc55e5698f29 100644
--- a/platform/main/intellij.platform.backend.main/BUILD.bazel
+++ b/platform/main/intellij.platform.backend.main/BUILD.bazel
@@ -22,6 +22,7 @@ java_library(
"//spellchecker/xml",
"//platform/find/backend",
"//platform/managed-cache/managed.cache.backend",
+ "//platform/scopes/backend",
]
)
### auto-generated section `build intellij.platform.backend.main` end
\ No newline at end of file
diff --git a/platform/main/intellij.platform.backend.main/intellij.platform.backend.main.iml b/platform/main/intellij.platform.backend.main/intellij.platform.backend.main.iml
index 91ba86406a2f..9a17cdc450e6 100644
--- a/platform/main/intellij.platform.backend.main/intellij.platform.backend.main.iml
+++ b/platform/main/intellij.platform.backend.main/intellij.platform.backend.main.iml
@@ -22,5 +22,6 @@
+
\ No newline at end of file
diff --git a/platform/platform-resources/src/META-INF/essential-modules.xml b/platform/platform-resources/src/META-INF/essential-modules.xml
index fbc565cbe652..3e50ba0981ea 100644
--- a/platform/platform-resources/src/META-INF/essential-modules.xml
+++ b/platform/platform-resources/src/META-INF/essential-modules.xml
@@ -13,6 +13,9 @@
+
+
+
diff --git a/platform/scopes/BUILD.bazel b/platform/scopes/BUILD.bazel
new file mode 100644
index 000000000000..b8e3b6fed5d3
--- /dev/null
+++ b/platform/scopes/BUILD.bazel
@@ -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
\ No newline at end of file
diff --git a/platform/scopes/api-dump.txt b/platform/scopes/api-dump.txt
new file mode 100644
index 000000000000..5a12305a473f
--- /dev/null
+++ b/platform/scopes/api-dump.txt
@@ -0,0 +1,8 @@
+c:com.intellij.ide.util.scopeChooser.ScopeDescriptor
+- com.intellij.openapi.util.ColoredItem
+- (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
diff --git a/platform/scopes/backend/BUILD.bazel b/platform/scopes/backend/BUILD.bazel
new file mode 100644
index 000000000000..861ceff1efb1
--- /dev/null
+++ b/platform/scopes/backend/BUILD.bazel
@@ -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
\ No newline at end of file
diff --git a/platform/scopes/backend/api-dump.txt b/platform/scopes/backend/api-dump.txt
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/platform/scopes/backend/intellij.platform.scopes.backend.iml b/platform/scopes/backend/intellij.platform.scopes.backend.iml
new file mode 100644
index 000000000000..745264fcc004
--- /dev/null
+++ b/platform/scopes/backend/intellij.platform.scopes.backend.iml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $KOTLIN_BUNDLED$/lib/kotlinx-serialization-compiler-plugin.jar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/platform/scopes/backend/resources/intellij.platform.scopes.backend.xml b/platform/scopes/backend/resources/intellij.platform.scopes.backend.xml
new file mode 100644
index 000000000000..c74b673c5b4a
--- /dev/null
+++ b/platform/scopes/backend/resources/intellij.platform.scopes.backend.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/platform/scopes/intellij.platform.scopes.iml b/platform/scopes/intellij.platform.scopes.iml
new file mode 100644
index 000000000000..5573c969f401
--- /dev/null
+++ b/platform/scopes/intellij.platform.scopes.iml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $KOTLIN_BUNDLED$/lib/kotlinx-serialization-compiler-plugin.jar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/platform/scopes/resources/intellij.platform.scopes.xml b/platform/scopes/resources/intellij.platform.scopes.xml
new file mode 100644
index 000000000000..164f46cfcfb2
--- /dev/null
+++ b/platform/scopes/resources/intellij.platform.scopes.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/platform/scopes/src/com/intellij/platform/scopes/SearchScopeData.kt b/platform/scopes/src/com/intellij/platform/scopes/SearchScopeData.kt
new file mode 100644
index 000000000000..4aad1ba080ce
--- /dev/null
+++ b/platform/scopes/src/com/intellij/platform/scopes/SearchScopeData.kt
@@ -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,
+ val selectedScopeId: String?,
+ val projectScopeId: String?,
+ val everywhereScopeId: String?)
diff --git a/platform/searchEverywhere/backend/BUILD.bazel b/platform/searchEverywhere/backend/BUILD.bazel
index 8140bcdbe418..5a1a41cb7599 100644
--- a/platform/searchEverywhere/backend/BUILD.bazel
+++ b/platform/searchEverywhere/backend/BUILD.bazel
@@ -31,6 +31,7 @@ jvm_library(
"//platform/usageView-impl",
"//platform/refactoring",
"//platform/indexing-api:indexing",
+ "//platform/scopes",
],
runtime_deps = [
":backend_resources",
diff --git a/platform/searchEverywhere/backend/intellij.platform.searchEverywhere.backend.iml b/platform/searchEverywhere/backend/intellij.platform.searchEverywhere.backend.iml
index 874d5fd90ef3..787cb34b71b7 100644
--- a/platform/searchEverywhere/backend/intellij.platform.searchEverywhere.backend.iml
+++ b/platform/searchEverywhere/backend/intellij.platform.searchEverywhere.backend.iml
@@ -53,5 +53,6 @@
+
\ No newline at end of file
diff --git a/platform/searchEverywhere/backend/src/impl/SeBackendService.kt b/platform/searchEverywhere/backend/src/impl/SeBackendService.kt
index 033ec0a208a0..db6e51a7c1fc 100644
--- a/platform/searchEverywhere/backend/src/impl/SeBackendService.kt
+++ b/platform/searchEverywhere/backend/src/impl/SeBackendService.kt
@@ -11,6 +11,7 @@ import com.intellij.openapi.components.service
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Disposer
import com.intellij.platform.project.ProjectId
+import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.*
import com.intellij.platform.searchEverywhere.equalityProviders.SeEqualityChecker
import com.intellij.platform.searchEverywhere.providers.SeLog
@@ -143,7 +144,7 @@ class SeBackendService(val project: Project, private val coroutineScope: Corouti
dataContextId: DataContextId,
providerIds: List,
isAllTab: Boolean,
- ): Map {
+ ): Map {
return providerIds.mapNotNull { providerId ->
val provider = getProvidersHolder(sessionRef, dataContextId)?.get(providerId, isAllTab)
provider?.getSearchScopesInfo()?.let {
diff --git a/platform/searchEverywhere/backend/src/impl/SeRemoteApiImpl.kt b/platform/searchEverywhere/backend/src/impl/SeRemoteApiImpl.kt
index ae258e045556..cd66564d7fb8 100644
--- a/platform/searchEverywhere/backend/src/impl/SeRemoteApiImpl.kt
+++ b/platform/searchEverywhere/backend/src/impl/SeRemoteApiImpl.kt
@@ -4,6 +4,7 @@ package com.intellij.platform.searchEverywhere.backend.impl
import com.intellij.ide.rpc.DataContextId
import com.intellij.platform.project.ProjectId
import com.intellij.platform.project.findProjectOrNull
+import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.*
import com.intellij.platform.searchEverywhere.impl.SeRemoteApi
import com.intellij.platform.searchEverywhere.providers.target.SeTypeVisibilityStatePresentation
@@ -84,7 +85,7 @@ class SeRemoteApiImpl: SeRemoteApi {
dataContextId: DataContextId,
providerIds: List,
isAllTab: Boolean,
- ): Map {
+ ): Map {
val project = projectId.findProjectOrNull() ?: return emptyMap()
return SeBackendService.getInstance(project).getSearchScopesInfoForProviders(sessionRef, dataContextId, providerIds, isAllTab)
}
diff --git a/platform/searchEverywhere/backend/src/providers/ScopeChooserActionProvider.kt b/platform/searchEverywhere/backend/src/providers/ScopeChooserActionProvider.kt
index 4db57fcbb2b4..c1d69bb461b6 100644
--- a/platform/searchEverywhere/backend/src/providers/ScopeChooserActionProvider.kt
+++ b/platform/searchEverywhere/backend/src/providers/ScopeChooserActionProvider.kt
@@ -4,13 +4,13 @@ package com.intellij.platform.searchEverywhere.backend.providers
import com.intellij.ide.actions.searcheverywhere.ScopeChooserAction
import com.intellij.ide.util.scopeChooser.ScopeDescriptor
import com.intellij.openapi.application.readAction
-import com.intellij.platform.searchEverywhere.SeSearchScopeData
-import com.intellij.platform.searchEverywhere.SeSearchScopesInfo
+import com.intellij.platform.scopes.SearchScopeData
+import com.intellij.platform.scopes.SearchScopesInfo
import com.intellij.platform.searchEverywhere.providers.SeAsyncWeightedContributorWrapper
import com.intellij.platform.searchEverywhere.utils.SuspendLazyProperty
import com.intellij.platform.searchEverywhere.utils.suspendLazy
import org.jetbrains.annotations.ApiStatus
-import java.util.UUID
+import java.util.*
import kotlin.concurrent.atomics.AtomicReference
import kotlin.concurrent.atomics.ExperimentalAtomicApi
@@ -18,12 +18,12 @@ import kotlin.concurrent.atomics.ExperimentalAtomicApi
@ApiStatus.Internal
class ScopeChooserActionProviderDelegate(private val contributorWrapper: SeAsyncWeightedContributorWrapper) {
- val searchScopesInfo: SuspendLazyProperty = suspendLazy { getSearchScopesInfo() }
+ val searchScopesInfo: SuspendLazyProperty = suspendLazy { getSearchScopesInfo() }
@Volatile
private var scopeIdToScope: AtomicReference