aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cppeditor/cppeditordocument.cpp
diff options
context:
space:
mode:
authorMarcus Tillmanns <marcus.tillmanns@qt.io>2022-06-21 10:06:47 +0200
committerMarcus Tillmanns <marcus.tillmanns@qt.io>2022-06-21 13:33:19 +0000
commit627f6a2916f1a53cc2d5a775818b0d610d1dd9c0 (patch)
treea74dac7912d6e65c87ec42545c287106bdbc35ff /src/plugins/cppeditor/cppeditordocument.cpp
parentbbbae099a741ed1eaf305cae72452d1ae2ca0c4e (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.cpp51
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