From 508189339deb61c245333fa9bbd6532b079fb9b3 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 13 Jun 2023 15:04:56 +0200 Subject: [PATCH] Meson: Consolidate parsers Change-Id: I9c09d22af12a116ea15fcda793bcccd5a12ff840 Reviewed-by: Jarek Kobus --- .../mesonprojectmanager/CMakeLists.txt | 1 - .../mesonprojectmanager/mesoninfoparser.h | 72 ++++++++++++++-- .../mesonprojectmanager.qbs | 1 - .../mesonprojectmanager/targetparser.h | 85 ------------------- 4 files changed, 66 insertions(+), 93 deletions(-) diff --git a/src/plugins/mesonprojectmanager/CMakeLists.txt b/src/plugins/mesonprojectmanager/CMakeLists.txt index e3373b2011c..5920ce7586d 100644 --- a/src/plugins/mesonprojectmanager/CMakeLists.txt +++ b/src/plugins/mesonprojectmanager/CMakeLists.txt @@ -54,7 +54,6 @@ add_qtc_plugin(MesonProjectManager settings.cpp settings.h target.h - targetparser.h toolitemsettings.cpp toolitemsettings.h toolkitaspectwidget.cpp diff --git a/src/plugins/mesonprojectmanager/mesoninfoparser.h b/src/plugins/mesonprojectmanager/mesoninfoparser.h index 768ed13cf2e..3d7db98b391 100644 --- a/src/plugins/mesonprojectmanager/mesoninfoparser.h +++ b/src/plugins/mesonprojectmanager/mesoninfoparser.h @@ -9,7 +9,6 @@ #include "infoparser.h" #include "mesoninfo.h" #include "target.h" -#include "targetparser.h" #include @@ -17,11 +16,72 @@ namespace MesonProjectManager { namespace Internal { - -class MesonInfoParserPrivate; - namespace MesonInfoParser { +class TargetParser +{ + static inline Target::SourceGroup extract_source(const QJsonValue &source) + { + const auto srcObj = source.toObject(); + return {srcObj["language"].toString(), + srcObj["compiler"].toVariant().toStringList(), + srcObj["parameters"].toVariant().toStringList(), + srcObj["sources"].toVariant().toStringList(), + srcObj["generated_sources"].toVariant().toStringList()}; + } + + static inline Target::SourceGroupList extract_sources(const QJsonArray &sources) + { + Target::SourceGroupList res; + std::transform(std::cbegin(sources), + std::cend(sources), + std::back_inserter(res), + extract_source); + return res; + } + + static inline Target extract_target(const QJsonValue &target) + { + auto targetObj = target.toObject(); + Target t{targetObj["type"].toString(), + targetObj["name"].toString(), + targetObj["id"].toString(), + targetObj["defined_in"].toString(), + targetObj["filename"].toVariant().toStringList(), + targetObj["extra_files"].toVariant().toStringList(), + targetObj["subproject"].toString(), + extract_sources(targetObj["target_sources"].toArray())}; + return t; + } + + static inline TargetsList load_targets(const QJsonArray &arr) + { + TargetsList targets; + std::transform(std::cbegin(arr), + std::cend(arr), + std::back_inserter(targets), + extract_target); + return targets; + } + +public: + static TargetsList targetList(const QJsonDocument &js) + { + if (auto obj = get(js.object(), "targets")) + return load_targets(*obj); + return {}; + } + + static TargetsList targetList(const Utils::FilePath &buildDir) + { + Utils::FilePath path = buildDir / Constants::MESON_INFO_DIR / Constants::MESON_INTRO_TARGETS; + if (auto arr = load(path.toFSPathString())) + return load_targets(*arr); + return {}; + } +}; + + struct Result { TargetsList targets; @@ -32,7 +92,7 @@ struct Result inline Result parse(const Utils::FilePath &buildDir) { - return {TargetParser{buildDir}.targetList(), + return {TargetParser::targetList(buildDir), BuildOptionsParser{buildDir}.takeBuildOptions(), BuildSystemFilesParser{buildDir}.files(), InfoParser{buildDir}.info()}; @@ -41,7 +101,7 @@ inline Result parse(const Utils::FilePath &buildDir) inline Result parse(const QByteArray &data) { auto json = QJsonDocument::fromJson(data); - return {TargetParser{json}.targetList(), + return {TargetParser::targetList(json), BuildOptionsParser{json}.takeBuildOptions(), BuildSystemFilesParser{json}.files(), std::nullopt}; diff --git a/src/plugins/mesonprojectmanager/mesonprojectmanager.qbs b/src/plugins/mesonprojectmanager/mesonprojectmanager.qbs index 4b725e0f6ca..7608bd77920 100644 --- a/src/plugins/mesonprojectmanager/mesonprojectmanager.qbs +++ b/src/plugins/mesonprojectmanager/mesonprojectmanager.qbs @@ -35,7 +35,6 @@ Project { "buildsystemfilesparser.h", "common.h", "infoparser.h", - "targetparser.h", "target.h", "mesonpluginconstants.h", "mesonprojectplugin.cpp", diff --git a/src/plugins/mesonprojectmanager/targetparser.h b/src/plugins/mesonprojectmanager/targetparser.h index 9c88b12b267..e69de29bb2d 100644 --- a/src/plugins/mesonprojectmanager/targetparser.h +++ b/src/plugins/mesonprojectmanager/targetparser.h @@ -1,85 +0,0 @@ -// Copyright (C) 2020 Alexis Jeandet. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#pragma once - -#include "mesonpluginconstants.h" -#include "target.h" - -#include -#include -#include -#include -#include - -namespace MesonProjectManager { -namespace Internal { - -class TargetParser -{ - TargetsList m_targets; - static inline Target::SourceGroup extract_source(const QJsonValue &source) - { - const auto srcObj = source.toObject(); - return {srcObj["language"].toString(), - srcObj["compiler"].toVariant().toStringList(), - srcObj["parameters"].toVariant().toStringList(), - srcObj["sources"].toVariant().toStringList(), - srcObj["generated_sources"].toVariant().toStringList()}; - } - - static inline Target::SourceGroupList extract_sources(const QJsonArray &sources) - { - Target::SourceGroupList res; - std::transform(std::cbegin(sources), - std::cend(sources), - std::back_inserter(res), - extract_source); - return res; - } - - static inline Target extract_target(const QJsonValue &target) - { - auto targetObj = target.toObject(); - Target t{targetObj["type"].toString(), - targetObj["name"].toString(), - targetObj["id"].toString(), - targetObj["defined_in"].toString(), - targetObj["filename"].toVariant().toStringList(), - targetObj["extra_files"].toVariant().toStringList(), - targetObj["subproject"].toString(), - extract_sources(targetObj["target_sources"].toArray())}; - return t; - } - - static inline TargetsList load_targets(const QJsonArray &arr) - { - TargetsList targets; - std::transform(std::cbegin(arr), - std::cend(arr), - std::back_inserter(targets), - extract_target); - return targets; - } - -public: - TargetParser(const Utils::FilePath &buildDir) - { - Utils::FilePath path = buildDir / Constants::MESON_INFO_DIR / Constants::MESON_INTRO_TARGETS; - auto arr = load(path.toFSPathString()); - if (arr) - m_targets = load_targets(*arr); - } - - TargetParser(const QJsonDocument &js) - { - auto obj = get(js.object(), "targets"); - if (obj) - m_targets = load_targets(*obj); - } - - inline TargetsList targetList() { return m_targets; } -}; - -} // namespace Internal -} // namespace MesonProjectManager