From af572c546fa2dc06f2b1ad0cf55da95bc414a91b Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Thu, 2 Nov 2017 15:23:37 +0100 Subject: [PATCH] Qmake: Speed up QmakePriFile::findPriFile Avoid needless detaching in that method: The method is used less since the Nodes no longer need to go through it. All the runconfigurations still use it, so this change is still noticeable. Change-Id: I9f5e238ab1ef7165fd4fef1b0f80d4e5daa9a7e8 Reviewed-by: Eike Ziller Reviewed-by: Christian Stenger --- .../qmakeprojectmanager/qmakeparsernodes.cpp | 20 +++++++++++++++++-- .../qmakeprojectmanager/qmakeparsernodes.h | 2 ++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index 1c3f4962aa4..caa1e115113 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -43,6 +43,7 @@ #include #include +#include #include #include #include @@ -199,12 +200,22 @@ QmakePriFile *QmakePriFile::findPriFile(const FileName &fileName) { if (fileName == filePath()) return this; - for (QmakePriFile *n : children()) { + for (QmakePriFile *n : Utils::asConst(m_children)) { if (QmakePriFile *result = n->findPriFile(fileName)) return result; } return nullptr; +} +const QmakePriFile *QmakePriFile::findPriFile(const FileName &fileName) const +{ + if (fileName == filePath()) + return this; + for (const QmakePriFile *n : Utils::asConst(m_children)) { + if (const QmakePriFile *result = n->findPriFile(fileName)) + return result; + } + return nullptr; } void QmakePriFile::makeEmpty() @@ -1007,7 +1018,12 @@ static ProjectType proFileTemplateTypeToProjectType(ProFileEvaluator::TemplateTy QmakeProFile *QmakeProFile::findProFile(const FileName &fileName) { - return dynamic_cast(findPriFile(fileName)); + return static_cast(findPriFile(fileName)); +} + +const QmakeProFile *QmakeProFile::findProFile(const FileName &fileName) const +{ + return static_cast(findPriFile(fileName)); } QString QmakeProFile::makefile() const diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h index 2cad1340cc8..41138f4563f 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h @@ -121,6 +121,7 @@ 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; @@ -280,6 +281,7 @@ public: QList allProFiles(); QmakeProFile *findProFile(const Utils::FileName &fileName); + const QmakeProFile *findProFile(const Utils::FileName &fileName) const; ProjectType projectType() const;