summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2016-11-17 15:55:06 +0100
committerNikolai Kosjar <nikolai.kosjar@qt.io>2016-11-23 11:52:31 +0000
commit4a08f14cf69c4c009c11b989e91f5b1c5dde6366 (patch)
treed0ddaeac4d6f2307368fc0c3ab56288d44db0ad8 /src
parentc4d9f6ac3f23041be594c2693baa17281e77fb87 (diff)
downloadqt-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.cpp7
-rw-r--r--src/plugins/clangcodemodel/clangtextmark.cpp18
-rw-r--r--src/plugins/clangcodemodel/clangtextmark.h14
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