diff options
Diffstat (limited to 'src')
9 files changed, 49 insertions, 13 deletions
diff --git a/src/plugins/clangcodemodel/clangdiagnosticmanager.cpp b/src/plugins/clangcodemodel/clangdiagnosticmanager.cpp index f8afaf6565..f5fe4d6368 100644 --- a/src/plugins/clangcodemodel/clangdiagnosticmanager.cpp +++ b/src/plugins/clangcodemodel/clangdiagnosticmanager.cpp @@ -41,6 +41,7 @@ #include <utils/fileutils.h> #include <utils/proxyaction.h> #include <utils/qtcassert.h> +#include <utils/theme/theme.h> #include <QFileInfo> #include <QTextBlock> @@ -347,6 +348,19 @@ ClangDiagnosticManager::diagnosticsAt(uint line, uint column) const return diagnostics; } +void ClangDiagnosticManager::invalidateDiagnostics() +{ + if (m_diagnosticsInvalidated) + return; + + m_diagnosticsInvalidated = true; + for (ClangTextMark *textMark : m_clangTextMarks) { + textMark->setColor(::Utils::Theme::Color::IconsDisabledColor); + textMark->updateIcon(/*valid=*/ false); + textMark->updateMarker(); + } +} + void ClangDiagnosticManager::clearDiagnosticsWithFixIts() { m_fixItdiagnostics.clear(); @@ -364,6 +378,7 @@ void ClangDiagnosticManager::generateEditorSelections() void ClangDiagnosticManager::processNewDiagnostics( const QVector<ClangBackEnd::DiagnosticContainer> &allDiagnostics) { + m_diagnosticsInvalidated = false; filterDiagnostics(allDiagnostics); generateTextMarks(); diff --git a/src/plugins/clangcodemodel/clangdiagnosticmanager.h b/src/plugins/clangcodemodel/clangdiagnosticmanager.h index 1da92c8605..e22cd933d5 100644 --- a/src/plugins/clangcodemodel/clangdiagnosticmanager.h +++ b/src/plugins/clangcodemodel/clangdiagnosticmanager.h @@ -58,6 +58,7 @@ public: bool hasDiagnosticsAt(uint line, uint column) const; QVector<ClangBackEnd::DiagnosticContainer> diagnosticsAt(uint line, uint column) const; + void invalidateDiagnostics(); void clearDiagnosticsWithFixIts(); private: @@ -80,6 +81,7 @@ private: QList<QTextEdit::ExtraSelection> m_extraSelections; TextEditor::RefactorMarkers m_fixItAvailableMarkers; std::vector<ClangTextMark *> m_clangTextMarks; + bool m_diagnosticsInvalidated = false; }; } // namespace Internal diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index 800d4baf0e..848de72ebc 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -281,6 +281,11 @@ void ClangEditorDocumentProcessor::editorDocumentTimerRestarted() m_updateTranslationUnitTimer.stop(); // Wait for the next call to run(). } +void ClangEditorDocumentProcessor::invalidateDiagnostics() +{ + m_diagnosticManager.invalidateDiagnostics(); +} + void ClangEditorDocumentProcessor::setParserConfig( const CppTools::BaseEditorDocumentParser::Configuration config) { diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h index cdee5b7d86..da6872fa3d 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h @@ -77,6 +77,7 @@ public: TextEditor::QuickFixOperations extraRefactoringOperations(const TextEditor::AssistInterface &assistInterface) override; + void invalidateDiagnostics() override; bool hasDiagnosticsAt(uint line, uint column) const override; void addDiagnosticToolTipToLayout(uint line, uint column, QLayout *target) const override; diff --git a/src/plugins/clangcodemodel/clangtextmark.cpp b/src/plugins/clangcodemodel/clangtextmark.cpp index 1e53bce06e..b8d69a722e 100644 --- a/src/plugins/clangcodemodel/clangtextmark.cpp +++ b/src/plugins/clangcodemodel/clangtextmark.cpp @@ -78,23 +78,29 @@ ClangTextMark::ClangTextMark(const QString &fileName, : QApplication::translate("Clang Code Model Marks", "Code Model Error")); setPriority(warning ? TextEditor::TextMark::NormalPriority : TextEditor::TextMark::HighPriority); - setIcon(diagnostic.severity()); + updateIcon(); setLineAnnotation(diagnostic.text().toString()); } -void ClangTextMark::setIcon(ClangBackEnd::DiagnosticSeverity severity) +void ClangTextMark::updateIcon(bool valid) { - static const QIcon errorIcon = Utils::Icon({ - {QLatin1String(":/clangcodemodel/images/error.png"), Utils::Theme::IconsErrorColor} - }, Utils::Icon::Tint).icon(); - static const QIcon warningIcon = Utils::Icon({ - {QLatin1String(":/clangcodemodel/images/warning.png"), Utils::Theme::IconsWarningColor} - }, Utils::Icon::Tint).icon(); - - if (isWarningOrNote(severity)) - TextMark::setIcon(warningIcon); + static const QIcon errorIcon = Utils::Icon( + {{":/clangcodemodel/images/error.png", Utils::Theme::IconsErrorColor}}, + Utils::Icon::Tint).icon(); + static const QIcon warningIcon = Utils::Icon( + {{":/clangcodemodel/images/warning.png", Utils::Theme::IconsWarningColor}}, + Utils::Icon::Tint).icon(); + static const QIcon invalidErrorIcon = Utils::Icon( + {{":/clangcodemodel/images/error.png", Utils::Theme::IconsDisabledColor}}, + Utils::Icon::Tint).icon(); + static const QIcon invalidWarningIcon = Utils::Icon( + {{":/clangcodemodel/images/warning.png", Utils::Theme::IconsDisabledColor}}, + Utils::Icon::Tint).icon(); + + if (isWarningOrNote(m_diagnostic.severity())) + setIcon(valid ? warningIcon : invalidWarningIcon); else - TextMark::setIcon(errorIcon); + setIcon(valid ? errorIcon : invalidErrorIcon); } bool ClangTextMark::addToolTipContent(QLayout *target) const diff --git a/src/plugins/clangcodemodel/clangtextmark.h b/src/plugins/clangcodemodel/clangtextmark.h index f1a1b9078b..0342fd1a62 100644 --- a/src/plugins/clangcodemodel/clangtextmark.h +++ b/src/plugins/clangcodemodel/clangtextmark.h @@ -43,8 +43,8 @@ public: const ClangBackEnd::DiagnosticContainer &diagnostic, const RemovedFromEditorHandler &removedHandler); + void updateIcon(bool valid = true); private: - void setIcon(ClangBackEnd::DiagnosticSeverity severity); bool addToolTipContent(QLayout *target) const override; void removedFromEditor() override; diff --git a/src/plugins/cppeditor/cppeditordocument.cpp b/src/plugins/cppeditor/cppeditordocument.cpp index 502359a7b5..c5a9d40e2e 100644 --- a/src/plugins/cppeditor/cppeditordocument.cpp +++ b/src/plugins/cppeditor/cppeditordocument.cpp @@ -257,6 +257,8 @@ void CppEditorDocument::scheduleProcessDocument() void CppEditorDocument::processDocument() { + processor()->invalidateDiagnostics(); + if (processor()->isParserRunning() || m_processorRevision != contentsRevision()) { m_processorTimer.start(); processor()->editorDocumentTimerRestarted(); diff --git a/src/plugins/cpptools/baseeditordocumentprocessor.cpp b/src/plugins/cpptools/baseeditordocumentprocessor.cpp index 2bf77787d7..5bffb51a38 100644 --- a/src/plugins/cpptools/baseeditordocumentprocessor.cpp +++ b/src/plugins/cpptools/baseeditordocumentprocessor.cpp @@ -87,6 +87,10 @@ void BaseEditorDocumentProcessor::editorDocumentTimerRestarted() { } +void BaseEditorDocumentProcessor::invalidateDiagnostics() +{ +} + void BaseEditorDocumentProcessor::setParserConfig( const BaseEditorDocumentParser::Configuration config) { diff --git a/src/plugins/cpptools/baseeditordocumentprocessor.h b/src/plugins/cpptools/baseeditordocumentprocessor.h index 48f1f570cc..3c9d864aeb 100644 --- a/src/plugins/cpptools/baseeditordocumentprocessor.h +++ b/src/plugins/cpptools/baseeditordocumentprocessor.h @@ -66,6 +66,7 @@ public: virtual TextEditor::QuickFixOperations extraRefactoringOperations(const TextEditor::AssistInterface &assistInterface); + virtual void invalidateDiagnostics(); virtual bool hasDiagnosticsAt(uint line, uint column) const; virtual void addDiagnosticToolTipToLayout(uint line, uint column, QLayout *layout) const; |