From aab634ff151fa1b3d2f29812a4af2285213921ae Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 2 Nov 2017 10:20:44 +0100 Subject: [PATCH] Revert "Qmake: Make finding pro-files fast" The patch broke defining the correct executable for qmake based projects. Loading more complex projects (like QC itself) did end up failing to run any executable out of the box as the executable name was always wrong. This reverts commit 21b0e7c37e8f04dfc763852089174b51d5675a1c. Change-Id: I471c9963bd739b74e48286e1bde00f7222b90c8b Reviewed-by: Eike Ziller --- src/plugins/qmakeprojectmanager/qmakenodes.cpp | 17 ++++++++--------- src/plugins/qmakeprojectmanager/qmakenodes.h | 5 ++--- .../qmakenodetreebuilder.cpp | 10 +++++----- .../qmakeprojectmanager/qmakeparsernodes.cpp | 17 +++++------------ .../qmakeprojectmanager/qmakeparsernodes.h | 2 -- 5 files changed, 20 insertions(+), 31 deletions(-) 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;