diff --git a/src/plugins/projectexplorer/projectimporter.cpp b/src/plugins/projectexplorer/projectimporter.cpp index 00f085de959..6c4575f6993 100644 --- a/src/plugins/projectexplorer/projectimporter.cpp +++ b/src/plugins/projectexplorer/projectimporter.cpp @@ -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) diff --git a/src/plugins/projectexplorer/projectimporter.h b/src/plugins/projectexplorer/projectimporter.h index 635c7b10e28..aacb2aa8fd1 100644 --- a/src/plugins/projectexplorer/projectimporter.h +++ b/src/plugins/projectexplorer/projectimporter.h @@ -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 diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp index 7bbe6c22fbb..023cd9ab908 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp @@ -124,9 +124,9 @@ QList 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; }