From 1f5fef5132a7bfff48572070573620e2c2f64f36 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 13 Jun 2023 15:14:12 +0200 Subject: [PATCH] Meson: Use Utils::FilePaths in parser Change-Id: Idb256110e519c642420580ebd159bcffa11c0f1b Reviewed-by: Jarek Kobus --- .../buildsystemfilesparser.h | 36 ---------------- .../mesonprojectmanager/mesoninfoparser.h | 43 +++++++++++++++++-- .../mesonprojectmanager/projecttree.cpp | 2 +- src/plugins/mesonprojectmanager/projecttree.h | 2 +- 4 files changed, 42 insertions(+), 41 deletions(-) diff --git a/src/plugins/mesonprojectmanager/buildsystemfilesparser.h b/src/plugins/mesonprojectmanager/buildsystemfilesparser.h index a64dd0c63c7..3937fb7b02e 100644 --- a/src/plugins/mesonprojectmanager/buildsystemfilesparser.h +++ b/src/plugins/mesonprojectmanager/buildsystemfilesparser.h @@ -17,41 +17,5 @@ namespace MesonProjectManager { namespace Internal { -class BuildSystemFilesParser -{ - std::vector m_files; - static void appendFiles(const std::optional &arr, std::vector &dest) - { - if (arr) - std::transform(std::cbegin(*arr), - std::cend(*arr), - std::back_inserter(dest), - [](const auto &file) { - return Utils::FilePath::fromString(file.toString()); - }); - } - -public: - BuildSystemFilesParser(const Utils::FilePath &buildDir) - { - Utils::FilePath path = buildDir / Constants::MESON_INFO_DIR / Constants::MESON_INTRO_BUILDSYSTEM_FILES; - auto arr = load(path.toFSPathString()); - appendFiles(arr, m_files); - } - - BuildSystemFilesParser(const QJsonDocument &js) - { - auto arr = get(js.object(), "projectinfo", "buildsystem_files"); - appendFiles(arr, m_files); - const auto subprojects = get(js.object(), "projectinfo", "subprojects"); - for (const auto &subproject : *subprojects) { - auto arr = get(subproject.toObject(), "buildsystem_files"); - appendFiles(arr, m_files); - } - } - - std::vector files() { return m_files; }; -}; - } // namespace Internal } // namespace MesonProjectManager diff --git a/src/plugins/mesonprojectmanager/mesoninfoparser.h b/src/plugins/mesonprojectmanager/mesoninfoparser.h index 3d7db98b391..6bf9bba0a83 100644 --- a/src/plugins/mesonprojectmanager/mesoninfoparser.h +++ b/src/plugins/mesonprojectmanager/mesoninfoparser.h @@ -81,12 +81,49 @@ public: } }; +class BuildSystemFilesParser +{ + static void appendFiles(const std::optional &arr, Utils::FilePaths &dest) + { + if (arr) + std::transform(std::cbegin(*arr), + std::cend(*arr), + std::back_inserter(dest), + [](const auto &file) { + return Utils::FilePath::fromString(file.toString()); + }); + } + +public: + static inline Utils::FilePaths files(const Utils::FilePath &buildDir) + { + Utils::FilePaths files; + Utils::FilePath path = buildDir / Constants::MESON_INFO_DIR / Constants::MESON_INTRO_BUILDSYSTEM_FILES; + auto arr = load(path.toFSPathString()); + appendFiles(arr, files); + return files; + } + + static inline Utils::FilePaths files(const QJsonDocument &js) + { + Utils::FilePaths files; + auto arr = get(js.object(), "projectinfo", "buildsystem_files"); + appendFiles(arr, files); + const auto subprojects = get(js.object(), "projectinfo", "subprojects"); + for (const auto &subproject : *subprojects) { + auto arr = get(subproject.toObject(), "buildsystem_files"); + appendFiles(arr, files); + } + return files; + } +}; + struct Result { TargetsList targets; BuildOptionsList buildOptions; - std::vector buildSystemFiles; + Utils::FilePaths buildSystemFiles; std::optional mesonInfo; }; @@ -94,7 +131,7 @@ inline Result parse(const Utils::FilePath &buildDir) { return {TargetParser::targetList(buildDir), BuildOptionsParser{buildDir}.takeBuildOptions(), - BuildSystemFilesParser{buildDir}.files(), + BuildSystemFilesParser::files(buildDir), InfoParser{buildDir}.info()}; } @@ -103,7 +140,7 @@ inline Result parse(const QByteArray &data) auto json = QJsonDocument::fromJson(data); return {TargetParser::targetList(json), BuildOptionsParser{json}.takeBuildOptions(), - BuildSystemFilesParser{json}.files(), + BuildSystemFilesParser::files(json), std::nullopt}; } diff --git a/src/plugins/mesonprojectmanager/projecttree.cpp b/src/plugins/mesonprojectmanager/projecttree.cpp index 18ff936ba49..2b98487f24f 100644 --- a/src/plugins/mesonprojectmanager/projecttree.cpp +++ b/src/plugins/mesonprojectmanager/projecttree.cpp @@ -57,7 +57,7 @@ void addOptionsFile(std::unique_ptr &project) std::unique_ptr ProjectTree::buildTree(const Utils::FilePath &srcDir, const TargetsList &targets, - const std::vector &bsFiles) + const Utils::FilePaths &bsFiles) { using namespace ProjectExplorer; std::set targetPaths; diff --git a/src/plugins/mesonprojectmanager/projecttree.h b/src/plugins/mesonprojectmanager/projecttree.h index 74ced6c869f..2335fb65a0d 100644 --- a/src/plugins/mesonprojectmanager/projecttree.h +++ b/src/plugins/mesonprojectmanager/projecttree.h @@ -17,7 +17,7 @@ public: ProjectTree(); static std::unique_ptr buildTree(const Utils::FilePath &srcDir, const TargetsList &targets, - const std::vector &bsFiles); + const Utils::FilePaths &bsFiles); }; } // namespace Internal