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();