From 7ea90a11e4b53eaff70dbb85a20ead9aa817bc13 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Wed, 6 Dec 2023 14:34:27 +0100 Subject: [PATCH] ProjectExplorer: Make CustomParser creation available outside PE plugin This would allow usage from other places, like the CMakeProjectManager plugin. Change-Id: Idf12b6688c9ac3c71b5614dce37babbeab7f6748 Reviewed-by: Christian Kandeler --- src/plugins/projectexplorer/buildstep.cpp | 2 +- src/plugins/projectexplorer/customparser.cpp | 18 +++++++++--------- src/plugins/projectexplorer/customparser.h | 5 +++-- src/plugins/projectexplorer/runcontrol.cpp | 2 +- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/plugins/projectexplorer/buildstep.cpp b/src/plugins/projectexplorer/buildstep.cpp index d575d9b7cc5..5d63e61b8ae 100644 --- a/src/plugins/projectexplorer/buildstep.cpp +++ b/src/plugins/projectexplorer/buildstep.cpp @@ -212,7 +212,7 @@ void BuildStep::setupOutputFormatter(OutputFormatter *formatter) { if (auto bc = qobject_cast(projectConfiguration())) { for (const Id id : bc->customParsers()) { - if (Internal::CustomParser * const parser = Internal::CustomParser::createFromId(id)) + if (auto parser = createCustomParserFromId(id)) formatter->addLineParser(parser); } diff --git a/src/plugins/projectexplorer/customparser.cpp b/src/plugins/projectexplorer/customparser.cpp index e1dc3c7577a..70859f278d2 100644 --- a/src/plugins/projectexplorer/customparser.cpp +++ b/src/plugins/projectexplorer/customparser.cpp @@ -173,6 +173,15 @@ CustomParsersAspect::CustomParsersAspect(Target *target) }); } +OutputTaskParser *createCustomParserFromId(Utils::Id id) +{ + const CustomParserSettings parser = findOrDefault(ProjectExplorerPlugin::customParsers(), + [id](const CustomParserSettings &p) { return p.id == id; }); + if (parser.id.isValid()) + return new Internal::CustomParser(parser); + return nullptr; +} + void CustomParsersAspect::fromMap(const Store &map) { m_parsers = transform(map.value(settingsKey()).toList(), &Id::fromSetting); @@ -198,15 +207,6 @@ void CustomParser::setSettings(const CustomParserSettings &settings) m_warning = settings.warning; } -CustomParser *CustomParser::createFromId(Utils::Id id) -{ - const CustomParserSettings parser = findOrDefault(ProjectExplorerPlugin::customParsers(), - [id](const CustomParserSettings &p) { return p.id == id; }); - if (parser.id.isValid()) - return new CustomParser(parser); - return nullptr; -} - OutputLineParser::Result CustomParser::handleLine(const QString &line, OutputFormat type) { const CustomParserExpression::CustomParserChannel channel = type == StdErrFormat diff --git a/src/plugins/projectexplorer/customparser.h b/src/plugins/projectexplorer/customparser.h index 2416a6bed1f..383bf84eb71 100644 --- a/src/plugins/projectexplorer/customparser.h +++ b/src/plugins/projectexplorer/customparser.h @@ -80,6 +80,7 @@ public: void setParsers(const QList &parsers) { m_parsers = parsers; } QList parsers() const { return m_parsers; } + struct Data : BaseAspect::Data { QList parsers; @@ -92,6 +93,8 @@ private: QList m_parsers; }; +PROJECTEXPLORER_EXPORT ProjectExplorer::OutputTaskParser *createCustomParserFromId(Utils::Id id); + namespace Internal { class CustomParser : public ProjectExplorer::OutputTaskParser @@ -101,8 +104,6 @@ public: void setSettings(const CustomParserSettings &settings); - static CustomParser *createFromId(Utils::Id id); - private: Result handleLine(const QString &line, Utils::OutputFormat type) override; diff --git a/src/plugins/projectexplorer/runcontrol.cpp b/src/plugins/projectexplorer/runcontrol.cpp index a08e260b252..43d35291599 100644 --- a/src/plugins/projectexplorer/runcontrol.cpp +++ b/src/plugins/projectexplorer/runcontrol.cpp @@ -822,7 +822,7 @@ void RunControl::setupFormatter(OutputFormatter *formatter) const QList parsers = OutputFormatterFactory::createFormatters(target()); if (const auto customParsersAspect = aspect()) { for (const Id id : std::as_const(customParsersAspect->parsers)) { - if (CustomParser * const parser = CustomParser::createFromId(id)) + if (auto parser = createCustomParserFromId(id)) parsers << parser; } }