QML: Fix crash when opening context menu

The AssistInterface changed to unique_ptr, but the internals of how the
QmlJSEditor looked for quick fixes still wrapped it into a
QSharedPointer, which then deleted the assist interface in addition to
the unique_ptr.

Amends 0e4b0a26d3

Fixes: QTCREATORBUG-28742
Change-Id: If685dbb2c49b09d529d0dcb3677dc90b03a039f0
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Eike Ziller
2023-02-06 15:32:00 +01:00
committed by David Schulz
parent 8512aba9eb
commit 541aafecbb
7 changed files with 40 additions and 45 deletions

View File

@@ -67,8 +67,7 @@ class Operation: public QmlJSQuickFixOperation
T *m_objDef;
public:
Operation(const QSharedPointer<const QmlJSQuickFixAssistInterface> &interface,
T *objDef)
Operation(const QmlJSQuickFixAssistInterface *interface, T *objDef)
: QmlJSQuickFixOperation(interface, 0)
, m_objDef(objDef)
{
@@ -82,7 +81,7 @@ public:
QString tryName = base;
int extraNumber = 1;
const ObjectValue *found = nullptr;
const ScopeChain &scope = assistInterface()->semanticInfo().scopeChain();
const ScopeChain &scope = semanticInfo().scopeChain();
forever {
scope.lookup(tryName, &found);
if (!found || extraNumber > 1000)
@@ -157,7 +156,7 @@ public:
} // end of anonymous namespace
void matchWrapInLoaderQuickFix(const QmlJSQuickFixInterface &interface, QuickFixOperations &result)
void matchWrapInLoaderQuickFix(const QmlJSQuickFixAssistInterface *interface, QuickFixOperations &result)
{
const int pos = interface->currentFile()->cursor().position();