CMake: Cache buildtargets in builddirmanager

No need to have the builddirreaders to so.

Change-Id: Ia7e38f6483b29d6a4f4b65baacc17bf184a3cb34
Task-number: QTCREATORBUG-17359
Reviewed-by: Florian Apolloner <florian@apolloner.eu>
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Tobias Hunger
2016-11-30 14:13:59 +01:00
parent c9be75fe65
commit 2d8d90bc79
4 changed files with 13 additions and 3 deletions

View File

@@ -142,6 +142,8 @@ void BuildDirManager::updateReaderData()
void BuildDirManager::parseOnceReaderReady(bool force) void BuildDirManager::parseOnceReaderReady(bool force)
{ {
m_buildTargets.clear();
auto fi = new QFutureInterface<QList<ProjectExplorer::FileNode *>>(); auto fi = new QFutureInterface<QList<ProjectExplorer::FileNode *>>();
m_scanFuture = fi->future(); m_scanFuture = fi->future();
m_futureWatcher.setFuture(m_scanFuture); m_futureWatcher.setFuture(m_scanFuture);
@@ -302,6 +304,8 @@ void BuildDirManager::resetData()
m_cmakeCache.clear(); m_cmakeCache.clear();
m_futureWatcher.setFuture(QFuture<QList<FileNode *>>()); m_futureWatcher.setFuture(QFuture<QList<FileNode *>>());
m_reader.reset(); m_reader.reset();
m_buildTargets.clear();
} }
bool BuildDirManager::updateCMakeStateBeforeBuild() bool BuildDirManager::updateCMakeStateBeforeBuild()
@@ -395,7 +399,9 @@ QList<CMakeBuildTarget> BuildDirManager::buildTargets() const
{ {
if (!m_reader) if (!m_reader)
return QList<CMakeBuildTarget>(); return QList<CMakeBuildTarget>();
return m_reader->buildTargets(); if (m_buildTargets.isEmpty())
m_buildTargets = m_reader->buildTargets();
return m_buildTargets;
} }
CMakeConfig BuildDirManager::parsedConfiguration() const CMakeConfig BuildDirManager::parsedConfiguration() const

View File

@@ -114,6 +114,8 @@ private:
std::unique_ptr<BuildDirReader> m_reader; std::unique_ptr<BuildDirReader> m_reader;
QFutureWatcher<QList<ProjectExplorer::FileNode*>> m_futureWatcher; QFutureWatcher<QList<ProjectExplorer::FileNode*>> m_futureWatcher;
QFuture<QList<ProjectExplorer::FileNode*>> m_scanFuture; QFuture<QList<ProjectExplorer::FileNode*>> m_scanFuture;
mutable QList<CMakeBuildTarget> m_buildTargets;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -186,7 +186,7 @@ bool ServerModeReader::hasData() const
QList<CMakeBuildTarget> ServerModeReader::buildTargets() const QList<CMakeBuildTarget> ServerModeReader::buildTargets() const
{ {
return transform(m_targets, [](const Target *t) -> CMakeBuildTarget { const QList<CMakeBuildTarget> result = transform(m_targets, [](const Target *t) -> CMakeBuildTarget {
CMakeBuildTarget ct; CMakeBuildTarget ct;
ct.title = t->name; ct.title = t->name;
ct.executable = t->artifacts.isEmpty() ? FileName() : t->artifacts.at(0); ct.executable = t->artifacts.isEmpty() ? FileName() : t->artifacts.at(0);
@@ -207,6 +207,8 @@ QList<CMakeBuildTarget> ServerModeReader::buildTargets() const
ct.sourceDirectory = t->sourceDirectory; ct.sourceDirectory = t->sourceDirectory;
return ct; return ct;
}); });
m_targets.clear();
return result;
} }
CMakeConfig ServerModeReader::parsedConfiguration() const CMakeConfig ServerModeReader::parsedConfiguration() const

View File

@@ -147,7 +147,7 @@ private:
QList<ProjectExplorer::FileNode *> m_cmakeInputsFileNodes; QList<ProjectExplorer::FileNode *> m_cmakeInputsFileNodes;
QList<Project *> m_projects; QList<Project *> m_projects;
QList<Target *> m_targets; mutable QList<Target *> m_targets;
QList<FileGroup *> m_fileGroups; QList<FileGroup *> m_fileGroups;
}; };