summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@digia.com>2013-02-28 15:07:01 +0100
committerTobias Hunger <tobias.hunger@digia.com>2013-02-28 18:12:11 +0100
commit519a365962cb238d33ae61064c9ec2a7afec9386 (patch)
tree8ee739848a3ecbe99246b9afa5260d69088d7382
parent60cea5e162ec8bd1d4422cd0a2f21c5eeabc8034 (diff)
downloadqt-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.cpp9
-rw-r--r--src/plugins/android/androidplugin.h3
-rw-r--r--src/plugins/debugger/debuggerkitinformation.cpp2
-rw-r--r--src/plugins/projectexplorer/kitinformation.cpp35
-rw-r--r--src/plugins/projectexplorer/kitinformation.h2
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp5
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();