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 <david.schulz@qt.io>
This commit is contained in:
Jarek Kobus
2024-02-12 11:52:13 +01:00
parent 8313190ee9
commit acb449bb2b

View File

@@ -25,7 +25,6 @@
#include "refactoroverlay.h" #include "refactoroverlay.h"
#include "snippets/snippetoverlay.h" #include "snippets/snippetoverlay.h"
#include "storagesettings.h" #include "storagesettings.h"
#include "syntaxhighlighter.h"
#include "tabsettings.h" #include "tabsettings.h"
#include "textdocument.h" #include "textdocument.h"
#include "textdocumentlayout.h" #include "textdocumentlayout.h"
@@ -9425,7 +9424,7 @@ public:
TextEditorFactory::SyntaxHighLighterCreator m_syntaxHighlighterCreator; TextEditorFactory::SyntaxHighLighterCreator m_syntaxHighlighterCreator;
CommentDefinition m_commentDefinition; CommentDefinition m_commentDefinition;
QList<BaseHoverHandler *> m_hoverHandlers; // owned QList<BaseHoverHandler *> m_hoverHandlers; // owned
CompletionAssistProvider * m_completionAssistProvider = nullptr; // owned std::unique_ptr<CompletionAssistProvider> m_completionAssistProvider; // owned
std::unique_ptr<TextEditorActionHandler> m_textEditorActionHandler; std::unique_ptr<TextEditorActionHandler> m_textEditorActionHandler;
bool m_useGenericHighlighter = false; bool m_useGenericHighlighter = false;
bool m_duplicatedSupported = true; bool m_duplicatedSupported = true;
@@ -9445,7 +9444,6 @@ TextEditorFactory::TextEditorFactory()
TextEditorFactory::~TextEditorFactory() TextEditorFactory::~TextEditorFactory()
{ {
qDeleteAll(d->m_hoverHandlers); qDeleteAll(d->m_hoverHandlers);
delete d->m_completionAssistProvider;
delete d; delete d;
} }
@@ -9472,8 +9470,9 @@ void TextEditorFactory::setEditorCreator(const EditorCreator &creator)
if (d->m_syntaxHighlighterCreator) if (d->m_syntaxHighlighterCreator)
doc->resetSyntaxHighlighter(d->m_syntaxHighlighterCreator); doc->resetSyntaxHighlighter(d->m_syntaxHighlighterCreator);
doc->setCompletionAssistProvider(d->m_completionAssistProvider ? d->m_completionAssistProvider doc->setCompletionAssistProvider(d->m_completionAssistProvider
: &basicSnippetProvider); ? d->m_completionAssistProvider.get()
: &basicSnippetProvider);
return d->createEditorHelper(doc); return d->createEditorHelper(doc);
}); });
@@ -9511,7 +9510,7 @@ void TextEditorFactory::addHoverHandler(BaseHoverHandler *handler)
void TextEditorFactory::setCompletionAssistProvider(CompletionAssistProvider *provider) void TextEditorFactory::setCompletionAssistProvider(CompletionAssistProvider *provider)
{ {
d->m_completionAssistProvider = provider; d->m_completionAssistProvider.reset(provider);
} }
void TextEditorFactory::setCommentDefinition(CommentDefinition definition) void TextEditorFactory::setCommentDefinition(CommentDefinition definition)