diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp index 2d0ff674657..f19723df952 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -44,21 +44,20 @@ namespace QmakeProjectManager { */ QmakePriFileNode::QmakePriFileNode(QmakeProject *project, QmakeProFileNode *qmakeProFileNode, - const FileName &filePath, QmakePriFile *pf) : + const FileName &filePath) : ProjectNode(filePath), m_project(project), - m_qmakeProFileNode(qmakeProFileNode), - m_qmakePriFile(pf) + m_qmakeProFileNode(qmakeProFileNode) { } QmakePriFile *QmakePriFileNode::priFile() const { - return m_qmakePriFile; + return m_project->rootProFile()->findPriFile(filePath()); } bool QmakePriFileNode::deploysFolder(const QString &folder) const { - const QmakePriFile *pri = priFile(); + QmakePriFile *pri = priFile(); return pri ? pri->deploysFolder(folder) : false; } @@ -146,7 +145,7 @@ bool QmakePriFileNode::supportsAction(ProjectAction action, const Node *node) co bool QmakePriFileNode::canAddSubProject(const QString &proFilePath) const { - const QmakePriFile *pri = priFile(); + QmakePriFile *pri = priFile(); return pri ? pri->canAddSubProject(proFilePath) : false; } @@ -214,8 +213,8 @@ QmakeProFileNode *QmakeProFileNode::findProFileFor(const FileName &fileName) con \class QmakeProFileNode Implements abstract ProjectNode class */ -QmakeProFileNode::QmakeProFileNode(QmakeProject *project, const FileName &filePath, QmakeProFile *pf) : - QmakePriFileNode(project, this, filePath, pf) +QmakeProFileNode::QmakeProFileNode(QmakeProject *project, const FileName &filePath) : + QmakePriFileNode(project, this, filePath) { } bool QmakeProFileNode::showInSimpleTree() const @@ -225,7 +224,7 @@ bool QmakeProFileNode::showInSimpleTree() const QmakeProFile *QmakeProFileNode::proFile() const { - return static_cast(QmakePriFileNode::priFile()); + return m_project->rootProFile()->findProFile(filePath()); } FolderNode::AddNewInformation QmakeProFileNode::addNewInformation(const QStringList &files, Node *context) const diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.h b/src/plugins/qmakeprojectmanager/qmakenodes.h index 56a2b6be622..aca17e18a29 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.h +++ b/src/plugins/qmakeprojectmanager/qmakenodes.h @@ -42,7 +42,7 @@ class QMAKEPROJECTMANAGER_EXPORT QmakePriFileNode : public ProjectExplorer::Proj { public: QmakePriFileNode(QmakeProject *project, QmakeProFileNode *qmakeProFileNode, - const Utils::FileName &filePath, QmakePriFile *pf); + const Utils::FileName &filePath); QmakePriFile *priFile() const; @@ -73,14 +73,13 @@ protected: private: QmakeProFileNode *m_qmakeProFileNode = nullptr; - QmakePriFile *m_qmakePriFile = nullptr; }; // Implements ProjectNode for qmake .pro files class QMAKEPROJECTMANAGER_EXPORT QmakeProFileNode : public QmakePriFileNode { public: - QmakeProFileNode(QmakeProject *project, const Utils::FileName &filePath, QmakeProFile *pf); + QmakeProFileNode(QmakeProject *project, const Utils::FileName &filePath); QmakeProFile *proFile() const; diff --git a/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp b/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp index 6e071c90e0a..a65b9cd44b4 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp @@ -183,12 +183,12 @@ static void createTree(const QmakePriFile *pri, QmakePriFileNode *node, const Fi } // Virtual folders: - for (QmakePriFile *c : pri->children()) { + for (const QmakePriFile *c : pri->children()) { QmakePriFileNode *newNode = nullptr; - if (auto pf = dynamic_cast(c)) - newNode = new QmakeProFileNode(c->project(), c->filePath(), pf); + if (dynamic_cast(c)) + newNode = new QmakeProFileNode(c->project(), c->filePath()); else - newNode = new QmakePriFileNode(c->project(), node->proFileNode(), c->filePath(), c); + newNode = new QmakePriFileNode(c->project(), node->proFileNode(), c->filePath()); createTree(c, newNode, toExclude); node->addNode(newNode); } @@ -203,7 +203,7 @@ QmakeProFileNode *QmakeNodeTreeBuilder::buildTree(QmakeProject *project) const FileNameList toExclude = qt ? qt->directoriesToIgnoreInProjectTree() : FileNameList(); - auto root = new QmakeProFileNode(project, project->projectFilePath(), project->rootProFile()); + auto root = new QmakeProFileNode(project, project->projectFilePath()); createTree(project->rootProFile(), root, toExclude); return root; diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index d37a61626c5..1c3f4962aa4 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -199,14 +199,12 @@ QmakePriFile *QmakePriFile::findPriFile(const FileName &fileName) { if (fileName == filePath()) return this; - return findOrDefault(m_children, [&fileName](QmakePriFile *pf) { return pf->findPriFile(fileName); }); -} + for (QmakePriFile *n : children()) { + if (QmakePriFile *result = n->findPriFile(fileName)) + return result; + } + return nullptr; -const QmakePriFile *QmakePriFile::findPriFile(const FileName &fileName) const -{ - if (fileName == filePath()) - return this; - return findOrDefault(m_children, [&fileName](const QmakePriFile *pf) { return pf->findPriFile(fileName); }); } void QmakePriFile::makeEmpty() @@ -1012,11 +1010,6 @@ QmakeProFile *QmakeProFile::findProFile(const FileName &fileName) return dynamic_cast(findPriFile(fileName)); } -const QmakeProFile *QmakeProFile::findProFile(const FileName &fileName) const -{ - return dynamic_cast(findPriFile(fileName)); -} - QString QmakeProFile::makefile() const { return singleVariableValue(Variable::Makefile); diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h index 41138f4563f..2cad1340cc8 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h @@ -121,7 +121,6 @@ public: QVector children() const; QmakePriFile *findPriFile(const Utils::FileName &fileName); - const QmakePriFile *findPriFile(const Utils::FileName &fileName) const; bool knowsFile(const Utils::FileName &filePath) const; @@ -281,7 +280,6 @@ public: QList allProFiles(); QmakeProFile *findProFile(const Utils::FileName &fileName); - const QmakeProFile *findProFile(const Utils::FileName &fileName) const; ProjectType projectType() const;