aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2024-02-01 11:04:31 +0100
committerhjk <hjk@qt.io>2024-02-01 13:23:35 +0000
commit62aa35ee391ed95b3c0eb857f74d07cbcb0d8f20 (patch)
treeda195176961deb52add5ec34912b507790112d82 /src/plugins
parent84992405440183a401a92f27d3ac3dd73322e8e1 (diff)
ProjectExplorer: Remove OutputFormatterFactory hierarchy
It never gained traction, was only used in thee places, and the class(-hierarchy) is not really needed and only complicates the code when the formatter creation is handled in free functions. Also adapt the users. Change-Id: Ieef7199f5a36f244b2f38cffef71a5fe0606065c Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/projectexplorer/buildstep.cpp2
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp8
-rw-r--r--src/plugins/projectexplorer/runcontrol.cpp28
-rw-r--r--src/plugins/projectexplorer/runcontrol.h18
-rw-r--r--src/plugins/projectexplorer/sanitizerparser.cpp52
-rw-r--r--src/plugins/projectexplorer/sanitizerparser.h34
-rw-r--r--src/plugins/python/pythonplugin.cpp3
-rw-r--r--src/plugins/python/pythonrunconfiguration.cpp8
-rw-r--r--src/plugins/python/pythonrunconfiguration.h6
-rw-r--r--src/plugins/qtsupport/qtoutputformatter.cpp26
10 files changed, 80 insertions, 105 deletions
diff --git a/src/plugins/projectexplorer/buildstep.cpp b/src/plugins/projectexplorer/buildstep.cpp
index da0dcec7edf..70c58eedeec 100644
--- a/src/plugins/projectexplorer/buildstep.cpp
+++ b/src/plugins/projectexplorer/buildstep.cpp
@@ -216,7 +216,7 @@ void BuildStep::setupOutputFormatter(OutputFormatter *formatter)
formatter->addLineParser(parser);
}
- formatter->addLineParser(new Internal::SanitizerParser);
+ formatter->addLineParser(Internal::createSanitizerOutputParser());
formatter->setForwardStdOutToStdError(buildConfiguration()->parseStdOut());
}
FileInProjectFinder fileFinder;
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index e2aa4458322..3b17379e1fa 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -723,7 +723,6 @@ public:
}};
DeviceCheckBuildStepFactory deviceCheckBuildStepFactory;
- SanitizerOutputFormatterFactory sanitizerFormatterFactory;
};
static ProjectExplorerPlugin *m_instance = nullptr;
@@ -825,6 +824,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
dd = new ProjectExplorerPluginPrivate;
+ setupSanitizerOutputParser();
+
setupJsonWizardPages();
setupJsonWizardFileGenerator();
setupJsonWizardScannerGenerator();
@@ -1953,8 +1954,9 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
DeviceManager::instance()->addDevice(IDevice::Ptr(new DesktopDevice));
- if (auto sanitizerTester = SanitizerParser::testCreator())
- addTestCreator(sanitizerTester.value());
+#ifdef WITH_TESTS
+ addTestCreator(&createSanitizerOutputParserTest);
+#endif
return true;
}
diff --git a/src/plugins/projectexplorer/runcontrol.cpp b/src/plugins/projectexplorer/runcontrol.cpp
index 56d535e5145..8f3047b12b9 100644
--- a/src/plugins/projectexplorer/runcontrol.cpp
+++ b/src/plugins/projectexplorer/runcontrol.cpp
@@ -843,7 +843,7 @@ void RunControlPrivate::showError(const QString &msg)
void RunControl::setupFormatter(OutputFormatter *formatter) const
{
- QList<Utils::OutputLineParser *> parsers = OutputFormatterFactory::createFormatters(target());
+ QList<Utils::OutputLineParser *> parsers = createOutputParsers(target());
if (const auto customParsersAspect = aspect<CustomParsersAspect>()) {
for (const Id id : std::as_const(customParsersAspect->parsers)) {
if (auto parser = createCustomParserFromId(id))
@@ -1836,31 +1836,23 @@ void RunWorker::stop()
reportStopped();
}
-// OutputFormatterFactory
+// Output parser factories
-static QList<OutputFormatterFactory *> g_outputFormatterFactories;
+static QList<std::function<OutputLineParser *(Target *)>> g_outputParserFactories;
-OutputFormatterFactory::OutputFormatterFactory()
-{
- g_outputFormatterFactories.append(this);
-}
-
-OutputFormatterFactory::~OutputFormatterFactory()
-{
- g_outputFormatterFactories.removeOne(this);
-}
-
-QList<OutputLineParser *> OutputFormatterFactory::createFormatters(Target *target)
+QList<OutputLineParser *> createOutputParsers(Target *target)
{
QList<OutputLineParser *> formatters;
- for (auto factory : std::as_const(g_outputFormatterFactories))
- formatters << factory->m_creator(target);
+ for (auto factory : std::as_const(g_outputParserFactories)) {
+ if (OutputLineParser *parser = factory(target))
+ formatters << parser;
+ }
return formatters;
}
-void OutputFormatterFactory::setFormatterCreator(const FormatterCreator &creator)
+void addOutputParserFactory(const std::function<Utils::OutputLineParser *(Target *)> &factory)
{
- m_creator = creator;
+ g_outputParserFactories.append(factory);
}
// SimpleTargetRunnerFactory
diff --git a/src/plugins/projectexplorer/runcontrol.h b/src/plugins/projectexplorer/runcontrol.h
index 0700946f9a9..d394e1ce030 100644
--- a/src/plugins/projectexplorer/runcontrol.h
+++ b/src/plugins/projectexplorer/runcontrol.h
@@ -289,22 +289,10 @@ public:
explicit SimpleTargetRunnerFactory(const QList<Utils::Id> &runConfig);
};
-class PROJECTEXPLORER_EXPORT OutputFormatterFactory
-{
-protected:
- OutputFormatterFactory();
-
-public:
- virtual ~OutputFormatterFactory();
- static QList<Utils::OutputLineParser *> createFormatters(Target *target);
+PROJECTEXPLORER_EXPORT
+void addOutputParserFactory(const std::function<Utils::OutputLineParser *(Target *)> &);
-protected:
- using FormatterCreator = std::function<QList<Utils::OutputLineParser *>(Target *)>;
- void setFormatterCreator(const FormatterCreator &creator);
-
-private:
- FormatterCreator m_creator;
-};
+PROJECTEXPLORER_EXPORT QList<Utils::OutputLineParser *> createOutputParsers(Target *target);
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/sanitizerparser.cpp b/src/plugins/projectexplorer/sanitizerparser.cpp
index 63adbb80615..8da13d5d37b 100644
--- a/src/plugins/projectexplorer/sanitizerparser.cpp
+++ b/src/plugins/projectexplorer/sanitizerparser.cpp
@@ -3,7 +3,10 @@
#include "sanitizerparser.h"
+#include "ioutputparser.h"
#include "projectexplorerconstants.h"
+#include "runcontrol.h"
+#include "task.h"
#include <QRegularExpression>
@@ -19,6 +22,20 @@ using namespace Utils;
namespace ProjectExplorer::Internal {
+class SanitizerParser final : public OutputTaskParser
+{
+private:
+ Result handleLine(const QString &line, OutputFormat format) final;
+ void flush() final;
+
+ Result handleContinuation(const QString &line);
+ void addLinkSpecs(const LinkSpecs &linkSpecs);
+
+ Task m_task;
+ LinkSpecs m_linkSpecs;
+ quint64 m_id = 0;
+};
+
OutputLineParser::Result SanitizerParser::handleLine(const QString &line, OutputFormat format)
{
if (format != OutputFormat::StdErrFormat)
@@ -125,7 +142,22 @@ void SanitizerParser::flush()
m_id = 0;
}
+OutputLineParser *createSanitizerOutputParser()
+{
+ return new SanitizerParser;
+}
+
+void setupSanitizerOutputParser()
+{
+ addOutputParserFactory([](Target *) { return new SanitizerParser; });
+}
+
+} // namespace ProjectExplorer::Internal
+
#ifdef WITH_TESTS
+
+namespace ProjectExplorer::Internal {
+
class SanitizerParserTest : public QObject
{
Q_OBJECT
@@ -214,24 +246,14 @@ SUMMARY: AddressSanitizer: 19 byte(s) leaked in 1 allocation(s).)";
testbench.testParsing(input, OutputParserTester::STDERR, tasks, {}, childStdErrLines, {});
}
};
-#endif
-std::optional<std::function<QObject *()>> SanitizerParser::testCreator()
+QObject *createSanitizerOutputParserTest()
{
-#ifdef WITH_TESTS
- return []() -> QObject * { return new SanitizerParserTest; };
-#else
- return {};
-#endif
+ return new SanitizerParserTest;
}
-SanitizerOutputFormatterFactory::SanitizerOutputFormatterFactory()
-{
- setFormatterCreator([](Target *) -> QList<OutputLineParser *> {return {new SanitizerParser}; });
-}
-
-} // namespace ProjectExplorer::Internal
+} // ProjectExplorer::Internal
-#ifdef WITH_TESTS
#include <sanitizerparser.moc>
-#endif
+
+#endif // WITH_TESTS
diff --git a/src/plugins/projectexplorer/sanitizerparser.h b/src/plugins/projectexplorer/sanitizerparser.h
index 1be0302baad..b52c5fd091c 100644
--- a/src/plugins/projectexplorer/sanitizerparser.h
+++ b/src/plugins/projectexplorer/sanitizerparser.h
@@ -3,37 +3,17 @@
#pragma once
-#include "ioutputparser.h"
-#include "runcontrol.h"
-#include "task.h"
-
-#include <QObject>
-#include <QVector>
+#include <utils/outputformatter.h>
namespace ProjectExplorer::Internal {
-class SanitizerParser : public OutputTaskParser
-{
-public:
- static std::optional<std::function<QObject *()>> testCreator();
-
-private:
- Result handleLine(const QString &line, Utils::OutputFormat format) override;
- void flush() override;
-
- Result handleContinuation(const QString &line);
- void addLinkSpecs(const LinkSpecs &linkSpecs);
+Utils::OutputLineParser *createSanitizerOutputParser();
- Task m_task;
- LinkSpecs m_linkSpecs;
- quint64 m_id = 0;
-};
+void setupSanitizerOutputParser();
-class SanitizerOutputFormatterFactory : public ProjectExplorer::OutputFormatterFactory
-{
-public:
- SanitizerOutputFormatterFactory();
-};
+#ifdef WITH_TESTS
+QObject *createSanitizerOutputParserTest();
+#endif
-} // namespace ProjectExplorer::Internal
+} // ProjectExplorer::Internal
diff --git a/src/plugins/python/pythonplugin.cpp b/src/plugins/python/pythonplugin.cpp
index ed0c14c7b19..99334992e49 100644
--- a/src/plugins/python/pythonplugin.cpp
+++ b/src/plugins/python/pythonplugin.cpp
@@ -43,7 +43,6 @@ QObject *pluginInstance()
class PythonPluginPrivate
{
public:
- PythonOutputFormatterFactory outputFormatterFactory;
PythonRunConfigurationFactory runConfigFactory;
PySideBuildStepFactory buildStepFactory;
PythonBuildConfigurationFactory buildConfigFactory;
@@ -77,6 +76,8 @@ private:
setupPythonEditorFactory(this);
+ setupPythonOutputParser();
+
KitManager::setIrrelevantAspects(KitManager::irrelevantAspects()
+ QSet<Id>{PythonKitAspect::id()});
diff --git a/src/plugins/python/pythonrunconfiguration.cpp b/src/plugins/python/pythonrunconfiguration.cpp
index be7ceb0a5da..3c8c600b0aa 100644
--- a/src/plugins/python/pythonrunconfiguration.cpp
+++ b/src/plugins/python/pythonrunconfiguration.cpp
@@ -189,12 +189,12 @@ PythonRunConfigurationFactory::PythonRunConfigurationFactory()
addSupportedProjectType(PythonProjectId);
}
-PythonOutputFormatterFactory::PythonOutputFormatterFactory()
+void setupPythonOutputParser()
{
- setFormatterCreator([](Target *t) -> QList<OutputLineParser *> {
+ addOutputParserFactory([](Target *t) -> OutputLineParser * {
if (t && t->project()->mimeType() == Constants::C_PY_PROJECT_MIME_TYPE)
- return {new PythonOutputLineParser};
- return {};
+ return new PythonOutputLineParser;
+ return nullptr;
});
}
diff --git a/src/plugins/python/pythonrunconfiguration.h b/src/plugins/python/pythonrunconfiguration.h
index 4a2406f4f0b..db5fe71cc03 100644
--- a/src/plugins/python/pythonrunconfiguration.h
+++ b/src/plugins/python/pythonrunconfiguration.h
@@ -17,10 +17,6 @@ public:
PythonRunConfigurationFactory();
};
-class PythonOutputFormatterFactory : public ProjectExplorer::OutputFormatterFactory
-{
-public:
- PythonOutputFormatterFactory();
-};
+void setupPythonOutputParser();
} // Python::Internal
diff --git a/src/plugins/qtsupport/qtoutputformatter.cpp b/src/plugins/qtsupport/qtoutputformatter.cpp
index d1dcc59db43..13b6d543131 100644
--- a/src/plugins/qtsupport/qtoutputformatter.cpp
+++ b/src/plugins/qtsupport/qtoutputformatter.cpp
@@ -218,24 +218,18 @@ void QtOutputLineParser::updateProjectFileList()
d->projectFinder.setProjectFiles(d->project->files(Project::SourceFiles));
}
-// QtOutputFormatterFactory
-
-class QtOutputFormatterFactory final : public OutputFormatterFactory
-{
-public:
- QtOutputFormatterFactory()
- {
- setFormatterCreator([](Target *t) -> QList<OutputLineParser *> {
- if (QtKitAspect::qtVersion(t ? t->kit() : nullptr))
- return {new QtTestParser, new QtOutputLineParser(t)};
- return {};
- });
- }
-};
-
void setupQtOutputFormatter()
{
- static QtOutputFormatterFactory theQtOutputFormatterFactory;
+ addOutputParserFactory([](Target *t) -> OutputLineParser * {
+ if (QtKitAspect::qtVersion(t ? t->kit() : nullptr))
+ return new QtTestParser;
+ return nullptr;
+ });
+ addOutputParserFactory([](Target *t) -> OutputLineParser * {
+ if (QtKitAspect::qtVersion(t ? t->kit() : nullptr))
+ return new QtOutputLineParser(t);
+ return nullptr;
+ });
}
} // QtSupport::Internal