From 56f9729a103fb0774d6f673f0ccb3b30c6146a4b Mon Sep 17 00:00:00 2001
From: hjk <hjk@theqtcompany.com>
Date: Tue, 23 Jun 2015 12:26:27 +0200
Subject: [PATCH] Git: Remove last user of Core::Id::fromUniqueIdentifier

Change-Id: I049a89a17341205275f68b22fe18234c756dec78
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
---
 src/plugins/git/gitplugin.cpp | 119 ++++++++++++++++++----------------
 src/plugins/git/gitplugin.h   |  13 +++-
 2 files changed, 74 insertions(+), 58 deletions(-)

diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index e59b17a4527..b3f433dce56 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -241,11 +241,21 @@ QAction *GitPlugin::createRepositoryAction(ActionContainer *ac,
 QAction *GitPlugin::createRepositoryAction(ActionContainer *ac,
                                            const QString &text, Id id,
                                            const Context &context, bool addToLocator,
-                                           const char *pluginSlot, const QKeySequence &keys)
+                                           const std::function<void()> &callback, const QKeySequence &keys)
 {
     QAction *action = createRepositoryAction(ac, text, id, context, addToLocator, keys);
-    connect(action, SIGNAL(triggered()), this, pluginSlot);
-    action->setData(id.uniqueIdentifier());
+    connect(action, &QAction::triggered, this, callback);
+    return action;
+}
+
+QAction *GitPlugin::createChangeRelatedRepositoryAction(ActionContainer *ac,
+                                                        const QString &text, Id id,
+                                                        const Context &context, bool addToLocator,
+                                                        const std::function<void(Id)> &callback,
+                                                        const QKeySequence &keys)
+{
+    QAction *action = createRepositoryAction(ac, text, id, context, addToLocator, keys);
+    connect(action, &QAction::triggered, this, [callback, id] { callback(id); });
     return action;
 }
 
@@ -360,18 +370,16 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     gitContainer->addMenu(localRepositoryMenu);
 
     createRepositoryAction(localRepositoryMenu, tr("Diff"), "Git.DiffRepository",
-                           context, true, SLOT(diffRepository()));
+                           context, true, [this] { diffRepository(); });
 
     createRepositoryAction(localRepositoryMenu, tr("Log"), "Git.LogRepository",
-                           context, true,
-                           SLOT(logRepository()));
+                           context, true, [this] { logRepository(); });
 
     createRepositoryAction(localRepositoryMenu, tr("Reflog"), "Git.ReflogRepository",
-                           context, true,
-                           SLOT(reflogRepository()));
+                           context, true, [this] { reflogRepository(); });
 
     createRepositoryAction(localRepositoryMenu, tr("Clean..."), "Git.CleanRepository",
-                           context, true, SLOT(cleanRepository()));
+                           context, true, [this] { cleanRepository(); });
 
     createRepositoryAction(localRepositoryMenu, tr("Status"), "Git.StatusRepository",
                            context, true, &GitClient::status);
