diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp index f244f233138..4046f90cacf 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp @@ -437,7 +437,7 @@ void QbsGroupNode::updateQbsGroupData(const qbs::GroupData *grp, const QString & emitNodeUpdated(); } -void QbsGroupNode::setupFiles(QbsBaseProjectNode *root, const QStringList &files, +void QbsGroupNode::setupFiles(ProjectExplorer::FolderNode *root, const QStringList &files, const QString &productPath, bool updateExisting) { // Build up a tree of nodes: @@ -797,17 +797,53 @@ QbsProjectNode *QbsProjectNode::findProjectNode(const QString &name) return 0; } +// -------------------------------------------------------------------- +// QbsRootProjectNode: +// -------------------------------------------------------------------- QbsRootProjectNode::QbsRootProjectNode(QbsProject *project) : QbsProjectNode(project->projectFilePath().toString()), - m_project(project) + m_project(project), + m_buildSystemFiles(new ProjectExplorer::FolderNode(project->projectDirectory().toString())) { + m_buildSystemFiles->setDisplayName(tr("Qbs files")); + addFolderNodes(QList() << m_buildSystemFiles); } void QbsRootProjectNode::update() { + QStringList buildSystemFiles = unreferencedBuildSystemFiles(m_project->qbsProject()); + + QStringList projectBuildSystemFiles; + Utils::FileName base = m_project->projectDirectory(); + foreach (const QString &f, buildSystemFiles) { + if (Utils::FileName::fromString(f).isChildOf(base)) + projectBuildSystemFiles.append(f); + } + QbsGroupNode::setupFiles(m_buildSystemFiles, projectBuildSystemFiles, base.toString(), false); + update(m_project->qbsProjectData()); } +static QSet referencedBuildSystemFiles(const qbs::ProjectData &data) +{ + QSet result; + result.insert(data.location().fileName()); + foreach (const qbs::ProjectData &subProject, data.subProjects()) + result.unite(referencedBuildSystemFiles(subProject)); + foreach (const qbs::ProductData &product, data.products()) { + result.insert(product.location().fileName()); + foreach (const qbs::GroupData &group, product.groups()) + result.insert(group.location().fileName()); + } + + return result; +} + +QStringList QbsRootProjectNode::unreferencedBuildSystemFiles(const qbs::Project &p) const +{ + return p.buildSystemFiles().subtract(referencedBuildSystemFiles(p.projectData())).toList(); +} + } // namespace Internal } // namespace QbsProjectManager diff --git a/src/plugins/qbsprojectmanager/qbsnodes.h b/src/plugins/qbsprojectmanager/qbsnodes.h index bc3bc569625..92dfde80a76 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.h +++ b/src/plugins/qbsprojectmanager/qbsnodes.h @@ -111,7 +111,7 @@ public: QString productPath() const; - static void setupFiles(QbsBaseProjectNode *root, const QStringList &files, + static void setupFiles(FolderNode *root, const QStringList &files, const QString &productPath, bool updateExisting); private: @@ -184,6 +184,10 @@ private: static QIcon m_projectIcon; }; +// -------------------------------------------------------------------- +// QbsRootProjectNode: +// -------------------------------------------------------------------- + class QbsRootProjectNode : public QbsProjectNode { Q_OBJECT @@ -197,7 +201,10 @@ public: QbsProject *project() const { return m_project; } private: + QStringList unreferencedBuildSystemFiles(const qbs::Project &p) const; + QbsProject * const m_project; + ProjectExplorer::FolderNode *m_buildSystemFiles; };