From f5d4b65931d0bd80d19f573d5ee32eb6dd94045a Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 21 Jan 2020 18:04:49 +0100 Subject: [PATCH] Vcs: Dissolve VcsManager::registerVersionControl It's a somewhat unusual pattern, spelling it out will help to move the vcs plugins setup closer to the now-usual pattern. Change-Id: Ie7b70e52d75e34cd36b6a1d55ca868e3edab44a7 Reviewed-by: Orgad Shaneh --- src/plugins/bazaar/bazaarplugin.cpp | 4 +++- src/plugins/clearcase/clearcaseplugin.cpp | 3 ++- src/plugins/coreplugin/iversioncontrol.cpp | 6 ++++++ src/plugins/coreplugin/iversioncontrol.h | 2 +- src/plugins/coreplugin/vcsmanager.h | 12 ++---------- src/plugins/cvs/cvsplugin.cpp | 3 ++- src/plugins/git/gitplugin.cpp | 3 ++- src/plugins/mercurial/mercurialplugin.cpp | 3 ++- src/plugins/perforce/perforceplugin.cpp | 3 ++- src/plugins/subversion/subversionplugin.cpp | 3 ++- src/plugins/vcsbase/vcsbaseplugin.h | 12 ++---------- 11 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/plugins/bazaar/bazaarplugin.cpp b/src/plugins/bazaar/bazaarplugin.cpp index c2990c9232f..a9ca44e738f 100644 --- a/src/plugins/bazaar/bazaarplugin.cpp +++ b/src/plugins/bazaar/bazaarplugin.cpp @@ -151,7 +151,9 @@ bool BazaarPlugin::initialize(const QStringList &arguments, QString *errorMessag Context context(Constants::BAZAAR_CONTEXT); m_client = new BazaarClient; - auto vcsCtrl = initializeVcs(context, m_client); + auto vcsCtrl = new BazaarControl(m_client); + initializeVcs(vcsCtrl, context); + connect(m_client, &VcsBaseClient::changed, vcsCtrl, &BazaarControl::changed); new OptionsPage(vcsCtrl, this); diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp index 0d64c470ade..c0054a3b304 100644 --- a/src/plugins/clearcase/clearcaseplugin.cpp +++ b/src/plugins/clearcase/clearcaseplugin.cpp @@ -411,7 +411,8 @@ bool ClearCasePlugin::initialize(const QStringList & /*arguments */, QString *er Context context(CLEARCASE_CONTEXT); - initializeVcs(context, this); + auto vcsCtrl = new ClearCaseControl(this); + initializeVcs(vcsCtrl, context); m_clearcasePluginInstance = this; connect(ICore::instance(), &ICore::coreAboutToClose, this, &ClearCasePlugin::closing); diff --git a/src/plugins/coreplugin/iversioncontrol.cpp b/src/plugins/coreplugin/iversioncontrol.cpp index 38876c0d72b..bc86e7884d2 100644 --- a/src/plugins/coreplugin/iversioncontrol.cpp +++ b/src/plugins/coreplugin/iversioncontrol.cpp @@ -143,6 +143,12 @@ QString IVersionControl::vcsTopic(const QString &topLevel) return m_topicCache ? m_topicCache->topic(topLevel) : QString(); } +IVersionControl::IVersionControl(IVersionControl::TopicCache *topicCache) + : m_topicCache(topicCache) +{ + Core::VcsManager::addVersionControl(this); +} + IVersionControl::~IVersionControl() { delete m_topicCache; diff --git a/src/plugins/coreplugin/iversioncontrol.h b/src/plugins/coreplugin/iversioncontrol.h index f244711b541..9b834cdc2ad 100644 --- a/src/plugins/coreplugin/iversioncontrol.h +++ b/src/plugins/coreplugin/iversioncontrol.h @@ -86,7 +86,7 @@ public: }; - explicit IVersionControl(TopicCache *topicCache = nullptr) : m_topicCache(topicCache) {} + explicit IVersionControl(TopicCache *topicCache = nullptr); ~IVersionControl() override; virtual QString displayName() const = 0; diff --git a/src/plugins/coreplugin/vcsmanager.h b/src/plugins/coreplugin/vcsmanager.h index 9971e9ac990..6dacd20f58e 100644 --- a/src/plugins/coreplugin/vcsmanager.h +++ b/src/plugins/coreplugin/vcsmanager.h @@ -56,14 +56,6 @@ class CORE_EXPORT VcsManager : public QObject public: static VcsManager *instance(); - template - static T *registerVersionControl(Args&&... args) - { - auto vc = new T(std::forward(args)...); - addVersionControl(vc); - return vc; - } - static void extensionsInitialized(); static const QList versionControls(); @@ -110,11 +102,11 @@ private: explicit VcsManager(QObject *parent = nullptr); ~VcsManager() override; + void handleConfigurationChanges(); static void addVersionControl(IVersionControl *vc); - void handleConfigurationChanges(); - friend class Core::Internal::MainWindow; + friend class Core::IVersionControl; }; } // namespace Core diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp index f46b5ffe8a7..ef90627e4e4 100644 --- a/src/plugins/cvs/cvsplugin.cpp +++ b/src/plugins/cvs/cvsplugin.cpp @@ -197,7 +197,8 @@ bool CvsPlugin::initialize(const QStringList &arguments, QString *errorMessage) Context context(CVS_CONTEXT); - initializeVcs(context, this); + auto vcsCtrl = new CvsControl(this); + initializeVcs(vcsCtrl, context); m_cvsPluginInstance = this; diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index 48fc7ce79b1..08a21edcc99 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -299,7 +299,8 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage) m_gitClient = new GitClient; - auto vc = initializeVcs(context, m_gitClient); + auto vc = new GitVersionControl(m_gitClient); + initializeVcs(vc, context); // Create the settings Page auto settingsPage = new SettingsPage(vc, this); diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp index 6659766352d..7899f269daf 100644 --- a/src/plugins/mercurial/mercurialplugin.cpp +++ b/src/plugins/mercurial/mercurialplugin.cpp @@ -122,7 +122,8 @@ bool MercurialPlugin::initialize(const QStringList & /* arguments */, QString * Core::Context context(Constants::MERCURIAL_CONTEXT); m_client = new MercurialClient; - auto vc = initializeVcs(context, m_client); + auto vc = new MercurialControl(m_client); + initializeVcs(vc, context); new OptionsPage(vc, this); diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp index b7c0be4bedc..e1a933cd541 100644 --- a/src/plugins/perforce/perforceplugin.cpp +++ b/src/plugins/perforce/perforceplugin.cpp @@ -182,7 +182,8 @@ bool PerforcePlugin::initialize(const QStringList & /* arguments */, QString *er Q_UNUSED(errorMessage) Context context(PERFORCE_CONTEXT); - initializeVcs(context, this); + auto vcsCtrl = new PerforceVersionControl(this); + initializeVcs(vcsCtrl, context); m_instance = this; diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp index bde71f4422b..85d396dd3d7 100644 --- a/src/plugins/subversion/subversionplugin.cpp +++ b/src/plugins/subversion/subversionplugin.cpp @@ -211,7 +211,8 @@ bool SubversionPlugin::initialize(const QStringList & /*arguments */, QString *e Context context(SUBVERSION_CONTEXT); - initializeVcs(context, this); + auto vcsCtrl = new SubversionControl(this); + initializeVcs(vcsCtrl, context); m_subversionPluginInstance = this; diff --git a/src/plugins/vcsbase/vcsbaseplugin.h b/src/plugins/vcsbase/vcsbaseplugin.h index 779092e185a..0d042564b19 100644 --- a/src/plugins/vcsbase/vcsbaseplugin.h +++ b/src/plugins/vcsbase/vcsbaseplugin.h @@ -130,14 +130,6 @@ class VCSBASE_EXPORT VcsBasePlugin : public ExtensionSystem::IPlugin protected: explicit VcsBasePlugin(); - template - T *initializeVcs(const Core::Context &context, Args&&... args) - { - T *vc = Core::VcsManager::registerVersionControl(std::forward(args)...); - initializeVcs(vc, context); - return vc; - } - void extensionsInitialized() override; public: @@ -216,12 +208,12 @@ protected: // Returns whether actions should be set up further. bool enableMenuAction(ActionState as, QAction *in) const; + void initializeVcs(Core::IVersionControl *vc, const Core::Context &context); + private: void slotSubmitEditorAboutToClose(VcsBaseSubmitEditor *submitEditor, bool *result); void slotStateChanged(const VcsBase::Internal::State &s, Core::IVersionControl *vc); - void initializeVcs(Core::IVersionControl *vc, const Core::Context &context); - VcsBasePluginPrivate *d; };