From 2ad12b5b2c24018c89e91ef0b2355b3ac65edbaf Mon Sep 17 00:00:00 2001 From: David Schulz Date: Fri, 16 Jun 2023 13:23:16 +0200 Subject: [PATCH] ClangTools: optimize generating diagnostic text marks If we already know the document for a TextMark we are saving a potentially expensive lookup. Change-Id: Ib42b9ab5f36492a94846ef819c84c69a5aecf2e4 Reviewed-by: Christian Stenger --- src/plugins/clangtools/diagnosticmark.cpp | 15 +++++++++++---- src/plugins/clangtools/diagnosticmark.h | 1 + .../clangtools/documentclangtoolrunner.cpp | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/plugins/clangtools/diagnosticmark.cpp b/src/plugins/clangtools/diagnosticmark.cpp index 4184ce35350..bc92e1d17e3 100644 --- a/src/plugins/clangtools/diagnosticmark.cpp +++ b/src/plugins/clangtools/diagnosticmark.cpp @@ -8,18 +8,21 @@ #include "clangtoolsutils.h" #include "diagnosticconfigswidget.h" +#include #include #include #include +using namespace TextEditor; + namespace ClangTools { namespace Internal { -DiagnosticMark::DiagnosticMark(const Diagnostic &diagnostic) - : TextEditor::TextMark(diagnostic.location.filePath, - diagnostic.location.line, - {Tr::tr("Clang Tools"), Utils::Id(Constants::DIAGNOSTIC_MARK_ID)}) +DiagnosticMark::DiagnosticMark(const Diagnostic &diagnostic, TextDocument *document) + : TextMark(document, + diagnostic.location.line, + {Tr::tr("Clang Tools"), Utils::Id(Constants::DIAGNOSTIC_MARK_ID)}) , m_diagnostic(diagnostic) { setSettingsPage(Constants::SETTINGS_PAGE_ID); @@ -57,6 +60,10 @@ DiagnosticMark::DiagnosticMark(const Diagnostic &diagnostic) }); } +DiagnosticMark::DiagnosticMark(const Diagnostic &diagnostic) + : DiagnosticMark(diagnostic, TextDocument::textDocumentForFilePath(diagnostic.location.filePath)) +{} + void DiagnosticMark::disable() { if (!m_enabled) diff --git a/src/plugins/clangtools/diagnosticmark.h b/src/plugins/clangtools/diagnosticmark.h index 7218d89ebd5..6d566739d42 100644 --- a/src/plugins/clangtools/diagnosticmark.h +++ b/src/plugins/clangtools/diagnosticmark.h @@ -14,6 +14,7 @@ namespace Internal { class DiagnosticMark : public TextEditor::TextMark { public: + DiagnosticMark(const Diagnostic &diagnostic, TextEditor::TextDocument *document); explicit DiagnosticMark(const Diagnostic &diagnostic); void disable(); diff --git a/src/plugins/clangtools/documentclangtoolrunner.cpp b/src/plugins/clangtools/documentclangtoolrunner.cpp index a84ea3706ff..28ea234f9ad 100644 --- a/src/plugins/clangtools/documentclangtoolrunner.cpp +++ b/src/plugins/clangtools/documentclangtoolrunner.cpp @@ -268,7 +268,7 @@ void DocumentClangToolRunner::onDone(const AnalyzeOutputData &output) if (isSuppressed(diagnostic)) continue; - auto mark = new DiagnosticMark(diagnostic); + auto mark = new DiagnosticMark(diagnostic, doc); mark->toolType = toolType; if (doc && Utils::anyOf(diagnostic.explainingSteps, &ExplainingStep::isFixIt)) {