From 53068bf8e9a06bf4cb7e0f6075799c70f28d4fea Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Wed, 27 May 2026 13:42:17 +0200 Subject: [PATCH] IJPL-245430 move bookmark integrations to optional modules Language Server products intentionally do not include the platform bookmarks plugin. After bookmarks were pluginized, Java and VCS Log still had direct dependencies on bookmark implementation modules, which could exclude Java Core during plugin set resolution. Move the Java package and VCS Log bookmark providers into optional content modules loaded only with the relevant plugins, while keeping a small VCS Log support extension point in the core module. This preserves bookmark behavior when the bookmarks plugin is present without forcing bookmarks into products that exclude it. IJ-MR-184958 IJ-MR-184993 IJ-MR-179029 IJ-MR-184126 IJ-MR-181153 IJ-MR-146078 IJ-MR-175479 IJ-MR-186058 IJ-MR-193195 IJ-MR-196957 IJ-MR-199124 IJ-MR-197441 IJ-MR-204135 IJ-MR-204674 GitOrigin-RevId: f6bad861b518b5a6cdbaeed0e133c94041821b6d --- .idea/modules.xml | 2 + build/bazel-generated-file-list.txt | 2 + .../resources/META-INF/JavaPlugin.xml | 1 - java/java-bookmarks/BUILD.bazel | 53 ++++++++++++++++ .../intellij.java.bookmarks.iml | 44 +++++++++++++ .../resources/intellij.java.bookmarks.xml | 13 ++++ .../java/bookmarks}/PackageBookmark.kt | 2 +- .../bookmarks}/PackageBookmarkProvider.kt | 8 +-- .../intellij/java/bookmarks}/PackageNode.kt | 2 +- java/java-impl/BUILD.bazel | 3 - java/java-impl/intellij.java.impl.iml | 1 - .../resources/intellij.java.impl.xml | 2 - java/plugin/plugin-content.yaml | 1 + java/plugin/resources/META-INF/plugin.xml | 1 + platform/bookmarks/plugin/plugin-content.yaml | 3 + .../plugin/resources/META-INF/plugin.xml | 1 + .../resources/intellij.platform.bookmarks.xml | 2 +- platform/vcs-log/impl/BUILD.bazel | 2 - platform/vcs-log/impl/bookmarks/BUILD.bazel | 63 +++++++++++++++++++ platform/vcs-log/impl/bookmarks/api-dump.txt | 0 ...tellij.platform.vcs.log.impl.bookmarks.iml | 49 +++++++++++++++ ...tellij.platform.vcs.log.impl.bookmarks.xml | 31 +++++++++ .../impl/bookmarks}/VcsLogBookmarkProvider.kt | 50 ++++----------- .../impl/intellij.platform.vcs.log.impl.iml | 1 - .../intellij.platform.vcs.log.impl.xml | 9 +-- .../vcs/log/ui/VcsLogBookmarkSupport.kt | 44 +++++++++++++ .../ui/table/column/VcsLogDefaultColumn.kt | 6 +- .../xdebugger-impl/bookmarks/api-dump.txt | 0 ...ellij.platform.debugger.impl.bookmarks.iml | 2 +- .../impl/bookmarks/BreakpointListProvider.kt | 2 + .../intellij.platform.debugger.impl.ui.xml | 1 - 31 files changed, 332 insertions(+), 69 deletions(-) create mode 100644 java/java-bookmarks/BUILD.bazel create mode 100644 java/java-bookmarks/intellij.java.bookmarks.iml create mode 100644 java/java-bookmarks/resources/intellij.java.bookmarks.xml rename java/{java-impl/src/com/intellij/ide/bookmark/providers => java-bookmarks/src/com/intellij/java/bookmarks}/PackageBookmark.kt (97%) rename java/{java-impl/src/com/intellij/ide/bookmark/providers => java-bookmarks/src/com/intellij/java/bookmarks}/PackageBookmarkProvider.kt (79%) rename java/{java-impl/src/com/intellij/ide/bookmark/providers => java-bookmarks/src/com/intellij/java/bookmarks}/PackageNode.kt (95%) create mode 100644 platform/vcs-log/impl/bookmarks/BUILD.bazel create mode 100644 platform/vcs-log/impl/bookmarks/api-dump.txt create mode 100644 platform/vcs-log/impl/bookmarks/intellij.platform.vcs.log.impl.bookmarks.iml create mode 100644 platform/vcs-log/impl/bookmarks/resources/intellij.platform.vcs.log.impl.bookmarks.xml rename platform/vcs-log/impl/{src/com/intellij/vcs/log/ui => bookmarks/src/com/intellij/platform/vcs/log/impl/bookmarks}/VcsLogBookmarkProvider.kt (81%) create mode 100644 platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogBookmarkSupport.kt create mode 100644 platform/xdebugger-impl/bookmarks/api-dump.txt diff --git a/.idea/modules.xml b/.idea/modules.xml index 96bc18ab1466..27f8bc555099 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -617,6 +617,7 @@ + @@ -1716,6 +1717,7 @@ + diff --git a/build/bazel-generated-file-list.txt b/build/bazel-generated-file-list.txt index 4f9b8bee7400..a067298a7d97 100644 --- a/build/bazel-generated-file-list.txt +++ b/build/bazel-generated-file-list.txt @@ -296,6 +296,7 @@ java/idea-ui java/java-analysis-api java/java-analysis-impl java/java-backend +java/java-bookmarks java/java-copyright java/java-features-trainer java/java-frontback-impl @@ -916,6 +917,7 @@ platform/vcs-log/api platform/vcs-log/graph platform/vcs-log/graph-api platform/vcs-log/impl +platform/vcs-log/impl/bookmarks platform/vcs-tests platform/warmup platform/warmup/performanceTesting diff --git a/java/java-backend/resources/META-INF/JavaPlugin.xml b/java/java-backend/resources/META-INF/JavaPlugin.xml index 0d8e889d93f2..9da9b11346a2 100644 --- a/java/java-backend/resources/META-INF/JavaPlugin.xml +++ b/java/java-backend/resources/META-INF/JavaPlugin.xml @@ -860,7 +860,6 @@ - diff --git a/java/java-bookmarks/BUILD.bazel b/java/java-bookmarks/BUILD.bazel new file mode 100644 index 000000000000..300b2d07b13b --- /dev/null +++ b/java/java-bookmarks/BUILD.bazel @@ -0,0 +1,53 @@ +### auto-generated section `build intellij.java.bookmarks` start +load("@rules_jvm//:jvm.bzl", "jvm_library") + +jvm_library( + name = "bookmarks", + module_name = "intellij.java.bookmarks", + visibility = ["//visibility:public"], + srcs = glob(["src/**/*.kt", "src/**/*.java", "src/**/*.form"], allow_empty = True), + resources = glob(["resources/**/*"]), + resource_strip_prefix = "resources", + deps = [ + "//platform/bookmarks", + "//platform/core-api:core", + "//platform/core-impl", + "//platform/editor-ui-api:editor-ui", + "//platform/lang-api:lang", + "//platform/lang-impl", + "//platform/projectModel-api:projectModel", + "//platform/util", + "//platform/util:util-ui", + "//java/java-impl:impl", + "//java/java-psi-api:psi", + ] +) + +jvm_library( + name = "bookmarks_test_lib", + testonly = True, + module_name = "intellij.java.bookmarks", + visibility = ["//visibility:public"], + srcs = glob([], allow_empty = True), + runtime_deps = [ + ":bookmarks", + "//platform/bookmarks:bookmarks_test_lib", + "//platform/core-api:core_test_lib", + "//platform/core-impl:core-impl_test_lib", + "//platform/editor-ui-api:editor-ui_test_lib", + "//platform/lang-api:lang_test_lib", + "//platform/lang-impl:lang-impl_test_lib", + "//platform/projectModel-api:projectModel_test_lib", + "//platform/util:util_test_lib", + "//platform/util:util-ui_test_lib", + "//java/java-impl:impl_test_lib", + "//java/java-psi-api:psi_test_lib", + ] +) +### auto-generated section `build intellij.java.bookmarks` end + +### auto-generated section `iml intellij.java.bookmarks` start +exports_files([ + "intellij.java.bookmarks.iml", +], visibility = ["//visibility:public"]) +### auto-generated section `iml intellij.java.bookmarks` end \ No newline at end of file diff --git a/java/java-bookmarks/intellij.java.bookmarks.iml b/java/java-bookmarks/intellij.java.bookmarks.iml new file mode 100644 index 000000000000..8b0a7e2c0876 --- /dev/null +++ b/java/java-bookmarks/intellij.java.bookmarks.iml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + $KOTLIN_BUNDLED$/lib/kotlinx-serialization-compiler-plugin.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/java/java-bookmarks/resources/intellij.java.bookmarks.xml b/java/java-bookmarks/resources/intellij.java.bookmarks.xml new file mode 100644 index 000000000000..daa9e125b887 --- /dev/null +++ b/java/java-bookmarks/resources/intellij.java.bookmarks.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/java/java-impl/src/com/intellij/ide/bookmark/providers/PackageBookmark.kt b/java/java-bookmarks/src/com/intellij/java/bookmarks/PackageBookmark.kt similarity index 97% rename from java/java-impl/src/com/intellij/ide/bookmark/providers/PackageBookmark.kt rename to java/java-bookmarks/src/com/intellij/java/bookmarks/PackageBookmark.kt index b11fd72bafb1..e5480e9cffab 100644 --- a/java/java-impl/src/com/intellij/ide/bookmark/providers/PackageBookmark.kt +++ b/java/java-bookmarks/src/com/intellij/java/bookmarks/PackageBookmark.kt @@ -1,5 +1,5 @@ // Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.intellij.ide.bookmark.providers +package com.intellij.java.bookmarks import com.intellij.ide.bookmark.Bookmark import com.intellij.ide.projectView.impl.nodes.PackageElement diff --git a/java/java-impl/src/com/intellij/ide/bookmark/providers/PackageBookmarkProvider.kt b/java/java-bookmarks/src/com/intellij/java/bookmarks/PackageBookmarkProvider.kt similarity index 79% rename from java/java-impl/src/com/intellij/ide/bookmark/providers/PackageBookmarkProvider.kt rename to java/java-bookmarks/src/com/intellij/java/bookmarks/PackageBookmarkProvider.kt index 31180cb77e36..e86431e454c4 100644 --- a/java/java-impl/src/com/intellij/ide/bookmark/providers/PackageBookmarkProvider.kt +++ b/java/java-bookmarks/src/com/intellij/java/bookmarks/PackageBookmarkProvider.kt @@ -1,12 +1,11 @@ -// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.intellij.ide.bookmark.providers +// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.java.bookmarks import com.intellij.ide.bookmark.Bookmark import com.intellij.ide.bookmark.BookmarkProvider import com.intellij.ide.projectView.impl.nodes.PackageElement import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.project.Project -import com.intellij.openapi.roots.ui.configuration.ProjectSettingsService import com.intellij.openapi.util.text.StringUtil import com.intellij.psi.JavaPsiFacade @@ -17,9 +16,6 @@ internal class PackageBookmarkProvider(private val project: Project) : BookmarkP internal val moduleManager: ModuleManager? get() = if (project.isDisposed) null else ModuleManager.getInstance(project) - internal val projectSettingsService: ProjectSettingsService? - get() = if (project.isDisposed) null else ProjectSettingsService.getInstance(project) - override fun compare(bookmark1: Bookmark, bookmark2: Bookmark): Int { bookmark1 as PackageBookmark bookmark2 as PackageBookmark diff --git a/java/java-impl/src/com/intellij/ide/bookmark/providers/PackageNode.kt b/java/java-bookmarks/src/com/intellij/java/bookmarks/PackageNode.kt similarity index 95% rename from java/java-impl/src/com/intellij/ide/bookmark/providers/PackageNode.kt rename to java/java-bookmarks/src/com/intellij/java/bookmarks/PackageNode.kt index e980e7ae480e..da85a6369eb4 100644 --- a/java/java-impl/src/com/intellij/ide/bookmark/providers/PackageNode.kt +++ b/java/java-bookmarks/src/com/intellij/java/bookmarks/PackageNode.kt @@ -1,5 +1,5 @@ // Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.intellij.ide.bookmark.providers +package com.intellij.java.bookmarks import com.intellij.ide.bookmark.ui.tree.BookmarkNode import com.intellij.ide.projectView.PresentationData diff --git a/java/java-impl/BUILD.bazel b/java/java-impl/BUILD.bazel index a09d731a041d..797b5b0333f4 100644 --- a/java/java-impl/BUILD.bazel +++ b/java/java-impl/BUILD.bazel @@ -97,7 +97,6 @@ jvm_library( "//libraries/markdown", "//platform/threadDumpParser", "//platform/eel-provider", - "//platform/bookmarks", "//platform/todo", "//java/codeserver/highlighting", "//java/codeserver/core", @@ -285,8 +284,6 @@ jvm_library( "//platform/threadDumpParser:threadDumpParser_test_lib", "//platform/eel-provider", "//platform/eel-provider:eel-provider_test_lib", - "//platform/bookmarks", - "//platform/bookmarks:bookmarks_test_lib", "//platform/todo", "//platform/todo:todo_test_lib", "//java/codeserver/highlighting", diff --git a/java/java-impl/intellij.java.impl.iml b/java/java-impl/intellij.java.impl.iml index cb6403ae13a4..e529737031fc 100644 --- a/java/java-impl/intellij.java.impl.iml +++ b/java/java-impl/intellij.java.impl.iml @@ -132,7 +132,6 @@ - diff --git a/java/java-impl/resources/intellij.java.impl.xml b/java/java-impl/resources/intellij.java.impl.xml index f03b8db3a7e6..dc065d84d4c2 100644 --- a/java/java-impl/resources/intellij.java.impl.xml +++ b/java/java-impl/resources/intellij.java.impl.xml @@ -8,7 +8,6 @@ - @@ -26,7 +25,6 @@ - diff --git a/java/plugin/plugin-content.yaml b/java/plugin/plugin-content.yaml index afdb68c75889..ce2524ffafcb 100644 --- a/java/plugin/plugin-content.yaml +++ b/java/plugin/plugin-content.yaml @@ -18,6 +18,7 @@ - name: intellij.java.psi - name: intellij.java.psi.impl - name: intellij.java.frontback.impl + - name: intellij.java.bookmarks - name: intellij.platform.jps.build.javac.rt - name: intellij.java.guiForms.compiler - name: intellij.java.compiler.antTasks diff --git a/java/plugin/resources/META-INF/plugin.xml b/java/plugin/resources/META-INF/plugin.xml index a539e1551f03..7531fbcc1e36 100644 --- a/java/plugin/resources/META-INF/plugin.xml +++ b/java/plugin/resources/META-INF/plugin.xml @@ -45,6 +45,7 @@ + diff --git a/platform/bookmarks/plugin/plugin-content.yaml b/platform/bookmarks/plugin/plugin-content.yaml index 1d3444fa9828..1510e77701f0 100644 --- a/platform/bookmarks/plugin/plugin-content.yaml +++ b/platform/bookmarks/plugin/plugin-content.yaml @@ -1,6 +1,9 @@ - name: lib/modules/intellij.platform.bookmarks.jar contentModules: - name: intellij.platform.bookmarks +- name: lib/modules/intellij.platform.vcs.log.impl.bookmarks.jar + contentModules: + - name: intellij.platform.vcs.log.impl.bookmarks - name: lib/platform-bookmarks-plugin.jar modules: - name: intellij.platform.bookmarks.plugin diff --git a/platform/bookmarks/plugin/resources/META-INF/plugin.xml b/platform/bookmarks/plugin/resources/META-INF/plugin.xml index 49cf7dc1866d..d51460e860e2 100644 --- a/platform/bookmarks/plugin/resources/META-INF/plugin.xml +++ b/platform/bookmarks/plugin/resources/META-INF/plugin.xml @@ -11,5 +11,6 @@ + diff --git a/platform/bookmarks/resources/intellij.platform.bookmarks.xml b/platform/bookmarks/resources/intellij.platform.bookmarks.xml index 26021334a4c3..7ae83da64f71 100644 --- a/platform/bookmarks/resources/intellij.platform.bookmarks.xml +++ b/platform/bookmarks/resources/intellij.platform.bookmarks.xml @@ -53,7 +53,7 @@ - + + + + + + + + + + + + + + + + $KOTLIN_BUNDLED$/lib/kotlinx-serialization-compiler-plugin.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platform/vcs-log/impl/bookmarks/resources/intellij.platform.vcs.log.impl.bookmarks.xml b/platform/vcs-log/impl/bookmarks/resources/intellij.platform.vcs.log.impl.bookmarks.xml new file mode 100644 index 000000000000..5951b5c6dd2f --- /dev/null +++ b/platform/vcs-log/impl/bookmarks/resources/intellij.platform.vcs.log.impl.bookmarks.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogBookmarkProvider.kt b/platform/vcs-log/impl/bookmarks/src/com/intellij/platform/vcs/log/impl/bookmarks/VcsLogBookmarkProvider.kt similarity index 81% rename from platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogBookmarkProvider.kt rename to platform/vcs-log/impl/bookmarks/src/com/intellij/platform/vcs/log/impl/bookmarks/VcsLogBookmarkProvider.kt index 87a3b5334ff6..db19a9e060cb 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogBookmarkProvider.kt +++ b/platform/vcs-log/impl/bookmarks/src/com/intellij/platform/vcs/log/impl/bookmarks/VcsLogBookmarkProvider.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.vcs.log.ui +package com.intellij.platform.vcs.log.impl.bookmarks import com.intellij.ide.bookmark.Bookmark import com.intellij.ide.bookmark.BookmarkGroup @@ -10,15 +10,12 @@ import com.intellij.ide.bookmark.BookmarksManager import com.intellij.ide.bookmark.ui.tree.BookmarkNode import com.intellij.ide.projectView.PresentationData import com.intellij.ide.util.treeView.AbstractTreeNode -import com.intellij.openapi.components.Service -import com.intellij.openapi.components.service import com.intellij.openapi.project.Project import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.vcs.VcsNotifier import com.intellij.openapi.vfs.LocalFileSystem import com.intellij.openapi.vfs.VirtualFile import com.intellij.ui.SimpleTextAttributes -import com.intellij.util.messages.Topic import com.intellij.vcs.log.CommitId import com.intellij.vcs.log.Hash import com.intellij.vcs.log.VcsLogBundle @@ -26,9 +23,10 @@ import com.intellij.vcs.log.data.LoadingDetails import com.intellij.vcs.log.impl.HashImpl import com.intellij.vcs.log.impl.VcsLogNavigationUtil import com.intellij.vcs.log.impl.VcsProjectLog -import org.jetbrains.annotations.ApiStatus -import org.jetbrains.annotations.Nls -import java.util.EventListener +import com.intellij.vcs.log.ui.VcsBookmarkRef +import com.intellij.vcs.log.ui.VcsLogBookmarkSupport +import com.intellij.vcs.log.ui.VcsLogBookmarksListener +import com.intellij.vcs.log.ui.VcsLogNotificationIdsHolder import java.util.Objects private const val ROOT_KEY = "root" @@ -53,9 +51,7 @@ internal class VcsLogBookmarkProvider(private val project: Project) : BookmarkPr } override fun createBookmark(context: Any?): Bookmark? = when (context) { - is CommitId -> { - VcsLogBookmark(this, context.root, context.hash) - } + is CommitId -> VcsLogBookmark(this, context.root, context.hash) else -> null } } @@ -72,11 +68,11 @@ internal class VcsLogBookmark(override val provider: VcsLogBookmarkProvider, override fun canNavigate(): Boolean = true override fun canNavigateToSource(): Boolean = false override fun navigate(requestFocus: Boolean) { - VcsLogNavigationUtil.jumpToRevisionAsync(provider.project, root, hash).whenComplete { result: Boolean?, error -> + VcsLogNavigationUtil.jumpToRevisionAsync(provider.project, root, hash).whenComplete { result: Boolean?, _ -> if (result != true) { val commitPresentation = VcsLogBundle.message("vcs.log.commit.prefix", hash) val message = VcsLogBundle.message("vcs.log.commit.not.found", commitPresentation) - VcsNotifier.getInstance(provider.project).notifyWarning(VcsLogNotificationIdsHolder.COMMIT_NOT_FOUND, "", message); + VcsNotifier.getInstance(provider.project).notifyWarning(VcsLogNotificationIdsHolder.COMMIT_NOT_FOUND, "", message) } } } @@ -129,16 +125,8 @@ private fun getDefaultBookmarkDescription(project: Project, root: VirtualFile, h return details.subject.ifBlank { VcsLogBundle.message("vcs.log.bookmark.description.empty.subject") } } -@Service(Service.Level.PROJECT) -internal class VcsLogBookmarkReferenceProvider(val project: Project) { - companion object { - @JvmStatic - fun getBookmarkRefs(project: Project, hash: Hash, root: VirtualFile): List { - return project.service().getBookmarkRefs(hash, root) - } - } - - fun getBookmarkRefs(hash: Hash, root: VirtualFile): List { +internal class VcsLogBookmarkSupportImpl : VcsLogBookmarkSupport { + override fun getRefs(project: Project, hash: Hash, root: VirtualFile): List { val bookmarksManager = BookmarksManager.getInstance(project) ?: return emptyList() return bookmarksManager.bookmarks .filterIsInstance() @@ -154,7 +142,7 @@ internal class VcsLogBookmarkReferenceProvider(val project: Project) { } } -internal class VcsLogBookmarksManagerListener(val project: Project) : BookmarksListener { +internal class VcsLogBookmarksManagerListener(private val project: Project) : BookmarksListener { private fun updateBookmark(bookmark: Bookmark) { if (bookmark is VcsLogBookmark) { project.messageBus.syncPublisher(VcsLogBookmarksListener.TOPIC).logBookmarksChanged() @@ -177,19 +165,3 @@ internal class VcsLogBookmarksManagerListener(val project: Project) : BookmarksL updateBookmark(bookmark) } } - -@ApiStatus.Internal -class VcsBookmarkRef(val bookmark: Bookmark, val type: BookmarkType, val text: @Nls String) - -internal interface VcsLogBookmarksListener : EventListener { - companion object { - @JvmField - @Topic.AppLevel - val TOPIC = Topic(VcsLogBookmarksListener::class.java, Topic.BroadcastDirection.NONE) - } - - /** - * Allows notifying VCS Log that the [VcsLogBookmarkReferenceProvider.getBookmarkRefs] might have changed. - */ - fun logBookmarksChanged() = Unit -} diff --git a/platform/vcs-log/impl/intellij.platform.vcs.log.impl.iml b/platform/vcs-log/impl/intellij.platform.vcs.log.impl.iml index 76fdb5063a60..f6f41b5da4a5 100644 --- a/platform/vcs-log/impl/intellij.platform.vcs.log.impl.iml +++ b/platform/vcs-log/impl/intellij.platform.vcs.log.impl.iml @@ -59,7 +59,6 @@ - diff --git a/platform/vcs-log/impl/resources/intellij.platform.vcs.log.impl.xml b/platform/vcs-log/impl/resources/intellij.platform.vcs.log.impl.xml index bea8496901bc..0b5eef4050bf 100644 --- a/platform/vcs-log/impl/resources/intellij.platform.vcs.log.impl.xml +++ b/platform/vcs-log/impl/resources/intellij.platform.vcs.log.impl.xml @@ -11,7 +11,6 @@ - @@ -60,6 +59,9 @@ + @@ -142,8 +144,6 @@ - - ." @@ -161,8 +161,6 @@ - @@ -413,4 +411,3 @@ - diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogBookmarkSupport.kt b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogBookmarkSupport.kt new file mode 100644 index 000000000000..56f0c073a174 --- /dev/null +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogBookmarkSupport.kt @@ -0,0 +1,44 @@ +// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.vcs.log.ui + +import com.intellij.ide.bookmark.Bookmark +import com.intellij.ide.bookmark.BookmarkType +import com.intellij.openapi.extensions.ExtensionPointName +import com.intellij.openapi.project.Project +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.util.messages.Topic +import com.intellij.vcs.log.Hash +import org.jetbrains.annotations.ApiStatus +import org.jetbrains.annotations.Nls +import java.util.EventListener + +@ApiStatus.Internal +interface VcsLogBookmarkSupport { + fun getRefs(project: Project, hash: Hash, root: VirtualFile): List + + companion object { + private val EP = ExtensionPointName.create("com.intellij.vcs.log.bookmarkSupport") + + @JvmStatic + fun getBookmarkRefs(project: Project, hash: Hash, root: VirtualFile): List { + return EP.extensionList.flatMap { it.getRefs(project, hash, root) } + } + } +} + +@ApiStatus.Internal +class VcsBookmarkRef(val bookmark: Bookmark, val type: BookmarkType, val text: @Nls String) + +@ApiStatus.Internal +interface VcsLogBookmarksListener : EventListener { + companion object { + @JvmField + @Topic.AppLevel + val TOPIC: Topic = Topic(VcsLogBookmarksListener::class.java, Topic.BroadcastDirection.NONE) + } + + /** + * Allows notifying VCS Log that the [VcsLogBookmarkSupport.getBookmarkRefs] might have changed. + */ + fun logBookmarksChanged(): Unit = Unit +} diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/column/VcsLogDefaultColumn.kt b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/column/VcsLogDefaultColumn.kt index fbb24ecb4d92..42c6023877aa 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/column/VcsLogDefaultColumn.kt +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/column/VcsLogDefaultColumn.kt @@ -18,7 +18,7 @@ import com.intellij.vcs.log.impl.CommonUiProperties import com.intellij.vcs.log.impl.onPropertyChange import com.intellij.vcs.log.paint.GraphCellPainter import com.intellij.vcs.log.paint.SimpleGraphCellPainter -import com.intellij.vcs.log.ui.VcsLogBookmarkReferenceProvider.Companion.getBookmarkRefs +import com.intellij.vcs.log.ui.VcsLogBookmarkSupport import com.intellij.vcs.log.ui.VcsLogBookmarksListener import com.intellij.vcs.log.ui.frame.CommitPresentationUtil import com.intellij.vcs.log.ui.render.GraphCommitCell @@ -44,7 +44,7 @@ internal fun getDefaultDynamicColumns() = listOf>(Author, @ApiStatus.Internal sealed class VcsLogDefaultColumn( - @NonNls override val id: String, + @param:NonNls override val id: String, override val localizedName: @Nls String, override val isDynamic: Boolean = true, ) : VcsLogColumn { @@ -96,7 +96,7 @@ object Commit : VcsLogDefaultColumn("Default.Subject", VcsLogBu commitId, getValue(model, metadata), model.getRefsAtRow(row), - if (metadata !is LoadingDetails) getBookmarkRefs(model.logData.project, metadata.id, metadata.root) else emptyList(), + if (metadata !is LoadingDetails) VcsLogBookmarkSupport.getBookmarkRefs(model.logData.project, metadata.id, metadata.root) else emptyList(), printElements, metadata is LoadingDetails ) diff --git a/platform/xdebugger-impl/bookmarks/api-dump.txt b/platform/xdebugger-impl/bookmarks/api-dump.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/platform/xdebugger-impl/bookmarks/intellij.platform.debugger.impl.bookmarks.iml b/platform/xdebugger-impl/bookmarks/intellij.platform.debugger.impl.bookmarks.iml index 57e4525cb0dc..33e46da83788 100644 --- a/platform/xdebugger-impl/bookmarks/intellij.platform.debugger.impl.bookmarks.iml +++ b/platform/xdebugger-impl/bookmarks/intellij.platform.debugger.impl.bookmarks.iml @@ -52,4 +52,4 @@ - + \ No newline at end of file diff --git a/platform/xdebugger-impl/bookmarks/src/com/intellij/platform/debugger/impl/bookmarks/BreakpointListProvider.kt b/platform/xdebugger-impl/bookmarks/src/com/intellij/platform/debugger/impl/bookmarks/BreakpointListProvider.kt index 2631de6f37e4..10ff3974f532 100644 --- a/platform/xdebugger-impl/bookmarks/src/com/intellij/platform/debugger/impl/bookmarks/BreakpointListProvider.kt +++ b/platform/xdebugger-impl/bookmarks/src/com/intellij/platform/debugger/impl/bookmarks/BreakpointListProvider.kt @@ -28,6 +28,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import org.jetbrains.annotations.ApiStatus import org.jetbrains.annotations.PropertyKey import java.util.concurrent.atomic.AtomicBoolean import javax.swing.JComponent @@ -199,6 +200,7 @@ internal class BreakpointListProvider(private val project: Project) : BookmarksL } } +@ApiStatus.Internal @Service(Service.Level.PROJECT) class BreakpointListUpdaterService(internal val cs: CoroutineScope) { @Volatile diff --git a/platform/xdebugger-impl/ui/resources/intellij.platform.debugger.impl.ui.xml b/platform/xdebugger-impl/ui/resources/intellij.platform.debugger.impl.ui.xml index b50d5c752ebe..799df286fa88 100644 --- a/platform/xdebugger-impl/ui/resources/intellij.platform.debugger.impl.ui.xml +++ b/platform/xdebugger-impl/ui/resources/intellij.platform.debugger.impl.ui.xml @@ -114,7 +114,6 @@ -