forked from qt-creator/qt-creator
ProjectExplorer: Use Guard in favor of setIsUpdating
Change-Id: I4f8448205fe0f90d0b8554f0911e66aa74cbe9b5 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user