From acb449bb2bc84f75e3ec0aeecdd1641ab3ce89f7 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 12 Feb 2024 11:52:13 +0100 Subject: TextEditor: Fix a leak of CompletionAssistProvider The c'tor of QmlJSEditorFactory allocates QmlJSCompletionAssistProvider and sets it via setCompletionAssistProvider. The QbsEditorFactory subclass allocates QbsCompletionAssistProvider and overrides the previous one via setCompletionAssistProvider. So, the old one was leaking. Use std::unique_ptr to ensure the ownership. Change-Id: I6fb7da2b97c50919e422482c858d3503403b788d Reviewed-by: David Schulz --- src/plugins/texteditor/texteditor.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'src/plugins/texteditor') diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 1ed6d0db51..e50311b137 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -25,7 +25,6 @@ #include "refactoroverlay.h" #include "snippets/snippetoverlay.h" #include "storagesettings.h" -#include "syntaxhighlighter.h" #include "tabsettings.h" #include "textdocument.h" #include "textdocumentlayout.h" @@ -9425,7 +9424,7 @@ public: TextEditorFactory::SyntaxHighLighterCreator m_syntaxHighlighterCreator; CommentDefinition m_commentDefinition; QList m_hoverHandlers; // owned - CompletionAssistProvider * m_completionAssistProvider = nullptr; // owned + std::unique_ptr m_completionAssistProvider; // owned std::unique_ptr m_textEditorActionHandler; bool m_useGenericHighlighter = false; bool m_duplicatedSupported = true; @@ -9445,7 +9444,6 @@ TextEditorFactory::TextEditorFactory() TextEditorFactory::~TextEditorFactory() { qDeleteAll(d->m_hoverHandlers); - delete d->m_completionAssistProvider; delete d; } @@ -9472,8 +9470,9 @@ void TextEditorFactory::setEditorCreator(const EditorCreator &creator) if (d->m_syntaxHighlighterCreator) doc->resetSyntaxHighlighter(d->m_syntaxHighlighterCreator); - doc->setCompletionAssistProvider(d->m_completionAssistProvider ? d->m_completionAssistProvider - : &basicSnippetProvider); + doc->setCompletionAssistProvider(d->m_completionAssistProvider + ? d->m_completionAssistProvider.get() + : &basicSnippetProvider); return d->createEditorHelper(doc); }); @@ -9511,7 +9510,7 @@ void TextEditorFactory::addHoverHandler(BaseHoverHandler *handler) void TextEditorFactory::setCompletionAssistProvider(CompletionAssistProvider *provider) { - d->m_completionAssistProvider = provider; + d->m_completionAssistProvider.reset(provider); } void TextEditorFactory::setCommentDefinition(CommentDefinition definition) -- cgit v1.2.3