diff --git a/src/plugins/projectexplorer/extracompiler.cpp b/src/plugins/projectexplorer/extracompiler.cpp index 0d34aece7e5..fee682c2e7d 100644 --- a/src/plugins/projectexplorer/extracompiler.cpp +++ b/src/plugins/projectexplorer/extracompiler.cpp @@ -30,12 +30,17 @@ #include "buildconfiguration.h" #include "kitinformation.h" +#include +#include +#include +#include #include #include #include #include #include +#include namespace ProjectExplorer { @@ -48,6 +53,7 @@ public: Utils::FileName source; Utils::FileNameList targets; QVector contents; + QList issues; QDateTime compileTime; Core::IEditor *lastEditor = 0; QMetaObject::Connection activeBuildConfigConnection; @@ -55,6 +61,7 @@ public: bool dirty = false; QTimer timer; + void updateIssues(); }; ExtraCompiler::ExtraCompiler(const Project *project, const Utils::FileName &source, @@ -207,6 +214,7 @@ void ExtraCompiler::onEditorChanged(Core::IEditor *editor) if (editor && editor->document()->filePath() == d->source) { d->lastEditor = editor; + d->updateIssues(); // Handle new editor connect(d->lastEditor->document(), &Core::IDocument::contentsChanged, @@ -291,6 +299,41 @@ Utils::Environment ExtraCompiler::buildEnvironment() const return Utils::Environment::systemEnvironment(); } +void ExtraCompiler::setCompileIssues(const QList &issues) +{ + d->issues = issues; + d->updateIssues(); +} + +void ExtraCompilerPrivate::updateIssues() +{ + if (!lastEditor) + return; + + TextEditor::TextEditorWidget *widget = + qobject_cast(lastEditor->widget()); + if (!widget) + return; + + QList selections; + const QTextDocument *document = widget->document(); + foreach (const Task &issue, issues) { + QTextEdit::ExtraSelection selection; + QTextCursor cursor(document->findBlockByNumber(issue.line - 1)); + cursor.movePosition(QTextCursor::StartOfLine); + cursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); + selection.cursor = cursor; + + const auto fontSettings = TextEditor::TextEditorSettings::instance()->fontSettings(); + selection.format = fontSettings.toTextCharFormat(issue.type == Task::Warning ? + TextEditor::C_WARNING : TextEditor::C_ERROR); + selection.format.setToolTip(issue.description); + selections.append(selection); + } + + widget->setExtraSelections(TextEditor::TextEditorWidget::CodeWarningsSelection, selections); +} + void ExtraCompiler::setContent(const Utils::FileName &file, const QString &contents) { for (int i = 0; i < d->targets.length(); ++i) { diff --git a/src/plugins/projectexplorer/extracompiler.h b/src/plugins/projectexplorer/extracompiler.h index 94c313e2252..bd248eabd89 100644 --- a/src/plugins/projectexplorer/extracompiler.h +++ b/src/plugins/projectexplorer/extracompiler.h @@ -27,6 +27,7 @@ #include "projectnodes.h" #include "project.h" +#include "task.h" #include #include @@ -62,6 +63,7 @@ signals: protected: Utils::Environment buildEnvironment() const; + void setCompileIssues(const QList &issues); private: void onTargetsBuilt(Project *project);