@@ -380,75 +388,75 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     localRepositoryMenu->addSeparator(context);
 
     createRepositoryAction(localRepositoryMenu, tr("Commit..."), "Git.Commit",
-                           context, true, SLOT(startCommit()),
+                           context, true, [this] { startCommit(); },
                            QKeySequence(UseMacShortcuts ? tr("Meta+G,Meta+C") : tr("Alt+G,Alt+C")));
 
     createRepositoryAction(localRepositoryMenu,
                            tr("Amend Last Commit..."), "Git.AmendCommit",
-                           context, true, SLOT(startAmendCommit()));
+                           context, true, [this] { startAmendCommit(); });
 
     m_fixupCommitAction =
             createRepositoryAction(localRepositoryMenu,
                                    tr("Fixup Previous Commit..."), "Git.FixupCommit",
-                                   context, true, SLOT(startFixupCommit()));
+                                   context, true, [this] { startFixupCommit(); });
 
     // --------------
     localRepositoryMenu->addSeparator(context);
 
     createRepositoryAction(localRepositoryMenu,
                            tr("Reset..."), "Git.Reset",
-                           context, true, SLOT(resetRepository()));
+                           context, true, [this] { resetRepository(); });
 
     m_interactiveRebaseAction =
             createRepositoryAction(localRepositoryMenu,
                                    tr("Interactive Rebase..."), "Git.InteractiveRebase",
-                                   context, true, SLOT(startRebase()));
+                                   context, true, [this] { startRebase(); });
 
     m_submoduleUpdateAction =
             createRepositoryAction(localRepositoryMenu,
                                    tr("Update Submodules"), "Git.SubmoduleUpdate",
-                                   context, true, SLOT(updateSubmodules()));
+                                   context, true, [this] { updateSubmodules(); });
     m_abortMergeAction =
             createRepositoryAction(localRepositoryMenu,
                                    tr("Abort Merge"), "Git.MergeAbort",
-                                   context, true, SLOT(continueOrAbortCommand()));
+                                   context, true, [this] { continueOrAbortCommand(); });
 
     m_abortRebaseAction =
             createRepositoryAction(localRepositoryMenu,
                                    tr("Abort Rebase"), "Git.RebaseAbort",
-                                   context, true, SLOT(continueOrAbortCommand()));
+                                   context, true, [this] { continueOrAbortCommand(); });
 
     m_abortCherryPickAction =
             createRepositoryAction(localRepositoryMenu,
                                    tr("Abort Cherry Pick"), "Git.CherryPickAbort",
-                                   context, true, SLOT(continueOrAbortCommand()));
+                                   context, true, [this] { continueOrAbortCommand(); });
 
     m_abortRevertAction =
             createRepositoryAction(localRepositoryMenu,
                                    tr("Abort Revert"), "Git.RevertAbort",
-                                   context, true, SLOT(continueOrAbortCommand()));
+                                   context, true, [this] { continueOrAbortCommand(); });
 
     m_continueRebaseAction =
             createRepositoryAction(localRepositoryMenu,
                                    tr("Continue Rebase"), "Git.RebaseContinue",
-                                   context, true, SLOT(continueOrAbortCommand()));
+                                   context, true, [this] { continueOrAbortCommand(); });
 
     m_continueCherryPickAction =
             createRepositoryAction(localRepositoryMenu,
                                    tr("Continue Cherry Pick"), "Git.CherryPickContinue",
-                                   context, true, SLOT(continueOrAbortCommand()));
+                                   context, true, [this] { continueOrAbortCommand(); });
 
     m_continueRevertAction =
             createRepositoryAction(localRepositoryMenu,
                                    tr("Continue Revert"), "Git.RevertContinue",
-                                   context, true, SLOT(continueOrAbortCommand()));
+                                   context, true, [this] { continueOrAbortCommand(); });
 
     // --------------
     localRepositoryMenu->addSeparator(context);
 
     createRepositoryAction(localRepositoryMenu,
                            tr("Branches..."), "Git.BranchList",
-                           context, true, SLOT(branchList()));
+                           context, true, [this] { branchList(); });
 
     // --------------
     localRepositoryMenu->addSeparator(context);
@@ -465,12 +473,12 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
                                   "Git.ApplyCurrentFilePatch",
                                   context, true);
 
-    connect(m_applyCurrentFilePatchAction, SIGNAL(triggered()), this,
-            SLOT(applyCurrentFilePatch()));
+    connect(m_applyCurrentFilePatchAction, &QAction::triggered,
+            this, &GitPlugin::applyCurrentFilePatch);
 
     createRepositoryAction(patchMenu,
                            tr("Apply from File..."), "Git.ApplyPatch",
-                           context, true, SLOT(promptApplyPatch()));
+                           context, true, [this] { promptApplyPatch(); });
 
     // "Stash" menu
     ActionContainer *stashMenu = ActionManager::createMenu("Git.StashMenu");
@@ -479,27 +487,27 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
 
     createRepositoryAction(stashMenu,
                            tr("Stashes..."), "Git.StashList",
-                           context, false, SLOT(stashList()));
+                           context, false, [this] { stashList(); });
 
     stashMenu->addSeparator(context);
 
     QAction *action = createRepositoryAction(stashMenu, tr("Stash"), "Git.Stash",
-                                             context, true, SLOT(stash()));
+                                             context, true, [this] { stash(); });
     action->setToolTip(tr("Saves the current state of your work and resets the repository."));
 
     action = createRepositoryAction(stashMenu, tr("Stash Unstaged Files"), "Git.StashUnstaged",
-                                    context, true, SLOT(stashUnstaged()));
+                                    context, true, [this] { stashUnstaged(); });
     action->setToolTip(tr("Saves the current state of your unstaged files and resets the repository "
                           "to its staged state."));
 
     action = createRepositoryAction(stashMenu, tr("Take Snapshot..."), "Git.StashSnapshot",
-                                    context, true, SLOT(stashSnapshot()));
+                                    context, true, [this] { stashSnapshot(); });
     action->setToolTip(tr("Saves the current state of your work."));
 
     stashMenu->addSeparator(context);
 
     action = createRepositoryAction(stashMenu, tr("Stash Pop"), "Git.StashPop",
-                                    context, true, SLOT(stashPop()));
+                                    context, true, [this] { stashPop(); });
     action->setToolTip(tr("Restores changes saved to the stash list using \"Stash\"."));
 
 
