diff --git a/.idea/modules.xml b/.idea/modules.xml
index 096b14b6a71f..fe77f404df50 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -1012,6 +1012,7 @@
+
diff --git a/platform/lang-impl/src/com/intellij/ide/navbar/actions/extensions.kt b/platform/lang-impl/src/com/intellij/ide/navbar/actions/extensions.kt
index 512f9cc68200..206898c0f599 100644
--- a/platform/lang-impl/src/com/intellij/ide/navbar/actions/extensions.kt
+++ b/platform/lang-impl/src/com/intellij/ide/navbar/actions/extensions.kt
@@ -1,29 +1,8 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.ide.navbar.actions
-import com.intellij.ide.impl.dataRules.GetDataRule
-import com.intellij.ide.navbar.ide.IdeNavBarVmItem
-import com.intellij.ide.navbar.impl.DefaultNavBarItem
-import com.intellij.ide.navbar.impl.ModuleNavBarItem
-import com.intellij.ide.navbar.impl.PsiNavBarItem
import com.intellij.ide.navigationToolbar.NavBarModelExtension
-import com.intellij.ide.projectView.impl.ProjectRootsUtil
-import com.intellij.ide.util.DeleteHandler.DefaultDeleteProvider
-import com.intellij.model.Pointer
-import com.intellij.openapi.actionSystem.*
-import com.intellij.openapi.application.ApplicationManager
-import com.intellij.openapi.module.ModuleUtilCore
-import com.intellij.openapi.project.Project
-import com.intellij.openapi.roots.ui.configuration.actions.ModuleDeleteProvider
-import com.intellij.openapi.vfs.VirtualFile
-import com.intellij.platform.navbar.NavBarVmItem
-import com.intellij.platform.navbar.backend.NavBarItem
-import com.intellij.pom.Navigatable
-import com.intellij.psi.PsiDirectory
-import com.intellij.psi.PsiElement
-import com.intellij.psi.util.PsiUtilCore
-import com.intellij.util.containers.toArray
-import org.jetbrains.annotations.VisibleForTesting
+import com.intellij.openapi.actionSystem.DataProvider
/**
* Fast extension data without selection (allows to override cut/copy/paste providers)
@@ -36,122 +15,10 @@ internal fun extensionData(dataId: String): Any? {
private val emptyDataProvider = DataProvider { null }
-private fun extensionData(dataId: String, provider: DataProvider): Any? {
+fun extensionData(dataId: String, provider: DataProvider): Any? {
for (modelExtension in NavBarModelExtension.EP_NAME.extensionList) {
val data = modelExtension.getData(dataId, provider)
if (data != null) return data
}
return provider.getData(dataId)
}
-
-internal class BgtDataRule : GetDataRule {
-
- override fun getData(dataProvider: DataProvider): Any? {
- val project = CommonDataKeys.PROJECT.getData(dataProvider)
- ?: return null
- val selection = NavBarVmItem.SELECTED_ITEMS.getData(dataProvider)
- ?: return null
- val pointers = selection.map {
- (it as IdeNavBarVmItem).pointer
- }
- return DataProvider {
- getBgData(project, pointers, it)
- }
- }
-}
-
-@VisibleForTesting
-fun getBgData(project: Project, selection: List>, dataId: String): Any? {
- val selectedItems = lazy(LazyThreadSafetyMode.NONE) {
- ApplicationManager.getApplication().assertReadAccessAllowed()
- selection.mapNotNull {
- it.dereference()
- }
- }
- if (LangDataKeys.IDE_VIEW.`is`(dataId)) {
- return NavBarIdeView(selectedItems)
- }
- val provider = DataProvider {
- getBgData(project, selectedItems, it)
- }
- return extensionData(dataId, provider)
-}
-
-private fun getBgData(project: Project, selectedItems: Lazy>, dataId: String): Any? = when (dataId) {
- CommonDataKeys.PROJECT.name -> {
- project
- }
- PlatformCoreDataKeys.MODULE.name -> {
- selectedItems.value
- .firstNotNullOfOrNull {
- (it as? ModuleNavBarItem)?.data
- }
- ?: selectedItems.value
- .firstNotNullOfOrNull {
- (it as? PsiNavBarItem)?.data?.let { psi ->
- ModuleUtilCore.findModuleForPsiElement(psi)
- }
- }
- }
- LangDataKeys.MODULE_CONTEXT.name -> {
- val dir = selectedItems.value
- .firstNotNullOfOrNull {
- (it as? PsiNavBarItem)?.data as? PsiDirectory
- }
- if (dir != null && ProjectRootsUtil.isModuleContentRoot(dir.virtualFile, project)) {
- ModuleUtilCore.findModuleForPsiElement(dir)
- }
- else {
- null
- }
- }
- CommonDataKeys.PSI_ELEMENT.name -> {
- selectedItems.value
- .firstNotNullOfOrNull {
- (it as? PsiNavBarItem)?.data
- }
- }
- PlatformCoreDataKeys.PSI_ELEMENT_ARRAY.name -> {
- selectedItems.value
- .mapNotNull {
- (it as? PsiNavBarItem)?.data
- }
- .ifEmpty { null }
- ?.toArray(PsiElement.EMPTY_ARRAY)
- }
- CommonDataKeys.VIRTUAL_FILE_ARRAY.name -> {
- selectedItems.value
- .mapNotNull {
- (it as? PsiNavBarItem)?.data?.let { psi ->
- PsiUtilCore.getVirtualFile(psi)
- }
- }
- .toSet()
- .ifEmpty { null }
- ?.toArray(VirtualFile.EMPTY_ARRAY)
- }
- CommonDataKeys.NAVIGATABLE_ARRAY.name -> {
- selectedItems.value
- .mapNotNull {
- (it as? DefaultNavBarItem<*>)?.data as? Navigatable
- }
- .ifEmpty { null }
- ?.toArray(Navigatable.EMPTY_NAVIGATABLE_ARRAY)
- }
- PlatformDataKeys.DELETE_ELEMENT_PROVIDER.name -> {
- val hasModule = selectedItems.value.firstNotNullOfOrNull {
- (it as? ModuleNavBarItem)?.data
- } != null
- if (hasModule) {
- ModuleDeleteProvider.getInstance()
- }
- else {
- DefaultDeleteProvider()
- }
- }
- PlatformDataKeys.SELECTED_ITEM.name -> selectedItems.value.firstOrNull()
- PlatformDataKeys.SELECTED_ITEMS.name -> selectedItems.value.toTypedArray()
- else -> {
- null
- }
-}
diff --git a/platform/navbar.compatibility/backend/intellij.platform.navbar.compatibility.backend.iml b/platform/navbar.compatibility/backend/intellij.platform.navbar.compatibility.backend.iml
new file mode 100644
index 000000000000..2a4cd8f3c813
--- /dev/null
+++ b/platform/navbar.compatibility/backend/intellij.platform.navbar.compatibility.backend.iml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/platform/navbar.compatibility/backend/resources/intellij.platform.navbar.compatibility.backend.xml b/platform/navbar.compatibility/backend/resources/intellij.platform.navbar.compatibility.backend.xml
new file mode 100644
index 000000000000..13270ebbf5b1
--- /dev/null
+++ b/platform/navbar.compatibility/backend/resources/intellij.platform.navbar.compatibility.backend.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/platform/navbar.compatibility/backend/src/BgtDataRule.kt b/platform/navbar.compatibility/backend/src/BgtDataRule.kt
index 512f9cc68200..c10c0d579ed1 100644
--- a/platform/navbar.compatibility/backend/src/BgtDataRule.kt
+++ b/platform/navbar.compatibility/backend/src/BgtDataRule.kt
@@ -1,12 +1,8 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.intellij.ide.navbar.actions
+package com.intellij.platform.navbar.compatibility.backend
import com.intellij.ide.impl.dataRules.GetDataRule
-import com.intellij.ide.navbar.ide.IdeNavBarVmItem
-import com.intellij.ide.navbar.impl.DefaultNavBarItem
-import com.intellij.ide.navbar.impl.ModuleNavBarItem
-import com.intellij.ide.navbar.impl.PsiNavBarItem
-import com.intellij.ide.navigationToolbar.NavBarModelExtension
+import com.intellij.ide.navbar.actions.extensionData
import com.intellij.ide.projectView.impl.ProjectRootsUtil
import com.intellij.ide.util.DeleteHandler.DefaultDeleteProvider
import com.intellij.model.Pointer
@@ -25,25 +21,6 @@ import com.intellij.psi.util.PsiUtilCore
import com.intellij.util.containers.toArray
import org.jetbrains.annotations.VisibleForTesting
-/**
- * Fast extension data without selection (allows to override cut/copy/paste providers)
- *
- * TODO consider a new extension for that OR new API for cut/copy/paste
- */
-internal fun extensionData(dataId: String): Any? {
- return extensionData(dataId, emptyDataProvider)
-}
-
-private val emptyDataProvider = DataProvider { null }
-
-private fun extensionData(dataId: String, provider: DataProvider): Any? {
- for (modelExtension in NavBarModelExtension.EP_NAME.extensionList) {
- val data = modelExtension.getData(dataId, provider)
- if (data != null) return data
- }
- return provider.getData(dataId)
-}
-
internal class BgtDataRule : GetDataRule {
override fun getData(dataProvider: DataProvider): Any? {
diff --git a/platform/lang-impl/src/com/intellij/ide/navbar/impl/DefaultNavBarItem.kt b/platform/navbar.compatibility/backend/src/DefaultNavBarItem.kt
similarity index 99%
rename from platform/lang-impl/src/com/intellij/ide/navbar/impl/DefaultNavBarItem.kt
rename to platform/navbar.compatibility/backend/src/DefaultNavBarItem.kt
index f64d1f866161..fd90c27ab396 100644
--- a/platform/lang-impl/src/com/intellij/ide/navbar/impl/DefaultNavBarItem.kt
+++ b/platform/navbar.compatibility/backend/src/DefaultNavBarItem.kt
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.intellij.ide.navbar.impl
+package com.intellij.platform.navbar.compatibility.backend
import com.intellij.icons.AllIcons
import com.intellij.ide.navigationToolbar.NavBarModelExtension
diff --git a/platform/lang-impl/src/com/intellij/ide/navbar/actions/DefaultNavBarItemDataRule.kt b/platform/navbar.compatibility/backend/src/DefaultNavBarItemDataRule.kt
similarity index 97%
rename from platform/lang-impl/src/com/intellij/ide/navbar/actions/DefaultNavBarItemDataRule.kt
rename to platform/navbar.compatibility/backend/src/DefaultNavBarItemDataRule.kt
index 5973db82db44..5ce3f1874dc9 100644
--- a/platform/lang-impl/src/com/intellij/ide/navbar/actions/DefaultNavBarItemDataRule.kt
+++ b/platform/navbar.compatibility/backend/src/DefaultNavBarItemDataRule.kt
@@ -1,8 +1,7 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.intellij.ide.navbar.actions
+package com.intellij.platform.navbar.compatibility.backend
import com.intellij.ide.impl.dataRules.GetDataRule
-import com.intellij.ide.navbar.impl.*
import com.intellij.openapi.actionSystem.CommonDataKeys.*
import com.intellij.openapi.actionSystem.DataContext
import com.intellij.openapi.actionSystem.DataProvider
diff --git a/platform/lang-impl/src/com/intellij/ide/navbar/impl/DefaultNavBarItemProvider.kt b/platform/navbar.compatibility/backend/src/DefaultNavBarItemProvider.kt
similarity index 98%
rename from platform/lang-impl/src/com/intellij/ide/navbar/impl/DefaultNavBarItemProvider.kt
rename to platform/navbar.compatibility/backend/src/DefaultNavBarItemProvider.kt
index 2bac3bab6412..8f3d286a5c67 100644
--- a/platform/lang-impl/src/com/intellij/ide/navbar/impl/DefaultNavBarItemProvider.kt
+++ b/platform/navbar.compatibility/backend/src/DefaultNavBarItemProvider.kt
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.intellij.ide.navbar.impl
+package com.intellij.platform.navbar.compatibility.backend
import com.intellij.diagnostic.PluginException
import com.intellij.ide.navigationToolbar.NavBarModelExtension
@@ -26,7 +26,7 @@ import org.jetbrains.annotations.VisibleForTesting
*
* @see com.intellij.ide.navigationToolbar.NavBarModelExtension
*/
-class DefaultNavBarItemProvider : NavBarItemProvider {
+internal class DefaultNavBarItemProvider : NavBarItemProvider {
@RequiresReadLock
@RequiresBackgroundThread
diff --git a/platform/lang-impl/src/com/intellij/ide/navbar/ide/IdeNavBarVmItem.kt b/platform/navbar.compatibility/backend/src/IdeNavBarVmItem.kt
similarity index 96%
rename from platform/lang-impl/src/com/intellij/ide/navbar/ide/IdeNavBarVmItem.kt
rename to platform/navbar.compatibility/backend/src/IdeNavBarVmItem.kt
index acfd94cecf71..a2f440adde14 100644
--- a/platform/lang-impl/src/com/intellij/ide/navbar/ide/IdeNavBarVmItem.kt
+++ b/platform/navbar.compatibility/backend/src/IdeNavBarVmItem.kt
@@ -1,7 +1,6 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.intellij.ide.navbar.ide
+package com.intellij.platform.navbar.compatibility.backend
-import com.intellij.ide.navbar.impl.isModuleContentRoot
import com.intellij.model.Pointer
import com.intellij.openapi.application.readAction
import com.intellij.platform.navbar.NavBarItemPresentation
diff --git a/platform/lang-impl/src/com/intellij/ide/navbar/actions/NavBarIdeView.kt b/platform/navbar.compatibility/backend/src/NavBarIdeView.kt
similarity index 91%
rename from platform/lang-impl/src/com/intellij/ide/navbar/actions/NavBarIdeView.kt
rename to platform/navbar.compatibility/backend/src/NavBarIdeView.kt
index 36a41bbb5ad6..39f168ebc887 100644
--- a/platform/lang-impl/src/com/intellij/ide/navbar/actions/NavBarIdeView.kt
+++ b/platform/navbar.compatibility/backend/src/NavBarIdeView.kt
@@ -1,8 +1,7 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.intellij.ide.navbar.actions
+package com.intellij.platform.navbar.compatibility.backend
import com.intellij.ide.IdeView
-import com.intellij.ide.navbar.impl.psiDirectories
import com.intellij.ide.util.DirectoryChooserUtil
import com.intellij.platform.navbar.backend.NavBarItem
import com.intellij.pom.Navigatable
diff --git a/platform/lang-impl/src/com/intellij/ide/navbar/ide/activity.kt b/platform/navbar.compatibility/backend/src/activity.kt
similarity index 94%
rename from platform/lang-impl/src/com/intellij/ide/navbar/ide/activity.kt
rename to platform/navbar.compatibility/backend/src/activity.kt
index 30d3ce19fc6c..034133ae5865 100644
--- a/platform/lang-impl/src/com/intellij/ide/navbar/ide/activity.kt
+++ b/platform/navbar.compatibility/backend/src/activity.kt
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.intellij.ide.navbar.ide
+package com.intellij.platform.navbar.compatibility.backend
import com.intellij.ide.ui.VirtualFileAppearanceListener
import com.intellij.openapi.project.Project
diff --git a/platform/lang-impl/src/com/intellij/ide/navbar/impl/impl.kt b/platform/navbar.compatibility/backend/src/impl.kt
similarity index 96%
rename from platform/lang-impl/src/com/intellij/ide/navbar/impl/impl.kt
rename to platform/navbar.compatibility/backend/src/impl.kt
index 4e4bdd5e45e9..38deb49ac704 100644
--- a/platform/lang-impl/src/com/intellij/ide/navbar/impl/impl.kt
+++ b/platform/navbar.compatibility/backend/src/impl.kt
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.intellij.ide.navbar.impl
+package com.intellij.platform.navbar.compatibility.backend
import com.intellij.ide.projectView.impl.ProjectRootsUtil
import com.intellij.openapi.application.ApplicationManager
diff --git a/platform/navbar.compatibility/backend/src/package-info.java b/platform/navbar.compatibility/backend/src/package-info.java
new file mode 100644
index 000000000000..dbe511a168be
--- /dev/null
+++ b/platform/navbar.compatibility/backend/src/package-info.java
@@ -0,0 +1,5 @@
+// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+@Internal
+package com.intellij.platform.navbar.compatibility.backend;
+
+import org.jetbrains.annotations.ApiStatus.Internal;
diff --git a/platform/navbar.compatibility/monolith/intellij.platform.navbar.compatibility.monolith.iml b/platform/navbar.compatibility/monolith/intellij.platform.navbar.compatibility.monolith.iml
index 5d44c61fed22..98fee6c95604 100644
--- a/platform/navbar.compatibility/monolith/intellij.platform.navbar.compatibility.monolith.iml
+++ b/platform/navbar.compatibility/monolith/intellij.platform.navbar.compatibility.monolith.iml
@@ -14,5 +14,6 @@
+
\ No newline at end of file
diff --git a/platform/navbar.compatibility/monolith/resources/intellij.platform.navbar.compatibility.monolith.xml b/platform/navbar.compatibility/monolith/resources/intellij.platform.navbar.compatibility.monolith.xml
index 12988032e561..be081485c1fa 100644
--- a/platform/navbar.compatibility/monolith/resources/intellij.platform.navbar.compatibility.monolith.xml
+++ b/platform/navbar.compatibility/monolith/resources/intellij.platform.navbar.compatibility.monolith.xml
@@ -1,4 +1,7 @@
+
+
+
-
-
+
+
+
\ No newline at end of file
diff --git a/platform/navbar.compatibility/testFramework/src/testFramework.kt b/platform/navbar.compatibility/testFramework/src/testFramework.kt
index d673eee043b4..ace0f136e19e 100644
--- a/platform/navbar.compatibility/testFramework/src/testFramework.kt
+++ b/platform/navbar.compatibility/testFramework/src/testFramework.kt
@@ -1,9 +1,6 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.platform.navbar.compatibility.testFramework
-import com.intellij.ide.navbar.actions.getBgData
-import com.intellij.ide.navbar.impl.DefaultNavBarItem
-import com.intellij.ide.navbar.impl.compatibilityNavBarItem
import com.intellij.openapi.actionSystem.DataContext
import com.intellij.openapi.actionSystem.DataKey
import com.intellij.openapi.project.Project
@@ -11,6 +8,9 @@ import com.intellij.platform.navbar.NavBarItemPresentation
import com.intellij.platform.navbar.backend.NavBarItem
import com.intellij.platform.navbar.backend.impl.children
import com.intellij.platform.navbar.backend.impl.pathToItem
+import com.intellij.platform.navbar.compatibility.backend.DefaultNavBarItem
+import com.intellij.platform.navbar.compatibility.backend.compatibilityNavBarItem
+import com.intellij.platform.navbar.compatibility.backend.getBgData
import com.intellij.platform.navbar.ide.contextModel
import com.intellij.util.concurrency.annotations.RequiresReadLock
import org.jetbrains.annotations.ApiStatus.Internal
diff --git a/platform/platform-resources/src/META-INF/LangExtensions.xml b/platform/platform-resources/src/META-INF/LangExtensions.xml
index cd10c1953918..1abebd477269 100644
--- a/platform/platform-resources/src/META-INF/LangExtensions.xml
+++ b/platform/platform-resources/src/META-INF/LangExtensions.xml
@@ -697,18 +697,9 @@
-
-
-
-
diff --git a/platform/platform-resources/src/META-INF/PlatformLangPlugin.xml b/platform/platform-resources/src/META-INF/PlatformLangPlugin.xml
index e6cd43b9771d..5707b9a01e01 100644
--- a/platform/platform-resources/src/META-INF/PlatformLangPlugin.xml
+++ b/platform/platform-resources/src/META-INF/PlatformLangPlugin.xml
@@ -9,6 +9,7 @@
+