diff options
author | Tobias Hunger <tobias.hunger@digia.com> | 2013-02-28 15:07:01 +0100 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@digia.com> | 2013-02-28 18:12:11 +0100 |
commit | 519a365962cb238d33ae61064c9ec2a7afec9386 (patch) | |
tree | 8ee739848a3ecbe99246b9afa5260d69088d7382 | |
parent | 60cea5e162ec8bd1d4422cd0a2f21c5eeabc8034 (diff) | |
download | qt-creator-519a365962cb238d33ae61064c9ec2a7afec9386.tar.gz |
ToolChainKitInformation: Make use of ToolChainManager::isLoaded()
Warn when trying to access values not yet initialized, and avoid
doing so. Also invalidate toolchains in kits properly.
Change-Id: I3a98a2ca89ce43d9982d37bdee451c5122c788b2
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
-rw-r--r-- | src/plugins/android/androidplugin.cpp | 9 | ||||
-rw-r--r-- | src/plugins/android/androidplugin.h | 3 | ||||
-rw-r--r-- | src/plugins/debugger/debuggerkitinformation.cpp | 2 | ||||
-rw-r--r-- | src/plugins/projectexplorer/kitinformation.cpp | 35 | ||||
-rw-r--r-- | src/plugins/projectexplorer/kitinformation.h | 2 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectexplorer.cpp | 5 |
6 files changed, 36 insertions, 20 deletions
diff --git a/src/plugins/android/androidplugin.cpp b/src/plugins/android/androidplugin.cpp index 3b59474635..8592bc1618 100644 --- a/src/plugins/android/androidplugin.cpp +++ b/src/plugins/android/androidplugin.cpp @@ -78,13 +78,10 @@ bool AndroidPlugin::initialize(const QStringList &arguments, QString *errorMessa ProjectExplorer::DeviceManager::instance() ->addDevice(ProjectExplorer::IDevice::Ptr(new Internal::AndroidDevice)); - return true; -} - -void AndroidPlugin::extensionsInitialized() -{ - connect(ProjectExplorer::KitManager::instance(), SIGNAL(kitsChanged()), + connect(ProjectExplorer::KitManager::instance(), SIGNAL(kitsLoaded()), this, SLOT(kitsRestored())); + + return true; } void AndroidPlugin::kitsRestored() diff --git a/src/plugins/android/androidplugin.h b/src/plugins/android/androidplugin.h index 168ac611dd..c26cc5d0f0 100644 --- a/src/plugins/android/androidplugin.h +++ b/src/plugins/android/androidplugin.h @@ -43,7 +43,8 @@ public: AndroidPlugin(); bool initialize(const QStringList &arguments, QString *errorMessage); - void extensionsInitialized(); + void extensionsInitialized() { } + private slots: void kitsRestored(); }; diff --git a/src/plugins/debugger/debuggerkitinformation.cpp b/src/plugins/debugger/debuggerkitinformation.cpp index 23550f4c8c..522d9570cf 100644 --- a/src/plugins/debugger/debuggerkitinformation.cpp +++ b/src/plugins/debugger/debuggerkitinformation.cpp @@ -34,6 +34,7 @@ #include <projectexplorer/abi.h> #include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/toolchain.h> +#include <projectexplorer/toolchainmanager.h> #include <utils/environment.h> #include <utils/qtcassert.h> @@ -201,6 +202,7 @@ DebuggerKitInformation::DebuggerItem DebuggerKitInformation::autoDetectItem(cons void DebuggerKitInformation::setup(Kit *k) { + QTC_ASSERT(ToolChainManager::instance()->isLoaded(), return); setDebuggerItem(k, autoDetectItem(k)); } diff --git a/src/plugins/projectexplorer/kitinformation.cpp b/src/plugins/projectexplorer/kitinformation.cpp index f7ed99b472..521346b4a5 100644 --- a/src/plugins/projectexplorer/kitinformation.cpp +++ b/src/plugins/projectexplorer/kitinformation.cpp @@ -126,12 +126,8 @@ static const char TOOLCHAIN_INFORMATION[] = "PE.Profile.ToolChain"; ToolChainKitInformation::ToolChainKitInformation() { setObjectName(QLatin1String("ToolChainInformation")); - connect(ToolChainManager::instance(), SIGNAL(toolChainRemoved(ProjectExplorer::ToolChain*)), - this, SIGNAL(validationNeeded())); - connect(ToolChainManager::instance(), SIGNAL(toolChainUpdated(ProjectExplorer::ToolChain*)), - this, SIGNAL(validationNeeded())); - connect(ToolChainManager::instance(), SIGNAL(toolChainUpdated(ProjectExplorer::ToolChain*)), - this, SLOT(toolChainUpdated(ProjectExplorer::ToolChain*))); + connect(KitManager::instance(), SIGNAL(kitsLoaded()), + this, SLOT(kitsWereLoaded())); } Core::Id ToolChainKitInformation::dataId() const @@ -174,6 +170,7 @@ QList<Task> ToolChainKitInformation::validate(const Kit *k) const void ToolChainKitInformation::fix(Kit *k) { + QTC_ASSERT(ToolChainManager::instance()->isLoaded(), return); if (toolChain(k)) return; @@ -184,6 +181,7 @@ void ToolChainKitInformation::fix(Kit *k) void ToolChainKitInformation::setup(Kit *k) { + QTC_ASSERT(ToolChainManager::instance()->isLoaded(), return); const QString id = k->value(Core::Id(TOOLCHAIN_INFORMATION)).toString(); if (id.isEmpty()) return; @@ -233,6 +231,7 @@ IOutputParser *ToolChainKitInformation::createOutputParser(const Kit *k) const ToolChain *ToolChainKitInformation::toolChain(const Kit *k) { + QTC_ASSERT(ToolChainManager::instance()->isLoaded(), return 0); if (!k) return 0; return ToolChainManager::instance() @@ -249,11 +248,29 @@ QString ToolChainKitInformation::msgNoToolChainInTarget() return tr("No compiler set in kit."); } -void ToolChainKitInformation::toolChainUpdated(ToolChain *tc) +void ToolChainKitInformation::kitsWereLoaded() { foreach (Kit *k, KitManager::instance()->kits()) - if (toolChain(k) == tc) - notifyAboutUpdate(k); + fix(k); + + connect(ToolChainManager::instance(), SIGNAL(toolChainRemoved(ProjectExplorer::ToolChain*)), + this, SLOT(toolChainRemoved(ProjectExplorer::ToolChain*))); + connect(ToolChainManager::instance(), SIGNAL(toolChainUpdated(ProjectExplorer::ToolChain*)), + this, SLOT(toolChainUpdated(ProjectExplorer::ToolChain*))); +} + +void ToolChainKitInformation::toolChainUpdated(ProjectExplorer::ToolChain *tc) +{ + ToolChainMatcher m(tc); + foreach (Kit *k, KitManager::instance()->kits(&m)) + notifyAboutUpdate(k); +} + +void ToolChainKitInformation::toolChainRemoved(ProjectExplorer::ToolChain *tc) +{ + Q_UNUSED(tc); + foreach (Kit *k, KitManager::instance()->kits()) + fix(k); } // -------------------------------------------------------------------------- diff --git a/src/plugins/projectexplorer/kitinformation.h b/src/plugins/projectexplorer/kitinformation.h index e4c5d52660..66c9a0fe65 100644 --- a/src/plugins/projectexplorer/kitinformation.h +++ b/src/plugins/projectexplorer/kitinformation.h @@ -120,7 +120,9 @@ public: static QString msgNoToolChainInTarget(); private slots: + void kitsWereLoaded(); void toolChainUpdated(ProjectExplorer::ToolChain *tc); + void toolChainRemoved(ProjectExplorer::ToolChain *tc); }; class PROJECTEXPLORER_EXPORT ToolChainMatcher : public KitMatcher diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index faa9c9ca28..ff3244c462 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -350,6 +350,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er // Register KitInformation: KitManager::instance()->registerKitInformation(new DeviceTypeKitInformation); KitManager::instance()->registerKitInformation(new DeviceKitInformation); + KitManager::instance()->registerKitInformation(new ToolChainKitInformation); KitManager::instance()->registerKitInformation(new SysRootKitInformation); addAutoReleasedObject(new Internal::ToolChainOptionsPage); @@ -1123,10 +1124,6 @@ void ProjectExplorerPlugin::extensionsInitialized() } d->m_buildManager->extensionsInitialized(); - // Register KitInformation: - // Only do this now to make sure all device factories were properly initialized. - KitManager::instance()->registerKitInformation(new ToolChainKitInformation); - DeviceManager::instance()->addDevice(IDevice::Ptr(new DesktopDevice)); DeviceManager::instance()->load(); d->m_toolChainManager->restoreToolChains(); |