diff options
author | Marcus Tillmanns <marcus.tillmanns@qt.io> | 2022-06-21 10:06:47 +0200 |
---|---|---|
committer | Marcus Tillmanns <marcus.tillmanns@qt.io> | 2022-06-21 13:33:19 +0000 |
commit | 627f6a2916f1a53cc2d5a775818b0d610d1dd9c0 (patch) | |
tree | a74dac7912d6e65c87ec42545c287106bdbc35ff /src/plugins/cppeditor/cppeditordocument.cpp | |
parent | bbbae099a741ed1eaf305cae72452d1ae2ca0c4e (diff) |
cppeditor: Show hints for qmlRegister... diagnostics
This fixes passing the hints from FindExportedCppTypes to
the actual cppeditor so they can be displayed to the
user.
Fixes: QTCREATORBUG-27243
Change-Id: Ibcb68296f044a9c6a96f40945d8a0e964be7f042
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/cppeditor/cppeditordocument.cpp')
-rw-r--r-- | src/plugins/cppeditor/cppeditordocument.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/plugins/cppeditor/cppeditordocument.cpp b/src/plugins/cppeditor/cppeditordocument.cpp index e7621e823e..80a8cce0bd 100644 --- a/src/plugins/cppeditor/cppeditordocument.cpp +++ b/src/plugins/cppeditor/cppeditordocument.cpp @@ -50,7 +50,9 @@ #include <utils/minimizableinfobars.h> #include <utils/qtcassert.h> #include <utils/runextensions.h> +#include <utils/utilsicons.h> +#include <QApplication> #include <QTextDocument> const char NO_PROJECT_CONFIGURATION[] = "NoProject"; @@ -121,6 +123,9 @@ CppEditorDocument::CppEditorDocument() connect(this, &IDocument::filePathChanged, this, &CppEditorDocument::onFilePathChanged); + connect(mm(), &CppModelManager::diagnosticsChanged, + this, &CppEditorDocument::onDiagnosticsChanged); + connect(&m_parseContextModel, &ParseContextModel::preferredParseContextChanged, this, &CppEditorDocument::reparseWithPreferredParseContext); @@ -483,5 +488,51 @@ bool CppEditorDocument::save(QString *errorString, const FilePath &filePath, boo return TextEditor::TextDocument::save(errorString, filePath, autoSave); } +void CppEditorDocument::onDiagnosticsChanged(const QString &fileName, const QString &kind) +{ + if (FilePath::fromString(fileName) != filePath()) + return; + + TextMarks removedMarks = marks(); + + const Utils::Id category = Utils::Id::fromString(kind); + + for (const auto &diagnostic : mm()->diagnosticMessages()) { + if (FilePath::fromString(diagnostic.fileName()) == filePath()) { + auto it = std::find_if(std::begin(removedMarks), + std::end(removedMarks), + [&category, &diagnostic](TextMark *existing) { + return (diagnostic.line() == existing->lineNumber() + && diagnostic.text() == existing->lineAnnotation() + && category == existing->category()); + }); + + if (it != std::end(removedMarks)) { + removedMarks.erase(it); + continue; + } + + auto mark = new TextMark(filePath(), diagnostic.line(), category); + mark->setLineAnnotation(diagnostic.text()); + mark->setToolTip(diagnostic.text()); + + mark->setIcon(diagnostic.isWarning() ? Utils::Icons::CODEMODEL_WARNING.icon() + : Utils::Icons::CODEMODEL_ERROR.icon()); + mark->setColor(diagnostic.isWarning() ? Utils::Theme::CodeModel_Warning_TextMarkColor + : Utils::Theme::CodeModel_Error_TextMarkColor); + mark->setPriority(diagnostic.isWarning() ? TextEditor::TextMark::NormalPriority + : TextEditor::TextMark::HighPriority); + addMark(mark); + } + } + + for (auto it = removedMarks.begin(); it != removedMarks.end(); ++it) { + if ((*it)->category() == category) { + removeMark(*it); + delete *it; + } + } +} + } // namespace Internal } // namespace CppEditor |