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>
This commit is contained in:
Eike Ziller
2012-01-30 16:15:32 +01:00
committed by hjk
parent a36d587ccf
commit 9dcb65a3dc
3 changed files with 37 additions and 17 deletions

View File

@@ -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) {

View File

@@ -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;
}

View File

@@ -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;
};