diff --git a/src/plugins/clangtools/diagnosticmark.cpp b/src/plugins/clangtools/diagnosticmark.cpp index 5ea0895b947..9eba17965f4 100644 --- a/src/plugins/clangtools/diagnosticmark.cpp +++ b/src/plugins/clangtools/diagnosticmark.cpp @@ -29,43 +29,15 @@ DiagnosticMark::DiagnosticMark(const Diagnostic &diagnostic, TextDocument *docum : TextMark(document, diagnostic.location.line, clangToolsCategory()) , m_diagnostic(diagnostic) { - setSettingsPage(Constants::SETTINGS_PAGE_ID); - - const bool isError = diagnostic.type == "error" || diagnostic.type == "fatal"; - setColor(isError ? Theme::CodeModel_Error_TextMarkColor : Theme::CodeModel_Warning_TextMarkColor); - setPriority(isError ? TextEditor::TextMark::HighPriority : TextEditor::TextMark::NormalPriority); - QIcon markIcon = diagnostic.icon(); - setIcon(markIcon.isNull() ? Icons::CODEMODEL_WARNING.icon() : markIcon); - setToolTip(createDiagnosticToolTipString(diagnostic, std::nullopt, true)); - setLineAnnotation(diagnostic.description); - setActionsProvider([diagnostic] { - // Copy to clipboard action - QList actions; - QAction *action = new QAction(); - action->setIcon(Icon::fromTheme("edit-copy")); - action->setToolTip(Tr::tr("Copy to Clipboard")); - QObject::connect(action, &QAction::triggered, [diagnostic] { - const QString text = createFullLocationString(diagnostic.location) - + ": " - + diagnostic.description; - setClipboardAndSelection(text); - }); - actions << action; - - // Disable diagnostic action - action = new QAction(); - action->setIcon(Icons::BROKEN.icon()); - action->setToolTip(Tr::tr("Disable Diagnostic")); - QObject::connect(action, &QAction::triggered, [diagnostic] { disableChecks({diagnostic}); }); - actions << action; - return actions; - }); + initialize(); } DiagnosticMark::DiagnosticMark(const Diagnostic &diagnostic) : TextMark(diagnostic.location.filePath, diagnostic.location.line, clangToolsCategory()) , m_diagnostic(diagnostic) -{} +{ + initialize(); +} void DiagnosticMark::disable() { @@ -89,6 +61,41 @@ Diagnostic DiagnosticMark::diagnostic() const return m_diagnostic; } +void DiagnosticMark::initialize() +{ + setSettingsPage(Constants::SETTINGS_PAGE_ID); + + const bool isError = m_diagnostic.type == "error" || m_diagnostic.type == "fatal"; + setColor(isError ? Theme::CodeModel_Error_TextMarkColor : Theme::CodeModel_Warning_TextMarkColor); + setPriority(isError ? TextEditor::TextMark::HighPriority : TextEditor::TextMark::NormalPriority); + QIcon markIcon = m_diagnostic.icon(); + setIcon(markIcon.isNull() ? Icons::CODEMODEL_WARNING.icon() : markIcon); + setToolTip(createDiagnosticToolTipString(m_diagnostic, std::nullopt, true)); + setLineAnnotation(m_diagnostic.description); + setActionsProvider([diagnostic = m_diagnostic] { + // Copy to clipboard action + QList actions; + QAction *action = new QAction(); + action->setIcon(Icon::fromTheme("edit-copy")); + action->setToolTip(Tr::tr("Copy to Clipboard")); + QObject::connect(action, &QAction::triggered, [diagnostic] { + const QString text = createFullLocationString(diagnostic.location) + + ": " + + diagnostic.description; + setClipboardAndSelection(text); + }); + actions << action; + + // Disable diagnostic action + action = new QAction(); + action->setIcon(Icons::BROKEN.icon()); + action->setToolTip(Tr::tr("Disable Diagnostic")); + QObject::connect(action, &QAction::triggered, [diagnostic] { disableChecks({diagnostic}); }); + actions << action; + return actions; + }); +} + } // namespace Internal } // namespace ClangTools diff --git a/src/plugins/clangtools/diagnosticmark.h b/src/plugins/clangtools/diagnosticmark.h index 6d566739d42..7d2999e66ec 100644 --- a/src/plugins/clangtools/diagnosticmark.h +++ b/src/plugins/clangtools/diagnosticmark.h @@ -25,6 +25,7 @@ public: std::optional toolType; private: + void initialize(); const Diagnostic m_diagnostic; bool m_enabled = true; };