Lua: Fix for client crash on callback call

Change-Id: Idd2ca77b050aa22c3c34d1fef45fac8e960c4401
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
Artur Twardy
2024-11-04 17:51:11 +01:00
parent 94aac9f446
commit 0c6a49a19c

View File

@@ -34,7 +34,7 @@ namespace {
class RequestWithResponse : public LanguageServerProtocol::JsonRpcMessage class RequestWithResponse : public LanguageServerProtocol::JsonRpcMessage
{ {
sol::function m_callback; sol::main_function m_callback;
LanguageServerProtocol::MessageId m_id; LanguageServerProtocol::MessageId m_id;
public: public:
@@ -210,7 +210,7 @@ public:
TransportType m_transportType{TransportType::StdIO}; TransportType m_transportType{TransportType::StdIO};
std::function<expected_str<void>(CommandLine &)> m_cmdLineCallback; std::function<expected_str<void>(CommandLine &)> m_cmdLineCallback;
std::function<expected_str<void>(QString &)> m_initOptionsCallback; std::function<expected_str<void>(QString &)> m_initOptionsCallback;
sol::function m_asyncInitOptions; sol::main_function m_asyncInitOptions;
bool m_isUpdatingAsyncOptions{false}; bool m_isUpdatingAsyncOptions{false};
AspectContainer *m_aspects{nullptr}; AspectContainer *m_aspects{nullptr};
QString m_name; QString m_name;
@@ -330,7 +330,7 @@ public:
this, this,
&LuaClientWrapper::onClientRemoved); &LuaClientWrapper::onClientRemoved);
if (auto asyncInit = options.get<sol::optional<sol::function>>( if (auto asyncInit = options.get<sol::optional<sol::main_function>>(
"initializationOptionsAsync")) { "initializationOptionsAsync")) {
m_asyncInitOptions = *asyncInit; m_asyncInitOptions = *asyncInit;
QMetaObject::invokeMethod( QMetaObject::invokeMethod(
@@ -379,7 +379,7 @@ public:
return {}; return {};
} }
void registerMessageCallback(const QString &msg, const sol::function &callback) void registerMessageCallback(const QString &msg, const sol::main_function &callback)
{ {
m_messageCallbacks.insert(msg, callback); m_messageCallbacks.insert(msg, callback);
updateMessageCallbacks(); updateMessageCallbacks();
@@ -454,7 +454,7 @@ public:
} }
void sendMessageWithIdForDocument_cb( void sendMessageWithIdForDocument_cb(
TextEditor::TextDocument *document, const sol::table &message, const sol::function callback) TextEditor::TextDocument *document, const sol::table &message, const sol::main_function callback)
{ {
const QJsonValue messageValue = ::Lua::toJson(message); const QJsonValue messageValue = ::Lua::toJson(message);
if (!messageValue.isObject()) if (!messageValue.isObject())
@@ -691,7 +691,7 @@ static void registerLuaApi()
return sol::lua_nil; return sol::lua_nil;
return c->m_onInstanceStart.value(); return c->m_onInstanceStart.value();
}, },
[](LuaClientWrapper *c, const sol::function &f) { c->m_onInstanceStart = f; }), [](LuaClientWrapper *c, const sol::main_function &f) { c->m_onInstanceStart = f; }),
"registerMessage", "registerMessage",
&LuaClientWrapper::registerMessageCallback, &LuaClientWrapper::registerMessageCallback,
"sendMessage", "sendMessage",