diff options
author | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2016-11-17 15:55:06 +0100 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2016-11-23 11:52:31 +0000 |
commit | 4a08f14cf69c4c009c11b989e91f5b1c5dde6366 (patch) | |
tree | d0ddaeac4d6f2307368fc0c3ab56288d44db0ad8 /src | |
parent | c4d9f6ac3f23041be594c2693baa17281e77fb87 (diff) | |
download | qt-creator-4a08f14cf69c4c009c11b989e91f5b1c5dde6366.tar.gz |
Clang: Fix removing text marks on line deletion
Task-number: QTCREATORBUG-17270
Change-Id: I582015597a65141e420622dcdb50e82f9791b189
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/clangcodemodel/clangdiagnosticmanager.cpp | 7 | ||||
-rw-r--r-- | src/plugins/clangcodemodel/clangtextmark.cpp | 18 | ||||
-rw-r--r-- | src/plugins/clangcodemodel/clangtextmark.h | 14 |
3 files changed, 33 insertions, 6 deletions
diff --git a/src/plugins/clangcodemodel/clangdiagnosticmanager.cpp b/src/plugins/clangcodemodel/clangdiagnosticmanager.cpp index 52c441443d..07f84298f7 100644 --- a/src/plugins/clangcodemodel/clangdiagnosticmanager.cpp +++ b/src/plugins/clangcodemodel/clangdiagnosticmanager.cpp @@ -346,7 +346,12 @@ void ClangDiagnosticManager::addClangTextMarks( const QVector<ClangBackEnd::DiagnosticContainer> &diagnostics) { for (const ClangBackEnd::DiagnosticContainer &diagnostic : diagnostics) { - auto textMark = new ClangTextMark(filePath(), diagnostic); + const auto onMarkRemoved = [this](const ClangTextMark *mark) { + const auto it = std::remove(m_clangTextMarks.begin(), m_clangTextMarks.end(), mark); + m_clangTextMarks.erase(it, m_clangTextMarks.end()); + delete mark; + }; + auto textMark = new ClangTextMark(filePath(), diagnostic, onMarkRemoved); m_clangTextMarks.push_back(textMark); m_textDocument->addMark(textMark); } diff --git a/src/plugins/clangcodemodel/clangtextmark.cpp b/src/plugins/clangcodemodel/clangtextmark.cpp index fede73fde3..40c9b465e5 100644 --- a/src/plugins/clangcodemodel/clangtextmark.cpp +++ b/src/plugins/clangcodemodel/clangtextmark.cpp @@ -29,6 +29,7 @@ #include "clangdiagnostictooltipwidget.h" #include <utils/icon.h> +#include <utils/qtcassert.h> #include <utils/theme/theme.h> #include <QLayout> @@ -60,9 +61,14 @@ Core::Id cartegoryForSeverity(ClangBackEnd::DiagnosticSeverity severity) } // anonymous namespace -ClangTextMark::ClangTextMark(const QString &fileName, const ClangBackEnd::DiagnosticContainer &diagnostic) - : TextEditor::TextMark(fileName, int(diagnostic.location().line()), cartegoryForSeverity(diagnostic.severity())), - m_diagnostic(diagnostic) +ClangTextMark::ClangTextMark(const QString &fileName, + const ClangBackEnd::DiagnosticContainer &diagnostic, + const RemovedFromEditorHandler &removedHandler) + : TextEditor::TextMark(fileName, + int(diagnostic.location().line()), + cartegoryForSeverity(diagnostic.severity())) + , m_diagnostic(diagnostic) + , m_removedFromEditorHandler(removedHandler) { setPriority(TextEditor::TextMark::HighPriority); setIcon(diagnostic.severity()); @@ -93,5 +99,11 @@ bool ClangTextMark::addToolTipContent(QLayout *target) return true; } +void ClangTextMark::removedFromEditor() +{ + QTC_ASSERT(m_removedFromEditorHandler, return); + m_removedFromEditorHandler(this); +} + } // namespace ClangCodeModel diff --git a/src/plugins/clangcodemodel/clangtextmark.h b/src/plugins/clangcodemodel/clangtextmark.h index d8d7eb2c01..3fb0b06f0c 100644 --- a/src/plugins/clangcodemodel/clangtextmark.h +++ b/src/plugins/clangcodemodel/clangtextmark.h @@ -30,18 +30,28 @@ #include <texteditor/textmark.h> +#include <functional> + namespace ClangCodeModel { class ClangTextMark : public TextEditor::TextMark { public: - ClangTextMark(const QString &fileName, const ClangBackEnd::DiagnosticContainer &diagnostic); + using RemovedFromEditorHandler = std::function<void(ClangTextMark *)>; + + ClangTextMark(const QString &fileName, + const ClangBackEnd::DiagnosticContainer &diagnostic, + const RemovedFromEditorHandler &removedHandler); private: - bool addToolTipContent(QLayout *target); void setIcon(ClangBackEnd::DiagnosticSeverity severity); + bool addToolTipContent(QLayout *target) override; + void removedFromEditor() override; + +private: ClangBackEnd::DiagnosticContainer m_diagnostic; + RemovedFromEditorHandler m_removedFromEditorHandler; }; } // namespace ClangCodeModel |