From 21cccaa1c93e4f1e1cf5baee349c019b6dfb480b Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Tue, 24 Jun 2014 12:06:13 +0200 Subject: [PATCH] Qbs: Move updating of files from a project to own method Change-Id: I88b41ff450dac4e0c2e5a34e3332e559c1919e6e Reviewed-by: Tobias Hunger --- src/plugins/qbsprojectmanager/qbsnodes.cpp | 15 +++++--- src/plugins/qbsprojectmanager/qbsnodes.h | 8 ++-- src/plugins/qbsprojectmanager/qbsproject.cpp | 39 +++++++++++++------- src/plugins/qbsprojectmanager/qbsproject.h | 1 + 4 files changed, 41 insertions(+), 22 deletions(-) diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp index a2acaaa4727..e2f96cef129 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp @@ -768,12 +768,19 @@ bool QbsProjectNode::addFiles(const QStringList &filePaths, QStringList *notAdde return prd ? prd->addFiles(filePaths, notAdded) : false; } -void QbsProjectNode::update(const qbs::Project &prj) +void QbsProjectNode::setProject(const qbs::Project &prj) { - update(prj.isValid() ? prj.projectData() : qbs::ProjectData()); m_qbsProject = prj; } +void QbsProjectNode::update() +{ + if (m_qbsProject.isValid()) + update(m_qbsProject.projectData()); + else + update(qbs::ProjectData()); +} + void QbsProjectNode::update(const qbs::ProjectData &prjData) { QList toAdd; @@ -808,8 +815,6 @@ void QbsProjectNode::update(const qbs::ProjectData &prjData) removeProjectNodes(toRemove); addProjectNodes(toAdd); - - m_qbsProjectData = prjData; } QbsProject *QbsProjectNode::project() const @@ -829,7 +834,7 @@ const qbs::Project QbsProjectNode::qbsProject() const const qbs::ProjectData QbsProjectNode::qbsProjectData() const { - return m_qbsProjectData; + return m_qbsProject.projectData(); } bool QbsProjectNode::showInSimpleTree() const diff --git a/src/plugins/qbsprojectmanager/qbsnodes.h b/src/plugins/qbsprojectmanager/qbsnodes.h index 60d08486c5a..1640a043100 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.h +++ b/src/plugins/qbsprojectmanager/qbsnodes.h @@ -171,8 +171,9 @@ public: bool addFiles(const QStringList &filePaths, QStringList *notAdded = 0); - void update(const qbs::Project &prj); - void update(const qbs::ProjectData &prjData); + void setProject(const qbs::Project &prj); // This does *not* update the node tree! + + void update(); QbsProject *project() const; const qbs::Project qbsProject() const; @@ -182,13 +183,14 @@ public: private: void ctor(); + void update(const qbs::ProjectData &prjData); + QbsProductNode *findProductNode(const QString &name); QbsProjectNode *findProjectNode(const QString &name); QbsProject *m_project; qbs::Project m_qbsProject; - qbs::ProjectData m_qbsProjectData; static QIcon m_projectIcon; }; } // namespace Internal diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 7821fa4aaf2..46cdcfab84d 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -291,22 +291,11 @@ void QbsProject::handleQbsParsingDone(bool success) m_qbsUpdateFutureInterface = 0; } - if (project.isValid()) { - // Do not throw away data when parsing errors were introduced. That frightens users:-) - m_rootProjectNode->update(project); + if (project.isValid()) + m_rootProjectNode->setProject(project); - updateDocuments(project.isValid() ? project.buildSystemFiles() : QSet() << m_fileName); + readQbsData(); - updateCppCodeModel(m_rootProjectNode->qbsProjectData()); - updateQmlJsCodeModel(m_rootProjectNode->qbsProjectData()); - updateApplicationTargets(m_rootProjectNode->qbsProjectData()); - updateDeploymentInfo(m_rootProjectNode->qbsProject()); - - foreach (Target *t, targets()) - t->updateDefaultRunConfigurations(); - - emit fileListChanged(); - } emit projectParsingDone(success); } @@ -361,6 +350,28 @@ void QbsProject::delayForcedParsing() delayParsing(); } +// Qbs may change its data +void QbsProject::readQbsData() +{ + QTC_ASSERT(m_rootProjectNode, return); + + m_rootProjectNode->update(); + + qbs::Project project = m_rootProjectNode->qbsProject(); + updateDocuments(project.isValid() ? project.buildSystemFiles() : QSet() << m_fileName); + + qbs::ProjectData data = m_rootProjectNode->qbsProjectData(); + updateCppCodeModel(data); + updateQmlJsCodeModel(data); + updateApplicationTargets(data); + updateDeploymentInfo(project); + + foreach (Target *t, targets()) + t->updateDefaultRunConfigurations(); + + emit fileListChanged(); +} + void QbsProject::parseCurrentBuildConfiguration(bool force) { if (!m_forceParsing) diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h index 45cee112e80..e7d6e691463 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.h +++ b/src/plugins/qbsprojectmanager/qbsproject.h @@ -108,6 +108,7 @@ public slots: void invalidate(); void delayParsing(); void delayForcedParsing(); + void readQbsData(); signals: void projectParsingStarted();