ProjectExplorer: Use Guard in favor of setIsUpdating

Change-Id: I4f8448205fe0f90d0b8554f0911e66aa74cbe9b5
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2016-08-24 14:56:40 +02:00
parent 34c8a5d592
commit b8c83c45ac
3 changed files with 26 additions and 28 deletions

View File

@@ -53,7 +53,7 @@ void ProjectImporter::markTemporary(Kit *k)
{ {
QTC_ASSERT(!k->hasValue(KIT_IS_TEMPORARY), return); QTC_ASSERT(!k->hasValue(KIT_IS_TEMPORARY), return);
bool oldIsUpdating = setIsUpdating(true); UpdateGuard guard(*this);
const QString name = k->displayName(); const QString name = k->displayName();
k->setUnexpandedDisplayName(QCoreApplication::translate("ProjectExplorer::ProjectImporter", k->setUnexpandedDisplayName(QCoreApplication::translate("ProjectExplorer::ProjectImporter",
@@ -62,8 +62,6 @@ void ProjectImporter::markTemporary(Kit *k)
k->setValue(KIT_TEMPORARY_NAME, k->displayName()); k->setValue(KIT_TEMPORARY_NAME, k->displayName());
k->setValue(KIT_FINAL_NAME, name); k->setValue(KIT_FINAL_NAME, name);
k->setValue(KIT_IS_TEMPORARY, true); k->setValue(KIT_IS_TEMPORARY, true);
setIsUpdating(oldIsUpdating);
} }
void ProjectImporter::makePermanent(Kit *k) void ProjectImporter::makePermanent(Kit *k)
@@ -71,7 +69,7 @@ void ProjectImporter::makePermanent(Kit *k)
if (!k->hasValue(KIT_IS_TEMPORARY)) if (!k->hasValue(KIT_IS_TEMPORARY))
return; return;
bool oldIsUpdating = setIsUpdating(true); UpdateGuard guard(*this);
k->removeKey(KIT_IS_TEMPORARY); k->removeKey(KIT_IS_TEMPORARY);
k->removeKey(TEMPORARY_OF_PROJECTS); k->removeKey(TEMPORARY_OF_PROJECTS);
@@ -80,8 +78,6 @@ void ProjectImporter::makePermanent(Kit *k)
k->setUnexpandedDisplayName(k->value(KIT_FINAL_NAME).toString()); k->setUnexpandedDisplayName(k->value(KIT_FINAL_NAME).toString());
k->removeKey(KIT_TEMPORARY_NAME); k->removeKey(KIT_TEMPORARY_NAME);
k->removeKey(KIT_FINAL_NAME); k->removeKey(KIT_FINAL_NAME);
setIsUpdating(oldIsUpdating);
} }
void ProjectImporter::cleanupKit(Kit *k) void ProjectImporter::cleanupKit(Kit *k)
@@ -94,15 +90,10 @@ void ProjectImporter::addProject(Kit *k)
if (!k->hasValue(KIT_IS_TEMPORARY)) if (!k->hasValue(KIT_IS_TEMPORARY))
return; return;
UpdateGuard guard(*this);
QStringList projects = k->value(TEMPORARY_OF_PROJECTS, QStringList()).toStringList(); QStringList projects = k->value(TEMPORARY_OF_PROJECTS, QStringList()).toStringList();
projects.append(m_projectPath); // note: There can be more than one instance of the project added! projects.append(m_projectPath); // note: There can be more than one instance of the project added!
bool oldIsUpdating = setIsUpdating(true);
k->setValueSilently(TEMPORARY_OF_PROJECTS, projects); k->setValueSilently(TEMPORARY_OF_PROJECTS, projects);
setIsUpdating(oldIsUpdating);
} }
void ProjectImporter::removeProject(Kit *k, const QString &path) void ProjectImporter::removeProject(Kit *k, const QString &path)
@@ -110,17 +101,14 @@ void ProjectImporter::removeProject(Kit *k, const QString &path)
if (!k->hasValue(KIT_IS_TEMPORARY)) if (!k->hasValue(KIT_IS_TEMPORARY))
return; return;
UpdateGuard guard(*this);
QStringList projects = k->value(TEMPORARY_OF_PROJECTS, QStringList()).toStringList(); QStringList projects = k->value(TEMPORARY_OF_PROJECTS, QStringList()).toStringList();
projects.removeOne(path); projects.removeOne(path);
bool oldIsUpdating = setIsUpdating(true);
if (projects.isEmpty()) if (projects.isEmpty())
KitManager::deregisterKit(k); KitManager::deregisterKit(k);
else else
k->setValueSilently(TEMPORARY_OF_PROJECTS, projects); k->setValueSilently(TEMPORARY_OF_PROJECTS, projects);
setIsUpdating(oldIsUpdating);
} }
bool ProjectImporter::isTemporaryKit(Kit *k) bool ProjectImporter::isTemporaryKit(Kit *k)

