forked from qt-creator/qt-creator
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:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user