From 81ec05aefaec9947b9eb19d59c416c8726a98da4 Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Fri, 22 Mar 2024 17:15:44 +0100 Subject: [PATCH] IJPL-850 extract `intellij.platform.navbar.compatibility.backend` module (2/2) GitOrigin-RevId: a98a521db78189f60906d5c6dc563f8b956c1e49 --- .idea/modules.xml | 1 + .../intellij/ide/navbar/actions/extensions.kt | 137 +----------------- ....platform.navbar.compatibility.backend.iml | 21 +++ ....platform.navbar.compatibility.backend.xml | 13 ++ .../backend/src/BgtDataRule.kt | 27 +--- .../backend/src}/DefaultNavBarItem.kt | 2 +- .../backend/src}/DefaultNavBarItemDataRule.kt | 3 +- .../backend/src}/DefaultNavBarItemProvider.kt | 4 +- .../backend/src}/IdeNavBarVmItem.kt | 3 +- .../backend/src}/NavBarIdeView.kt | 3 +- .../backend/src}/activity.kt | 2 +- .../backend/src}/impl.kt | 2 +- .../backend/src/package-info.java | 5 + ...platform.navbar.compatibility.monolith.iml | 1 + ...platform.navbar.compatibility.monolith.xml | 3 + .../src/MonolithNavBarServiceDelegate.kt | 8 +- ...orm.navbar.compatibility.testFramework.iml | 5 +- .../testFramework/src/testFramework.kt | 6 +- .../src/META-INF/LangExtensions.xml | 9 -- .../src/META-INF/PlatformLangPlugin.xml | 1 + 20 files changed, 67 insertions(+), 189 deletions(-) create mode 100644 platform/navbar.compatibility/backend/intellij.platform.navbar.compatibility.backend.iml create mode 100644 platform/navbar.compatibility/backend/resources/intellij.platform.navbar.compatibility.backend.xml rename platform/{lang-impl/src/com/intellij/ide/navbar/impl => navbar.compatibility/backend/src}/DefaultNavBarItem.kt (99%) rename platform/{lang-impl/src/com/intellij/ide/navbar/actions => navbar.compatibility/backend/src}/DefaultNavBarItemDataRule.kt (97%) rename platform/{lang-impl/src/com/intellij/ide/navbar/impl => navbar.compatibility/backend/src}/DefaultNavBarItemProvider.kt (98%) rename platform/{lang-impl/src/com/intellij/ide/navbar/ide => navbar.compatibility/backend/src}/IdeNavBarVmItem.kt (96%) rename platform/{lang-impl/src/com/intellij/ide/navbar/actions => navbar.compatibility/backend/src}/NavBarIdeView.kt (91%) rename platform/{lang-impl/src/com/intellij/ide/navbar/ide => navbar.compatibility/backend/src}/activity.kt (94%) rename platform/{lang-impl/src/com/intellij/ide/navbar/impl => navbar.compatibility/backend/src}/impl.kt (96%) create mode 100644 platform/navbar.compatibility/backend/src/package-info.java 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 @@ +