View File

@@ -63,15 +63,26 @@ public:
bool isTemporaryKit(Kit *k); bool isTemporaryKit(Kit *k);
protected: protected:
bool setIsUpdating(bool b) { class UpdateGuard
bool old = m_isUpdating; {
m_isUpdating = b; public:
return old; UpdateGuard(ProjectImporter &i) : m_importer(i)
} {
m_wasUpdating = m_importer.isUpdating();
m_importer.m_isUpdating = true;
}
~UpdateGuard() { m_importer.m_isUpdating = m_wasUpdating; }
private:
ProjectImporter &m_importer;
bool m_wasUpdating;
};
private: private:
const QString m_projectPath; const QString m_projectPath;
bool m_isUpdating = false; bool m_isUpdating = false;
friend class UpdateGuard;
}; };
} // namespace ProjectExplorer } // namespace ProjectExplorer

View File

@@ -124,9 +124,9 @@ QList<BuildInfo *> QmakeProjectImporter::import(const FileName &importPath, bool
if (!version) if (!version)
continue; continue;
bool oldIsUpdating = setIsUpdating(true); UpdateGuard guard(*this);
QtVersionManager::addVersion(version); QtVersionManager::addVersion(version);
setIsUpdating(oldIsUpdating);
temporaryVersion = true; temporaryVersion = true;
qCDebug(logs) << " created new qt version"; qCDebug(logs) << " created new qt version";
} }
@@ -314,7 +314,8 @@ void QmakeProjectImporter::makePermanent(Kit *k)
{ {
if (!isTemporaryKit(k)) if (!isTemporaryKit(k))
return; return;
setIsUpdating(true); UpdateGuard guard(*this);
int tempId = k->value(QT_IS_TEMPORARY, -1).toInt(); int tempId = k->value(QT_IS_TEMPORARY, -1).toInt();
int qtId = QtKitInformation::qtVersionId(k); int qtId = QtKitInformation::qtVersionId(k);
if (tempId != qtId) { if (tempId != qtId) {
@@ -329,7 +330,6 @@ void QmakeProjectImporter::makePermanent(Kit *k)
foreach (Kit *kit, KitManager::kits()) foreach (Kit *kit, KitManager::kits())
if (kit->value(QT_IS_TEMPORARY, -1).toInt() == tempId) if (kit->value(QT_IS_TEMPORARY, -1).toInt() == tempId)
kit->removeKeySilently(QT_IS_TEMPORARY); kit->removeKeySilently(QT_IS_TEMPORARY);
setIsUpdating(false);
ProjectImporter::makePermanent(k); ProjectImporter::makePermanent(k);
} }
@@ -356,9 +356,9 @@ Kit *QmakeProjectImporter::createTemporaryKit(BaseQtVersion *version,
{ {
Q_UNUSED(osType); // TODO use this to select the right toolchain? Q_UNUSED(osType); // TODO use this to select the right toolchain?
Kit *k = new Kit; Kit *k = new Kit;
bool oldIsUpdating = setIsUpdating(true); UpdateGuard guard(*this);
{ {
KitGuard guard(k); KitGuard kitGuard(k);
QtKitInformation::setQtVersion(k, version); QtKitInformation::setQtVersion(k, version);
ToolChainKitInformation::setToolChain(k, preferredToolChain(version, parsedSpec, archConfig)); ToolChainKitInformation::setToolChain(k, preferredToolChain(version, parsedSpec, archConfig));
@@ -379,7 +379,6 @@ Kit *QmakeProjectImporter::createTemporaryKit(BaseQtVersion *version,
} // ~KitGuard, sending kitUpdated } // ~KitGuard, sending kitUpdated
KitManager::registerKit(k); // potentially adds kits to other targetsetuppages KitManager::registerKit(k); // potentially adds kits to other targetsetuppages
setIsUpdating(oldIsUpdating);
return k; return k;
} }