forked from qt-creator/qt-creator
QbsProjectManager: Sanitize QbsProjectNode.
The current code keeps an instance of QbsProject and of qbs::Project in every project node, with them being null/invalid everywhere except for the top-level node. Instead, introduce a dedicated class for the root node and hold a QbsProject only there. The qbs::Project is held in QbsProject now. As a nice side effect, this also fixes QBS-644, presumably because the dubious-looking use of projectNode() has been removed. Task-number: QBS-644 Change-Id: I5d36806745b9d67879db6f48aa56bc97868e4f17 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
This commit is contained in:
@@ -42,8 +42,6 @@
|
||||
#include <utils/hostosinfo.h>
|
||||
#include <utils/qtcassert.h>
|
||||
|
||||
#include <qbs.h>
|
||||
|
||||
#include <QDir>
|
||||
#include <QStyle>
|
||||
|
||||
@@ -746,16 +744,8 @@ QbsGroupNode *QbsProductNode::findGroupNode(const QString &name)
|
||||
// QbsProjectNode:
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
QbsProjectNode::QbsProjectNode(QbsProject *project) :
|
||||
QbsBaseProjectNode(project->projectFilePath().toString()),
|
||||
m_project(project)
|
||||
{
|
||||
ctor();
|
||||
}
|
||||
|
||||
QbsProjectNode::QbsProjectNode(const QString &path) :
|
||||
QbsBaseProjectNode(path),
|
||||
m_project(0)
|
||||
QbsBaseProjectNode(path)
|
||||
{
|
||||
ctor();
|
||||
}
|
||||
@@ -771,19 +761,6 @@ bool QbsProjectNode::addFiles(const QStringList &filePaths, QStringList *notAdde
|
||||
return prd ? prd->addFiles(filePaths, notAdded) : false;
|
||||
}
|
||||
|
||||
void QbsProjectNode::setProject(const qbs::Project &prj)
|
||||
{
|
||||
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<ProjectExplorer::ProjectNode *> toAdd;
|
||||
@@ -814,7 +791,7 @@ void QbsProjectNode::update(const qbs::ProjectData &prjData)
|
||||
if (!prjData.name().isEmpty())
|
||||
setDisplayName(prjData.name());
|
||||
else
|
||||
setDisplayName(m_project->displayName());
|
||||
setDisplayName(project()->displayName());
|
||||
|
||||
removeProjectNodes(toRemove);
|
||||
addProjectNodes(toAdd);
|
||||
@@ -822,25 +799,17 @@ void QbsProjectNode::update(const qbs::ProjectData &prjData)
|
||||
|
||||
QbsProject *QbsProjectNode::project() const
|
||||
{
|
||||
if (!m_project && projectNode())
|
||||
return static_cast<QbsProjectNode *>(projectNode())->project();
|
||||
return m_project;
|
||||
return static_cast<QbsProjectNode *>(parentFolderNode())->project();
|
||||
}
|
||||
|
||||
const qbs::Project QbsProjectNode::qbsProject() const
|
||||
{
|
||||
QbsProjectNode *parent = qobject_cast<QbsProjectNode *>(projectNode());
|
||||
if (!m_qbsProject.isValid() && parent != this)
|
||||
return parent->qbsProject();
|
||||
return m_qbsProject;
|
||||
return project()->qbsProject();
|
||||
}
|
||||
|
||||
const qbs::ProjectData QbsProjectNode::qbsProjectData() const
|
||||
{
|
||||
if (m_qbsProject.isValid())
|
||||
return m_qbsProject.projectData();
|
||||
else
|
||||
return qbs::ProjectData();
|
||||
return project()->qbsProjectData();
|
||||
}
|
||||
|
||||
bool QbsProjectNode::showInSimpleTree() const
|
||||
@@ -878,5 +847,17 @@ QbsProjectNode *QbsProjectNode::findProjectNode(const QString &name)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
QbsRootProjectNode::QbsRootProjectNode(QbsProject *project) :
|
||||
QbsProjectNode(project->projectFilePath().toString()),
|
||||
m_project(project)
|
||||
{
|
||||
}
|
||||
|
||||
void QbsRootProjectNode::update()
|
||||
{
|
||||
update(m_project->qbsProjectData());
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace QbsProjectManager
|
||||
|
||||
Reference in New Issue
Block a user