diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 4bb5ec1b64c..64c41031557 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -872,6 +872,15 @@ bool Project::hasParsingData() const return d->m_hasParsingData; } +const ProjectNode *Project::findNodeForBuildKey(const QString &buildKey) const +{ + const ProjectNode *result = nullptr; + d->m_rootProjectNode->forEachProjectNode([buildKey](const ProjectNode *node) { + return node->buildKey() == buildKey; + }); + return result; +} + ProjectImporter *Project::projectImporter() const { return nullptr; diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index 3864599982b..55ddb8de8e5 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -171,6 +171,8 @@ public: bool isParsing() const; bool hasParsingData() const; + const ProjectNode *findNodeForBuildKey(const QString &buildKey) const; + template void subscribeSignal(void (S::*sig)(Args1...), R*recv, T (R::*sl)(Args2...)) { new Internal::ProjectSubscription([sig, recv, sl, this](ProjectConfiguration *pc) { diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h index 310b1a461f5..0435e42043c 100644 --- a/src/plugins/projectexplorer/projectnodes.h +++ b/src/plugins/projectexplorer/projectnodes.h @@ -145,6 +145,8 @@ public: virtual ContainerNode *asContainerNode() { return nullptr; } virtual const ContainerNode *asContainerNode() const { return nullptr; } + virtual QString buildKey() const { return QString(); } + static bool sortByPath(const Node *a, const Node *b); void setParentFolderNode(FolderNode *parentFolder); diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp index 847cec37829..28a261e71e4 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp @@ -438,6 +438,11 @@ bool QbsProductNode::renameFile(const QString &filePath, const QString &newFileP return prjNode->project()->renameFileInProduct(filePath, newFilePath, m_qbsProductData, grp); } +QString QbsProductNode::buildKey() const +{ + return QbsProject::uniqueProductName(m_qbsProductData); +} + // -------------------------------------------------------------------- // QbsProjectNode: // -------------------------------------------------------------------- diff --git a/src/plugins/qbsprojectmanager/qbsnodes.h b/src/plugins/qbsprojectmanager/qbsnodes.h index 8d57c8cf60f..ae3015dc4e1 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.h +++ b/src/plugins/qbsprojectmanager/qbsnodes.h @@ -110,6 +110,8 @@ public: bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = nullptr) override; bool renameFile(const QString &filePath, const QString &newFilePath) override; + QString buildKey() const override; + const qbs::ProductData qbsProductData() const { return m_qbsProductData; } private: diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp index e48c7a2037a..c68ef96122e 100644 --- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp +++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp @@ -165,10 +165,8 @@ void QbsRunConfiguration::updateTargetInformation() bool QbsRunConfiguration::canRunForNode(const Node *node) const { - if (auto pn = dynamic_cast(node)) { - const QString uniqueProductName = buildKey(); - return uniqueProductName == QbsProject::uniqueProductName(pn->qbsProductData()); - } + if (auto pn = dynamic_cast(node)) + return buildKey() == pn->buildKey(); return false; } diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp index 4ba4289916c..9f093e60201 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -223,6 +223,11 @@ bool QmakeProFileNode::showInSimpleTree() const return showInSimpleTree(projectType()) || m_project->rootProjectNode() == this; } +QString QmakeProFileNode::buildKey() const +{ + return filePath().toString(); +} + QmakeProFile *QmakeProFileNode::proFile() const { return static_cast(QmakePriFileNode::priFile()); diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.h b/src/plugins/qmakeprojectmanager/qmakenodes.h index 9e3714335ac..31eb5871ef4 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.h +++ b/src/plugins/qmakeprojectmanager/qmakenodes.h @@ -91,6 +91,8 @@ public: bool showInSimpleTree() const override; + QString buildKey() const override; + AddNewInformation addNewInformation(const QStringList &files, Node *context) const override; QmakeProjectManager::ProjectType projectType() const;