From 2d8d90bc796849f809ed2d0069a27725bc734725 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Wed, 30 Nov 2016 14:13:59 +0100 Subject: [PATCH] CMake: Cache buildtargets in builddirmanager No need to have the builddirreaders to so. Change-Id: Ia7e38f6483b29d6a4f4b65baacc17bf184a3cb34 Task-number: QTCREATORBUG-17359 Reviewed-by: Florian Apolloner Reviewed-by: Tobias Hunger --- src/plugins/cmakeprojectmanager/builddirmanager.cpp | 8 +++++++- src/plugins/cmakeprojectmanager/builddirmanager.h | 2 ++ src/plugins/cmakeprojectmanager/servermodereader.cpp | 4 +++- src/plugins/cmakeprojectmanager/servermodereader.h | 2 +- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.cpp b/src/plugins/cmakeprojectmanager/builddirmanager.cpp index 53d4855ce3b..da69b5797df 100644 --- a/src/plugins/cmakeprojectmanager/builddirmanager.cpp +++ b/src/plugins/cmakeprojectmanager/builddirmanager.cpp @@ -142,6 +142,8 @@ void BuildDirManager::updateReaderData() void BuildDirManager::parseOnceReaderReady(bool force) { + m_buildTargets.clear(); + auto fi = new QFutureInterface>(); m_scanFuture = fi->future(); m_futureWatcher.setFuture(m_scanFuture); @@ -302,6 +304,8 @@ void BuildDirManager::resetData() m_cmakeCache.clear(); m_futureWatcher.setFuture(QFuture>()); m_reader.reset(); + + m_buildTargets.clear(); } bool BuildDirManager::updateCMakeStateBeforeBuild() @@ -395,7 +399,9 @@ QList BuildDirManager::buildTargets() const { if (!m_reader) return QList(); - return m_reader->buildTargets(); + if (m_buildTargets.isEmpty()) + m_buildTargets = m_reader->buildTargets(); + return m_buildTargets; } CMakeConfig BuildDirManager::parsedConfiguration() const diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.h b/src/plugins/cmakeprojectmanager/builddirmanager.h index f93d2248fb0..0f36a11ddb4 100644 --- a/src/plugins/cmakeprojectmanager/builddirmanager.h +++ b/src/plugins/cmakeprojectmanager/builddirmanager.h @@ -114,6 +114,8 @@ private: std::unique_ptr m_reader; QFutureWatcher> m_futureWatcher; QFuture> m_scanFuture; + + mutable QList m_buildTargets; }; } // namespace Internal diff --git a/src/plugins/cmakeprojectmanager/servermodereader.cpp b/src/plugins/cmakeprojectmanager/servermodereader.cpp index 60770fb1a17..60fe7094ca6 100644 --- a/src/plugins/cmakeprojectmanager/servermodereader.cpp +++ b/src/plugins/cmakeprojectmanager/servermodereader.cpp @@ -186,7 +186,7 @@ bool ServerModeReader::hasData() const QList ServerModeReader::buildTargets() const { - return transform(m_targets, [](const Target *t) -> CMakeBuildTarget { + const QList result = transform(m_targets, [](const Target *t) -> CMakeBuildTarget { CMakeBuildTarget ct; ct.title = t->name; ct.executable = t->artifacts.isEmpty() ? FileName() : t->artifacts.at(0); @@ -207,6 +207,8 @@ QList ServerModeReader::buildTargets() const ct.sourceDirectory = t->sourceDirectory; return ct; }); + m_targets.clear(); + return result; } CMakeConfig ServerModeReader::parsedConfiguration() const diff --git a/src/plugins/cmakeprojectmanager/servermodereader.h b/src/plugins/cmakeprojectmanager/servermodereader.h index d21bd241e05..f0692bb83a4 100644 --- a/src/plugins/cmakeprojectmanager/servermodereader.h +++ b/src/plugins/cmakeprojectmanager/servermodereader.h @@ -147,7 +147,7 @@ private: QList m_cmakeInputsFileNodes; QList m_projects; - QList m_targets; + mutable QList m_targets; QList m_fileGroups; };