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);
bool oldIsUpdating = setIsUpdating(true);
UpdateGuard guard(*this);
const QString name = k->displayName();
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_FINAL_NAME, name);
k->setValue(KIT_IS_TEMPORARY, true);
setIsUpdating(oldIsUpdating);
}
void ProjectImporter::makePermanent(Kit *k)
@@ -71,7 +69,7 @@ void ProjectImporter::makePermanent(Kit *k)
if (!k->hasValue(KIT_IS_TEMPORARY))
return;
bool oldIsUpdating = setIsUpdating(true);
UpdateGuard guard(*this);
k->removeKey(KIT_IS_TEMPORARY);
k->removeKey(TEMPORARY_OF_PROJECTS);
@@ -80,8 +78,6 @@ void ProjectImporter::makePermanent(Kit *k)
k->setUnexpandedDisplayName(k->value(KIT_FINAL_NAME).toString());
k->removeKey(KIT_TEMPORARY_NAME);
k->removeKey(KIT_FINAL_NAME);
setIsUpdating(oldIsUpdating);
}
void ProjectImporter::cleanupKit(Kit *k)
@@ -94,15 +90,10 @@ void ProjectImporter::addProject(Kit *k)
if (!k->hasValue(KIT_IS_TEMPORARY))
return;
UpdateGuard guard(*this);
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!
bool oldIsUpdating = setIsUpdating(true);
k->setValueSilently(TEMPORARY_OF_PROJECTS, projects);
setIsUpdating(oldIsUpdating);
}
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))
return;
UpdateGuard guard(*this);
QStringList projects = k->value(TEMPORARY_OF_PROJECTS, QStringList()).toStringList();
projects.removeOne(path);
bool oldIsUpdating = setIsUpdating(true);
if (projects.isEmpty())
KitManager::deregisterKit(k);
else
k->setValueSilently(TEMPORARY_OF_PROJECTS, projects);
setIsUpdating(oldIsUpdating);
}
bool ProjectImporter::isTemporaryKit(Kit *k)

View File

@@ -63,15 +63,26 @@ public:
bool isTemporaryKit(Kit *k);
protected:
bool setIsUpdating(bool b) {
bool old = m_isUpdating;
m_isUpdating = b;
return old;
class UpdateGuard
{
public:
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:
const QString m_projectPath;
bool m_isUpdating = false;
friend class UpdateGuard;
};
} // namespace ProjectExplorer

View File

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