From 9dcb65a3dc6df6d0a0e94fba6c1c334ec7ee6b79 Mon Sep 17 00:00:00 2001 From: Eike Ziller <eike.ziller@nokia.com> Date: Mon, 30 Jan 2012 16:15:32 +0100 Subject: [PATCH] Delay autodetection of the tool chains to a point where it's needed. Change-Id: Ic05b2ec842be1486203c3d9e6e0fc28f1fcf91b4 Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com> Reviewed-by: hjk <qthjk@ovi.com> --- .../projectexplorer/projectexplorer.cpp | 2 - .../projectexplorer/toolchainmanager.cpp | 48 ++++++++++++++----- .../projectexplorer/toolchainmanager.h | 4 +- 3 files changed, 37 insertions(+), 17 deletions(-) diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 8eac7f4403d..427dda7ab25 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -1108,8 +1108,6 @@ void ProjectExplorerPlugin::clearSession() void ProjectExplorerPlugin::extensionsInitialized() { - d->m_toolChainManager->restoreToolChains(); - d->m_proWindow->extensionsInitialized(); d->m_fileFactories = ProjectFileFactory::createFactories(&d->m_projectFilterString); foreach (ProjectFileFactory *pf, d->m_fileFactories) { diff --git a/src/plugins/projectexplorer/toolchainmanager.cpp b/src/plugins/projectexplorer/toolchainmanager.cpp index 7e334290bcf..da53306bbd2 100644 --- a/src/plugins/projectexplorer/toolchainmanager.cpp +++ b/src/plugins/projectexplorer/toolchainmanager.cpp @@ -76,10 +76,32 @@ namespace Internal { class ToolChainManagerPrivate { public: - QList<ToolChain *> m_toolChains; + ToolChainManagerPrivate(ToolChainManager *parent); + + QList<ToolChain *> &toolChains(); + + ToolChainManager *q; + bool m_initialized; QMap<QString, Utils::FileName> m_abiToDebugger; + +private: + QList<ToolChain *> m_toolChains; }; +ToolChainManagerPrivate::ToolChainManagerPrivate(ToolChainManager *parent) + : q(parent), m_initialized(false) +{ +} + +QList<ToolChain *> &ToolChainManagerPrivate::toolChains() +{ + if (!m_initialized) { + m_initialized = true; + q->restoreToolChains(); + } + return m_toolChains; +} + } // namespace Internal // -------------------------------------------------------------------------- @@ -94,7 +116,7 @@ ToolChainManager *ToolChainManager::instance() ToolChainManager::ToolChainManager(QObject *parent) : QObject(parent), - d(new Internal::ToolChainManagerPrivate) + d(new Internal::ToolChainManagerPrivate(this)) { Q_ASSERT(!m_instance); m_instance = this; @@ -170,7 +192,7 @@ void ToolChainManager::restoreToolChains() ToolChainManager::~ToolChainManager() { // Deregister tool chains - QList<ToolChain *> copy = d->m_toolChains; + QList<ToolChain *> copy = d->toolChains(); foreach (ToolChain *tc, copy) deregisterToolChain(tc); @@ -184,7 +206,7 @@ void ToolChainManager::saveToolChains() writer.saveValue(QLatin1String(TOOLCHAIN_FILE_VERSION_KEY), 1); int count = 0; - foreach (ToolChain *tc, d->m_toolChains) { + foreach (ToolChain *tc, d->toolChains()) { if (tc->isValid()) { QVariantMap tmp = tc->toMap(); if (tmp.isEmpty()) @@ -257,13 +279,13 @@ QList<ToolChain *> ToolChainManager::restoreToolChains(const QString &fileName) QList<ToolChain *> ToolChainManager::toolChains() const { - return d->m_toolChains; + return d->toolChains(); } QList<ToolChain *> ToolChainManager::findToolChains(const Abi &abi) const { QList<ToolChain *> result; - foreach (ToolChain *tc, d->m_toolChains) { + foreach (ToolChain *tc, toolChains()) { Abi targetAbi = tc->targetAbi(); if (targetAbi.isCompatibleWith(abi)) result.append(tc); @@ -276,7 +298,7 @@ ToolChain *ToolChainManager::findToolChain(const QString &id) const if (id.isEmpty()) return 0; - foreach (ToolChain *tc, d->m_toolChains) { + foreach (ToolChain *tc, d->toolChains()) { if (tc->id() == id || (!tc->legacyId().isEmpty() && tc->legacyId() == id)) return tc; } @@ -290,30 +312,30 @@ Utils::FileName ToolChainManager::defaultDebugger(const Abi &abi) const void ToolChainManager::notifyAboutUpdate(ProjectExplorer::ToolChain *tc) { - if (!tc || !d->m_toolChains.contains(tc)) + if (!tc || !toolChains().contains(tc)) return; emit toolChainUpdated(tc); } bool ToolChainManager::registerToolChain(ToolChain *tc) { - if (!tc || d->m_toolChains.contains(tc)) + if (!tc || d->toolChains().contains(tc)) return true; - foreach (ToolChain *current, d->m_toolChains) { + foreach (ToolChain *current, d->toolChains()) { if (*tc == *current) return false; } - d->m_toolChains.append(tc); + d->toolChains().append(tc); emit toolChainAdded(tc); return true; } void ToolChainManager::deregisterToolChain(ToolChain *tc) { - if (!tc || !d->m_toolChains.contains(tc)) + if (!tc || !d->toolChains().contains(tc)) return; - d->m_toolChains.removeOne(tc); + d->toolChains().removeOne(tc); emit toolChainRemoved(tc); delete tc; } diff --git a/src/plugins/projectexplorer/toolchainmanager.h b/src/plugins/projectexplorer/toolchainmanager.h index 31ab664e627..3fd3e351d46 100644 --- a/src/plugins/projectexplorer/toolchainmanager.h +++ b/src/plugins/projectexplorer/toolchainmanager.h @@ -94,12 +94,12 @@ private: void notifyAboutUpdate(ProjectExplorer::ToolChain *); - Internal::ToolChainManagerPrivate *const d; static ToolChainManager *m_instance; - friend class ProjectExplorerPlugin; + friend class Internal::ToolChainManagerPrivate; // for the restoreToolChains methods + friend class ProjectExplorerPlugin; // for constructor friend class ToolChain; }; -- GitLab