diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2019-06-20 15:51:04 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2019-06-20 14:40:55 +0000 |
commit | add60c014871bdae0a038398695425a347b44952 (patch) | |
tree | 71eec14fa7378f9c3313dae1e3b1584c7f7b33da /src/plugins | |
parent | 129c0abb5a38d8f928a122f173ac361f56f2df3e (diff) | |
download | qt-creator-add60c014871bdae0a038398695425a347b44952.tar.gz |
CMake: Avoid a bit of useless processing when updating the project tree
Do not pass around a list of filenodes with all the known header files.
That list gets converted into a QSet<FilePath> and then that is used.
Just generate the QSet<FilePath> directly and avoid that conversion.
Change-Id: I2444a2a6b4a1600fe476e66673a1a2e9c8900764
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src/plugins')
7 files changed, 27 insertions, 31 deletions
diff --git a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp index aa881e856e..0e5b0d25f6 100644 --- a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp +++ b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp @@ -384,7 +384,7 @@ void addCompileGroups(ProjectNode *targetRoot, const Utils::FilePath &sourceDirectory, const Utils::FilePath &buildDirectory, const TargetDetails &td, - QVector<FileNode *> &knownHeaderNodes) + QSet<FilePath> &knownHeaderNodes) { const bool inSourceBuild = (sourceDirectory == buildDirectory); const QDir currentSourceDir(sourceDirectory.toString()); @@ -418,7 +418,7 @@ void addCompileGroups(ProjectNode *targetRoot, // Register headers: if (node->fileType() == FileType::Header) - knownHeaderNodes.append(node.get()); + knownHeaderNodes.insert(node->filePath()); // Where does the file node need to go? if (sourcePath.isChildOf(buildDirectory) && !inSourceBuild) { @@ -450,7 +450,7 @@ void addTargets(const QHash<Utils::FilePath, ProjectExplorer::ProjectNode *> &cm const FilePath &topSourceDir, const QDir &sourceDir, const QDir &buildDir, - QVector<ProjectExplorer::FileNode *> &knownHeaderNodes) + QSet<FilePath> &knownHeaderNodes) { for (const FileApiDetails::Target &t : config.targets) { const TargetDetails &td = Utils::findOrDefault(targetDetails, @@ -470,10 +470,10 @@ void addTargets(const QHash<Utils::FilePath, ProjectExplorer::ProjectNode *> &cm } } -std::pair<std::unique_ptr<CMakeProjectNode>, QVector<FileNode *>> generateRootProjectNode( +std::pair<std::unique_ptr<CMakeProjectNode>, QSet<FilePath>> generateRootProjectNode( PreprocessedData &data, const FilePath &sourceDirectory, const FilePath &buildDirectory) { - std::pair<std::unique_ptr<CMakeProjectNode>, QVector<FileNode *>> result; + std::pair<std::unique_ptr<CMakeProjectNode>, QSet<FilePath>> result; result.first = std::make_unique<CMakeProjectNode>(sourceDirectory); const QDir sourceDir(sourceDirectory.toString()); @@ -488,7 +488,7 @@ std::pair<std::unique_ptr<CMakeProjectNode>, QVector<FileNode *>> generateRootPr std::move(data.cmakeListNodes)); data.cmakeListNodes.clear(); // Remove all the nullptr in the vector... - QVector<FileNode *> knownHeaders; + QSet<FilePath> knownHeaders; addProjects(cmakeListsNodes, data.codemodel, sourceDir); addTargets(cmakeListsNodes, diff --git a/src/plugins/cmakeprojectmanager/fileapidataextractor.h b/src/plugins/cmakeprojectmanager/fileapidataextractor.h index b84abbf7c8..3741f339af 100644 --- a/src/plugins/cmakeprojectmanager/fileapidataextractor.h +++ b/src/plugins/cmakeprojectmanager/fileapidataextractor.h @@ -47,7 +47,7 @@ public: QList<CMakeBuildTarget> buildTargets; CppTools::RawProjectParts projectParts; std::unique_ptr<CMakeProjectNode> rootProjectNode; - QVector<ProjectExplorer::FileNode *> knownHeaders; + QSet<Utils::FilePath> knownHeaders; }; FileApiQtcData extractData(FileApiData &data, diff --git a/src/plugins/cmakeprojectmanager/fileapireader.h b/src/plugins/cmakeprojectmanager/fileapireader.h index b6e2218f0f..694f60e1a2 100644 --- a/src/plugins/cmakeprojectmanager/fileapireader.h +++ b/src/plugins/cmakeprojectmanager/fileapireader.h @@ -82,7 +82,7 @@ private: QList<CMakeBuildTarget> m_buildTargets; CppTools::RawProjectParts m_projectParts; std::unique_ptr<CMakeProjectNode> m_rootProjectNode; - QVector<ProjectExplorer::FileNode *> m_knownHeaders; + QSet<Utils::FilePath> m_knownHeaders; Utils::optional<QFuture<FileApiQtcData *>> m_future; diff --git a/src/plugins/cmakeprojectmanager/projecttreehelper.cpp b/src/plugins/cmakeprojectmanager/projecttreehelper.cpp index 1bc86189d7..58b2f744e8 100644 --- a/src/plugins/cmakeprojectmanager/projecttreehelper.cpp +++ b/src/plugins/cmakeprojectmanager/projecttreehelper.cpp @@ -174,7 +174,7 @@ CMakeTargetNode *createTargetNode(const QHash<Utils::FilePath, ProjectNode *> &c } void addHeaderNodes(ProjectNode *root, - const QVector<FileNode *> knownHeaders, + QSet<Utils::FilePath> &seenHeaders, const QList<const FileNode *> &allFiles) { if (root->isEmpty()) @@ -188,9 +188,6 @@ void addHeaderNodes(ProjectNode *root, QCoreApplication::translate("CMakeProjectManager::Internal::ServerModeReader", "<Headers>")); headerNode->setIcon(headerNodeIcon); - // knownHeaders are already listed in their targets: - QSet<Utils::FilePath> seenHeaders = Utils::transform<QSet>(knownHeaders, &FileNode::filePath); - // Add scanned headers: for (const FileNode *fn : allFiles) { if (fn->fileType() != FileType::Header || !fn->filePath().isChildOf(root->filePath())) diff --git a/src/plugins/cmakeprojectmanager/projecttreehelper.h b/src/plugins/cmakeprojectmanager/projecttreehelper.h index 58266cd401..1371330f70 100644 --- a/src/plugins/cmakeprojectmanager/projecttreehelper.h +++ b/src/plugins/cmakeprojectmanager/projecttreehelper.h @@ -67,7 +67,7 @@ CMakeTargetNode *createTargetNode( const QString &displayName); void addHeaderNodes(ProjectExplorer::ProjectNode *root, - const QVector<ProjectExplorer::FileNode *> knownHeaders, + QSet<Utils::FilePath> &seenHeaders, const QList<const ProjectExplorer::FileNode *> &allFiles); } // namespace Internal diff --git a/src/plugins/cmakeprojectmanager/servermodereader.cpp b/src/plugins/cmakeprojectmanager/servermodereader.cpp index abf05be4c8..6b993ecdbb 100644 --- a/src/plugins/cmakeprojectmanager/servermodereader.cpp +++ b/src/plugins/cmakeprojectmanager/servermodereader.cpp @@ -269,7 +269,7 @@ std::unique_ptr<CMakeProjectNode> ServerModeReader::generateProjectTree(const QL QHash<Utils::FilePath, ProjectNode *> cmakeListsNodes = addCMakeLists(root.get(), std::move(cmakeLists)); - QVector<FileNode *> knownHeaders; + QSet<FilePath> knownHeaders; addProjects(cmakeListsNodes, m_projects, knownHeaders); addHeaderNodes(root.get(), knownHeaders, allFiles); @@ -755,18 +755,18 @@ void ServerModeReader::fixTarget(ServerModeReader::Target *target) const void ServerModeReader::addProjects(const QHash<Utils::FilePath, ProjectNode *> &cmakeListsNodes, const QList<Project *> &projects, - QVector<FileNode *> &knownHeaderNodes) + QSet<FilePath> &knownHeaders) { for (const Project *p : projects) { createProjectNode(cmakeListsNodes, p->sourceDirectory, p->name); - addTargets(cmakeListsNodes, p->targets, knownHeaderNodes); + addTargets(cmakeListsNodes, p->targets, knownHeaders); } } void ServerModeReader::addTargets( const QHash<Utils::FilePath, ProjectExplorer::ProjectNode *> &cmakeListsNodes, const QList<Target *> &targets, - QVector<ProjectExplorer::FileNode *> &knownHeaderNodes) + QSet<Utils::FilePath> &knownHeaders) { for (const Target *t : targets) { CMakeTargetNode *tNode = createTargetNode(cmakeListsNodes, t->sourceDirectory, t->name); @@ -802,7 +802,7 @@ void ServerModeReader::addTargets( } } tNode->setLocationInfo(info); - addFileGroups(tNode, t->sourceDirectory, t->buildDirectory, t->fileGroups, knownHeaderNodes); + addFileGroups(tNode, t->sourceDirectory, t->buildDirectory, t->fileGroups, knownHeaders); } } @@ -810,7 +810,7 @@ void ServerModeReader::addFileGroups(ProjectNode *targetRoot, const Utils::FilePath &sourceDirectory, const Utils::FilePath &buildDirectory, const QList<ServerModeReader::FileGroup *> &fileGroups, - QVector<FileNode *> &knownHeaderNodes) + QSet<Utils::FilePath> &knownHeaders) { std::vector<std::unique_ptr<FileNode>> toList; QSet<Utils::FilePath> alreadyListed; @@ -825,15 +825,14 @@ void ServerModeReader::addFileGroups(ProjectNode *targetRoot, alreadyListed.insert(fn); return count != alreadyListed.count(); }); - std::vector<std::unique_ptr<FileNode>> newFileNodes - = Utils::transform<std::vector>(newSources, - [f, &knownHeaderNodes](const Utils::FilePath &fn) { - auto node = std::make_unique<FileNode>(fn, Node::fileTypeForFileName(fn)); - node->setIsGenerated(f->isGenerated); - if (node->fileType() == FileType::Header) - knownHeaderNodes.append(node.get()); - return node; - }); + std::vector<std::unique_ptr<FileNode>> newFileNodes = Utils::transform<std::vector>( + newSources, [f, &knownHeaders](const Utils::FilePath &fn) { + auto node = std::make_unique<FileNode>(fn, Node::fileTypeForFileName(fn)); + node->setIsGenerated(f->isGenerated); + if (node->fileType() == FileType::Header) + knownHeaders.insert(node->filePath()); + return node; + }); std::move(std::begin(newFileNodes), std::end(newFileNodes), std::back_inserter(toList)); } diff --git a/src/plugins/cmakeprojectmanager/servermodereader.h b/src/plugins/cmakeprojectmanager/servermodereader.h index 17737990f0..91b2d25bd2 100644 --- a/src/plugins/cmakeprojectmanager/servermodereader.h +++ b/src/plugins/cmakeprojectmanager/servermodereader.h @@ -147,15 +147,15 @@ private: void addProjects(const QHash<Utils::FilePath, ProjectExplorer::ProjectNode *> &cmakeListsNodes, const QList<Project *> &projects, - QVector<ProjectExplorer::FileNode *> &knownHeaderNodes); + QSet<Utils::FilePath> &knownHeaders); void addTargets(const QHash<Utils::FilePath, ProjectExplorer::ProjectNode *> &cmakeListsNodes, const QList<Target *> &targets, - QVector<ProjectExplorer::FileNode *> &knownHeaderNodes); + QSet<Utils::FilePath> &knownHeaders); void addFileGroups(ProjectExplorer::ProjectNode *targetRoot, const Utils::FilePath &sourceDirectory, const Utils::FilePath &buildDirectory, const QList<FileGroup *> &fileGroups, - QVector<ProjectExplorer::FileNode *> &knowHeaderNodes); + QSet<Utils::FilePath> &knownHeaders); std::unique_ptr<ServerMode> m_cmakeServer; std::unique_ptr<QFutureInterface<void>> m_future; |