aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libs/utils/outputformatter.cpp3
-rw-r--r--src/libs/utils/outputformatter.h2
-rw-r--r--src/plugins/coreplugin/outputwindow.cpp4
-rw-r--r--src/plugins/projectexplorer/appoutputpane.cpp4
-rw-r--r--src/plugins/projectexplorer/runcontrol.cpp9
-rw-r--r--src/plugins/projectexplorer/runcontrol.h2
-rw-r--r--src/plugins/qtsupport/qtoutputformatter.cpp11
-rw-r--r--src/plugins/vcsbase/vcsoutputwindow.cpp7
8 files changed, 15 insertions, 27 deletions
diff --git a/src/libs/utils/outputformatter.cpp b/src/libs/utils/outputformatter.cpp
index dbc7e0a677..dd243bb9bc 100644
--- a/src/libs/utils/outputformatter.cpp
+++ b/src/libs/utils/outputformatter.cpp
@@ -67,6 +67,7 @@ OutputFormatter::OutputFormatter()
OutputFormatter::~OutputFormatter()
{
+ qDeleteAll(d->lineParsers);
delete d;
}
@@ -85,6 +86,8 @@ void OutputFormatter::setPlainTextEdit(QPlainTextEdit *plainText)
void OutputFormatter::setLineParsers(const QList<OutputLineParser *> &parsers)
{
+ flush();
+ qDeleteAll(d->lineParsers);
d->lineParsers = parsers;
d->nextParser = nullptr;
}
diff --git a/src/libs/utils/outputformatter.h b/src/libs/utils/outputformatter.h
index cdb757786e..edee0ef0b6 100644
--- a/src/libs/utils/outputformatter.h
+++ b/src/libs/utils/outputformatter.h
@@ -86,7 +86,7 @@ public:
QPlainTextEdit *plainTextEdit() const;
void setPlainTextEdit(QPlainTextEdit *plainText);
- void setLineParsers(const QList<OutputLineParser *> &parsers);
+ void setLineParsers(const QList<OutputLineParser *> &parsers); // Takes ownership
void appendMessage(const QString &text, OutputFormat format);
void flush();
diff --git a/src/plugins/coreplugin/outputwindow.cpp b/src/plugins/coreplugin/outputwindow.cpp
index 089a37ea93..1128dad377 100644
--- a/src/plugins/coreplugin/outputwindow.cpp
+++ b/src/plugins/coreplugin/outputwindow.cpp
@@ -566,12 +566,10 @@ void Internal::CorePlugin::testOutputFormatter()
" A trick\n"
" embedded carriage return\n"
"handled by B\n";
- TestFormatterA formatterA;
- TestFormatterB formatterB;
OutputFormatter formatter;
QPlainTextEdit textEdit;
formatter.setPlainTextEdit(&textEdit);
- formatter.setLineParsers({&formatterB, &formatterA});
+ formatter.setLineParsers({new TestFormatterB, new TestFormatterA});
// Stress-test the implementation by providing the input in chunks, splitting at all possible
// offsets.
diff --git a/src/plugins/projectexplorer/appoutputpane.cpp b/src/plugins/projectexplorer/appoutputpane.cpp
index d16f6fb702..83877266d0 100644
--- a/src/plugins/projectexplorer/appoutputpane.cpp
+++ b/src/plugins/projectexplorer/appoutputpane.cpp
@@ -154,7 +154,7 @@ AppOutputPane::RunControlTab::RunControlTab(RunControl *runControl, Core::Output
runControl(runControl), window(w)
{
if (runControl && w)
- w->setLineParsers(runControl->outputParsers());
+ w->setLineParsers(runControl->createOutputParsers());
}
AppOutputPane::AppOutputPane() :
@@ -404,7 +404,7 @@ void AppOutputPane::createNewOutputWindow(RunControl *rc)
if (tab.runControl)
tab.runControl->initiateFinish();
tab.runControl = rc;
- tab.window->setLineParsers(rc->outputParsers());
+ tab.window->setLineParsers(rc->createOutputParsers());
handleOldOutput(tab.window);
diff --git a/src/plugins/projectexplorer/runcontrol.cpp b/src/plugins/projectexplorer/runcontrol.cpp
index 241dac4021..39ec9a7259 100644
--- a/src/plugins/projectexplorer/runcontrol.cpp
+++ b/src/plugins/projectexplorer/runcontrol.cpp
@@ -288,7 +288,6 @@ public:
q = nullptr;
qDeleteAll(m_workers);
m_workers.clear();
- qDeleteAll(outputParsers);
}
Q_ENUM(RunControlState)
@@ -333,7 +332,6 @@ public:
Kit *kit = nullptr; // Not owned.
QPointer<Target> target; // Not owned.
QPointer<Project> project; // Not owned.
- QList<Utils::OutputLineParser *> outputParsers;
std::function<bool(bool*)> promptToStop;
std::vector<RunWorkerFactory> m_factories;
@@ -384,9 +382,6 @@ void RunControl::setTarget(Target *target)
d->buildEnvironment = bc->environment();
}
- QTC_CHECK(d->outputParsers.isEmpty());
- d->outputParsers = OutputFormatterFactory::createFormatters(target);
-
setKit(target->kit());
d->project = target->project();
}
@@ -828,9 +823,9 @@ void RunControlPrivate::showError(const QString &msg)
q->appendMessage(msg + '\n', ErrorMessageFormat);
}
-QList<Utils::OutputLineParser *> RunControl::outputParsers() const
+QList<Utils::OutputLineParser *> RunControl::createOutputParsers() const
{
- return d->outputParsers;
+ return OutputFormatterFactory::createFormatters(target());
}
Core::Id RunControl::runMode() const
diff --git a/src/plugins/projectexplorer/runcontrol.h b/src/plugins/projectexplorer/runcontrol.h
index f68f6fee35..cd537c3466 100644
--- a/src/plugins/projectexplorer/runcontrol.h
+++ b/src/plugins/projectexplorer/runcontrol.h
@@ -238,7 +238,7 @@ public:
Utils::FilePath targetFilePath() const;
Utils::FilePath projectFilePath() const;
- QList<Utils::OutputLineParser *> outputParsers() const;
+ QList<Utils::OutputLineParser *> createOutputParsers() const;
Core::Id runMode() const;
const Runnable &runnable() const;
diff --git a/src/plugins/qtsupport/qtoutputformatter.cpp b/src/plugins/qtsupport/qtoutputformatter.cpp
index f97851da0e..f7f485bda6 100644
--- a/src/plugins/qtsupport/qtoutputformatter.cpp
+++ b/src/plugins/qtsupport/qtoutputformatter.cpp
@@ -289,18 +289,9 @@ public:
class TestQtOutputFormatter : public OutputFormatter
{
public:
- TestQtOutputFormatter() : m_parser(new TestQtOutputLineParser)
- {
- setLineParsers({m_parser});
- }
-
- ~TestQtOutputFormatter() { delete m_parser; }
-
-private:
- OutputLineParser * const m_parser;
+ TestQtOutputFormatter() { setLineParsers({new TestQtOutputLineParser}); }
};
-
void QtSupportPlugin::testQtOutputFormatter_data()
{
QTest::addColumn<QString>("input");
diff --git a/src/plugins/vcsbase/vcsoutputwindow.cpp b/src/plugins/vcsbase/vcsoutputwindow.cpp
index d2b96e7948..d600143d16 100644
--- a/src/plugins/vcsbase/vcsoutputwindow.cpp
+++ b/src/plugins/vcsbase/vcsoutputwindow.cpp
@@ -112,7 +112,7 @@ private:
Utils::OutputFormat m_format;
Utils::OutputFormatter m_formatter;
- VcsOutputLineParser m_parser;
+ VcsOutputLineParser *m_parser = nullptr;
};
OutputWindowPlainTextEdit::OutputWindowPlainTextEdit(QWidget *parent) :
@@ -122,7 +122,8 @@ OutputWindowPlainTextEdit::OutputWindowPlainTextEdit(QWidget *parent) :
setUndoRedoEnabled(false);
setFrameStyle(QFrame::NoFrame);
m_formatter.setBoldFontEnabled(false);
- setLineParsers({&m_parser});
+ m_parser = new VcsOutputLineParser;
+ setLineParsers({m_parser});
auto agg = new Aggregation::Aggregate;
agg->add(this);
agg->add(new Core::BaseTextFind(this));
@@ -251,7 +252,7 @@ void OutputWindowPlainTextEdit::appendLinesWithStyle(const QString &s,
VcsOutputLineParser *OutputWindowPlainTextEdit::parser()
{
- return &m_parser;
+ return m_parser;
}
void OutputWindowPlainTextEdit::setFormat(VcsOutputWindow::MessageStyle style)