@@ -513,13 +521,13 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     gitContainer->addMenu(remoteRepositoryMenu);
 
     createRepositoryAction(remoteRepositoryMenu, tr("Fetch"), "Git.Fetch",
-                           context, true, SLOT(fetch()));
+                           context, true, [this] { fetch(); });
 
     createRepositoryAction(remoteRepositoryMenu, tr("Pull"), "Git.Pull",
-                           context, true, SLOT(pull()));
+                           context, true, [this] { pull(); });
 
     createRepositoryAction(remoteRepositoryMenu, tr("Push"), "Git.Push",
-                           context, true, SLOT(push()));
+                           context, true, [this] { push(); });
 
     // --------------
     remoteRepositoryMenu->addSeparator(context);
@@ -542,30 +550,31 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
 
     createRepositoryAction(remoteRepositoryMenu,
                            tr("Manage Remotes..."), "Git.RemoteList",
-                           context, false, SLOT(remoteList()));
+                           context, false, [this] { remoteList(); });
 
     /* \"Remote Repository" menu */
 
     // --------------
 
     /*  Actions only in locator */
-    createRepositoryAction(0, tr("Show..."), "Git.Show",
-                           context, true, SLOT(startChangeRelatedAction()));
+    const auto startChangeRelated = [this](Id id) { startChangeRelatedAction(id); };
+    createChangeRelatedRepositoryAction(0, tr("Show..."), "Git.Show",
+                                        context, true, startChangeRelated);
 
-    createRepositoryAction(0, tr("Revert..."), "Git.Revert",
-                           context, true, SLOT(startChangeRelatedAction()));
+    createChangeRelatedRepositoryAction(0, tr("Revert..."), "Git.Revert",
+                                        context, true, startChangeRelated);
 
-    createRepositoryAction(0, tr("Cherry Pick..."), "Git.CherryPick",
-                           context, true, SLOT(startChangeRelatedAction()));
+    createChangeRelatedRepositoryAction(0, tr("Cherry Pick..."), "Git.CherryPick",
+                                        context, true, startChangeRelated);
 
-    createRepositoryAction(0, tr("Checkout..."), "Git.Checkout",
-                           context, true, SLOT(startChangeRelatedAction()));
+    createChangeRelatedRepositoryAction(0, tr("Checkout..."), "Git.Checkout",
+                                        context, true, startChangeRelated);
 
     createRepositoryAction(0, tr("Rebase..."), "Git.Rebase",
-                           context, true, SLOT(branchList()));
+                           context, true, [this] { branchList(); });
 
     createRepositoryAction(0, tr("Merge..."), "Git.Merge",
-                           context, true, SLOT(branchList()));
+                           context, true, [this] { branchList(); });
 
     /*  \Actions only in locator */
 
@@ -590,7 +599,7 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     gitToolsMenu->addSeparator(context);
 
     createRepositoryAction(gitToolsMenu, tr("Git Gui"), "Git.GitGui",
-                           context, true, SLOT(gitGui()));
+                           context, true, [this] { gitGui(); });
 
     // --------------
     gitToolsMenu->addSeparator(context);
@@ -603,7 +612,7 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     m_mergeToolAction =
             createRepositoryAction(gitToolsMenu,
                                    tr("Merge Tool"), "Git.MergeTool",
-                                   context, true, SLOT(startMergeTool()));
+                                   context, true, [this] { startMergeTool(); });
 
     /* \"Git Tools" menu */
 
