mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[vcs] IJPL-213061 Log: Fix branch submenu presence
IJ-MR-179021 GitOrigin-RevId: 84dfa2b4357cbd366c8b602bd4215a51582021b5
This commit is contained in:
committed by
intellij-monorepo-bot
parent
b1d7e6c717
commit
7cb0be8f15
@@ -5,6 +5,7 @@ import com.intellij.openapi.actionSystem.ActionGroup
|
||||
import com.intellij.openapi.actionSystem.ActionManager
|
||||
import com.intellij.openapi.actionSystem.DataKey
|
||||
import com.intellij.openapi.actionSystem.DefaultActionGroup
|
||||
import com.intellij.vcs.git.actions.GitSingleRefActions.GIT_SINGLE_REF_ACTION_GROUP
|
||||
import git4idea.GitReference
|
||||
import org.intellij.lang.annotations.Language
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
@@ -18,6 +19,11 @@ object GitSingleRefActions {
|
||||
@JvmField
|
||||
val SELECTED_REF_DATA_KEY: DataKey<GitReference> = DataKey.create("Git.Selected.Ref")
|
||||
|
||||
/**
|
||||
* @return [ActionGroup] of [ActionGroup]s of actions for the single reference. The client code should handle it properly
|
||||
*
|
||||
* @see [GIT_SINGLE_REF_ACTION_GROUP] structure in intellij.vcs.git.shared.xml
|
||||
*/
|
||||
@JvmStatic
|
||||
fun getSingleRefActionGroup(): ActionGroup =
|
||||
ActionManager.getInstance().getAction(GIT_SINGLE_REF_ACTION_GROUP) as? ActionGroup ?: DefaultActionGroup()
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package git4idea.ui.branch
|
||||
|
||||
import com.intellij.openapi.actionSystem.AnAction
|
||||
import com.intellij.openapi.actionSystem.AnActionWrapper
|
||||
import com.intellij.openapi.actionSystem.DataSink
|
||||
import com.intellij.openapi.actionSystem.DataSnapshotProvider
|
||||
import com.intellij.openapi.actionSystem.*
|
||||
import com.intellij.vcs.git.actions.GitSingleRefActions
|
||||
import git4idea.GitBranch
|
||||
import git4idea.actions.branch.GitBranchActionsDataKeys
|
||||
@@ -25,7 +22,37 @@ internal class GitBranchActionWrapper(
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun tryWrap(action: AnAction, branch: GitBranch, selectedRepository: GitRepository, repositories: List<GitRepository>) =
|
||||
if (action is GitSingleRefAction<*>) GitBranchActionWrapper(action, branch, selectedRepository, repositories) else action
|
||||
fun wrapActions(
|
||||
actions: Array<AnAction>,
|
||||
e: AnActionEvent?,
|
||||
branch: GitBranch,
|
||||
selectedRepository: GitRepository,
|
||||
repositories: List<GitRepository>,
|
||||
): Array<AnAction> {
|
||||
val wrappedActions = mutableListOf<AnAction>()
|
||||
for (action in actions) {
|
||||
doWrapActions(wrappedActions, e, action, branch, selectedRepository, repositories)
|
||||
}
|
||||
return wrappedActions.toTypedArray()
|
||||
}
|
||||
|
||||
private fun doWrapActions(
|
||||
result: MutableList<AnAction>,
|
||||
e: AnActionEvent?,
|
||||
action: AnAction,
|
||||
branch: GitBranch,
|
||||
selectedRepository: GitRepository,
|
||||
repositories: List<GitRepository>,
|
||||
) {
|
||||
when (action) {
|
||||
is GitSingleRefAction<*> -> result.add(GitBranchActionWrapper(action, branch, selectedRepository, repositories))
|
||||
is ActionGroup -> {
|
||||
action.getChildren(e).forEach {
|
||||
doWrapActions(result, e, it, branch, selectedRepository, repositories)
|
||||
}
|
||||
}
|
||||
else -> result.add(action)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@ import java.util.*;
|
||||
|
||||
import static com.intellij.dvcs.DvcsUtil.getShortHash;
|
||||
import static com.intellij.util.ObjectUtils.notNull;
|
||||
import static com.intellij.util.containers.ContainerUtil.map2Array;
|
||||
import static com.intellij.util.containers.ContainerUtil.map2SetNotNull;
|
||||
import static git4idea.GitUtil.HEAD;
|
||||
import static git4idea.branch.GitBranchType.LOCAL;
|
||||
@@ -352,8 +351,6 @@ public final class GitBranchPopupActions {
|
||||
@NotNull GitRepository selectedRepository,
|
||||
@Nullable AnActionEvent e) {
|
||||
AnAction[] actions = GitSingleRefActions.getSingleRefActionGroup().getChildren(e);
|
||||
return map2Array(actions,
|
||||
AnAction.class,
|
||||
action -> GitBranchActionWrapper.tryWrap(action, branch, selectedRepository, repositories));
|
||||
return GitBranchActionWrapper.wrapActions(actions, e, branch,selectedRepository, repositories);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user