From 90a99bb5126d5499a1df88e18b479664a253d94c Mon Sep 17 00:00:00 2001 From: Ulf Hermann <ulf.hermann@theqtcompany.com> Date: Fri, 22 Jan 2016 12:00:23 +0100 Subject: [PATCH] QtSupport: Parse compile errors from qscxmlc Change-Id: I2dd5051b34bb10be61ee3de8a85a244e7d5dbbe4 Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com> --- src/plugins/qtsupport/qscxmlcgenerator.cpp | 22 ++++++++++++++++++++++ src/plugins/qtsupport/qscxmlcgenerator.h | 1 + 2 files changed, 23 insertions(+) diff --git a/src/plugins/qtsupport/qscxmlcgenerator.cpp b/src/plugins/qtsupport/qscxmlcgenerator.cpp index 7d2d58a6f04..69bc88957ff 100644 --- a/src/plugins/qtsupport/qscxmlcgenerator.cpp +++ b/src/plugins/qtsupport/qscxmlcgenerator.cpp @@ -37,6 +37,7 @@ namespace QtSupport { static QLoggingCategory log("qtc.qsxmlcgenerator"); +static const char TaskCategory[] = "Task.Category.ExtraCompiler.QScxmlc"; QScxmlcGenerator::QScxmlcGenerator(const ProjectExplorer::Project *project, const Utils::FileName &source, @@ -47,8 +48,29 @@ QScxmlcGenerator::QScxmlcGenerator(const ProjectExplorer::Project *project, this, &QScxmlcGenerator::finishProcess); } +void QScxmlcGenerator::parseIssues(const QByteArray &stderr) +{ + QList<ProjectExplorer::Task> issues; + foreach (const QByteArray &line, stderr.split('\n')) { + QByteArrayList tokens = line.split(':'); + + if (tokens.length() > 4) { + Utils::FileName file = Utils::FileName::fromUtf8(tokens[0]); + int line = tokens[1].toInt(); + // int column = tokens[2].toInt(); <- nice, but not needed for now. + ProjectExplorer::Task::TaskType type = tokens[3].trimmed() == "error" ? + ProjectExplorer::Task::Error : ProjectExplorer::Task::Warning; + QString message = QString::fromUtf8(tokens.mid(4).join(':').trimmed()); + issues.append(ProjectExplorer::Task(type, message, file, line, TaskCategory)); + } + } + setCompileIssues(issues); +} + void QScxmlcGenerator::finishProcess() { + parseIssues(m_process.readAllStandardError()); + setCompileTime(QDateTime::currentDateTime()); foreach (const Utils::FileName &target, targets()) { QFile generated(m_tmpdir.path() + QLatin1Char('/') + target.fileName()); diff --git a/src/plugins/qtsupport/qscxmlcgenerator.h b/src/plugins/qtsupport/qscxmlcgenerator.h index 88a7c63b265..f5a4c922774 100644 --- a/src/plugins/qtsupport/qscxmlcgenerator.h +++ b/src/plugins/qtsupport/qscxmlcgenerator.h @@ -46,6 +46,7 @@ private: QProcess m_process; QTemporaryDir m_tmpdir; + void parseIssues(const QByteArray &stderr); }; class QScxmlcGeneratorFactory : public ProjectExplorer::ExtraCompilerFactory -- GitLab