@@ -611,7 +620,7 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     gitContainer->addSeparator(context);
 
     createRepositoryAction(gitContainer, tr("Actions on Commits..."), "Git.ChangeActions",
-                           context, false, SLOT(startChangeRelatedAction()));
+                           context, false, [this] { startChangeRelatedAction("Git.ChangeActions"); });
 
     m_createRepositryAction = new QAction(tr("Create Repository..."), this);
     Command *createRepositoryCommand = ActionManager::registerAction(
@@ -624,7 +633,7 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     m_submitCurrentAction = new QAction(VcsBaseSubmitEditor::submitIcon(), tr("Commit"), this);
     Command *command = ActionManager::registerAction(m_submitCurrentAction, Constants::SUBMIT_CURRENT, submitContext);
     command->setAttribute(Command::CA_UpdateText);
-    connect(m_submitCurrentAction, SIGNAL(triggered()), this, SLOT(submitCurrentLog()));
+    connect(m_submitCurrentAction, &QAction::triggered, this, &GitPlugin::submitCurrentLog);
 
     m_diffSelectedFilesAction = new QAction(VcsBaseSubmitEditor::diffIcon(), tr("Diff &Selected Files"), this);
     ActionManager::registerAction(m_diffSelectedFilesAction, Constants::DIFF_SELECTED, submitContext);
@@ -635,10 +644,10 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     m_redoAction = new QAction(tr("&Redo"), this);
     ActionManager::registerAction(m_redoAction, Core::Constants::REDO, submitContext);
 
-    connect(VcsManager::instance(), SIGNAL(repositoryChanged(QString)),
-            this, SLOT(updateContinueAndAbortCommands()));
-    connect(VcsManager::instance(), SIGNAL(repositoryChanged(QString)),
-            this, SLOT(updateBranches(QString)), Qt::QueuedConnection);
+    connect(VcsManager::instance(), &VcsManager::repositoryChanged,
+            this, &GitPlugin::updateContinueAndAbortCommands);
+    connect(VcsManager::instance(), &VcsManager::repositoryChanged,
+            this, &GitPlugin::updateBranches, Qt::QueuedConnection);
 
     Utils::MimeDatabase::addMimeTypes(QLatin1String(RC_GIT_MIME_XML));
 
@@ -804,14 +813,12 @@ void GitPlugin::startRebase()
         m_gitClient->interactiveRebase(topLevel, dialog.commit(), false);
 }
 
-void GitPlugin::startChangeRelatedAction()
+void GitPlugin::startChangeRelatedAction(const Id &id)
 {
     const VcsBasePluginState state = currentState();
     if (!state.hasTopLevel())
         return;
 
-    QAction *action = qobject_cast<QAction *>(sender());
-    Id id = action ? Id::fromUniqueIdentifier(action->data().toInt()) : Id();
     ChangeSelectionDialog dialog(state.topLevel(), id, ICore::mainWindow());
 
     int result = dialog.exec();
diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h
index d2219a535be..4f053539cef 100644
--- a/src/plugins/git/gitplugin.h
+++ b/src/plugins/git/gitplugin.h
@@ -33,6 +33,8 @@
 
 #include "gitsettings.h"
 
+#include <coreplugin/id.h>
+
 #include <vcsbase/vcsbaseplugin.h>
 
 #include <QStringList>
@@ -40,6 +42,8 @@
 #include <QKeySequence>
 #include <QVector>
 
+#include <functional>
+
 QT_BEGIN_NAMESPACE
 class QFile;
 class QAction;
@@ -108,7 +112,7 @@ private slots:
     void undoUnstagedFileChanges();
     void resetRepository();
     void startRebase();
-    void startChangeRelatedAction();
+    void startChangeRelatedAction(const Core::Id &id);
     void stageFile();
     void unstageFile();
     void gitkForCurrentFile();
@@ -178,8 +182,13 @@ private:
     QAction *createRepositoryAction(Core::ActionContainer *ac,
                                     const QString &text, Core::Id id,
                                     const Core::Context &context,
-                                    bool addToLocator, const char *pluginSlot,
+                                    bool addToLocator, const std::function<void()> &callback,
                                     const QKeySequence &keys = QKeySequence());
+    QAction *createChangeRelatedRepositoryAction(Core::ActionContainer *ac,
+                                                 const QString &text, Core::Id id,
+                                                 const Core::Context &context,
+                                                 bool addToLocator, const std::function<void(Core::Id)> &callback,
+                                                 const QKeySequence &keys = QKeySequence());
     QAction *createRepositoryAction(Core::ActionContainer *ac,
                                     const QString &text, Core::Id id,
                                     const Core::Context &context,
-- 
GitLab