diff --git a/src/plugins/qtsupport/qscxmlcgenerator.cpp b/src/plugins/qtsupport/qscxmlcgenerator.cpp index 7d2d58a6f043a78223dd61a7b51cc82373474040..69bc88957ff853b025f6a232bc697b4fc8d61ba8 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 88a7c63b26529b0e6b33f83299d0e6cac180d6e4..f5a4c9227749243d06b46003fd758472e99d95ef 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