diff --git a/src/plugins/copilot/copilotclient.cpp b/src/plugins/copilot/copilotclient.cpp index 7bfddb0cf5a..a6047004aa8 100644 --- a/src/plugins/copilot/copilotclient.cpp +++ b/src/plugins/copilot/copilotclient.cpp @@ -25,11 +25,9 @@ using namespace Utils; namespace Copilot::Internal { -static LanguageClient::BaseClientInterface *clientInterface() +static LanguageClient::BaseClientInterface *clientInterface(const FilePath &nodePath, + const FilePath &distPath) { - const FilePath nodePath = CopilotSettings::instance().nodeJsPath.filePath(); - const FilePath distPath = CopilotSettings::instance().distPath.filePath(); - CommandLine cmd{nodePath, {distPath.toFSPathString()}}; const auto interface = new LanguageClient::StdIOClientInterface; @@ -44,8 +42,8 @@ CopilotClient *CopilotClient::instance() return currentInstance; } -CopilotClient::CopilotClient() - : LanguageClient::Client(clientInterface()) +CopilotClient::CopilotClient(const FilePath &nodePath, const FilePath &distPath) + : LanguageClient::Client(clientInterface(nodePath, distPath)) { setName("Copilot"); LanguageClient::LanguageFilter langFilter; diff --git a/src/plugins/copilot/copilotclient.h b/src/plugins/copilot/copilotclient.h index 73fe95e2531..42989e93f77 100644 --- a/src/plugins/copilot/copilotclient.h +++ b/src/plugins/copilot/copilotclient.h @@ -23,7 +23,7 @@ class DocumentWatcher; class CopilotClient : public LanguageClient::Client { public: - explicit CopilotClient(); + explicit CopilotClient(const Utils::FilePath &nodePath, const Utils::FilePath &distPath); static CopilotClient *instance(); diff --git a/src/plugins/copilot/copilotplugin.cpp b/src/plugins/copilot/copilotplugin.cpp index d473cac2cbc..45a859b1380 100644 --- a/src/plugins/copilot/copilotplugin.cpp +++ b/src/plugins/copilot/copilotplugin.cpp @@ -10,6 +10,8 @@ #include #include +#include + #include using namespace Utils; @@ -18,28 +20,16 @@ using namespace Core; namespace Copilot { namespace Internal { -CopilotPlugin::~CopilotPlugin() -{ - if (m_client) - m_client->shutdown(); - - m_client = nullptr; -} - void CopilotPlugin::initialize() { CopilotSettings::instance().readSettings(ICore::settings()); - m_client = new CopilotClient(); + restartClient(); - connect(m_client, &CopilotClient::finished, this, [this]() { m_client = nullptr; }); - - connect(&CopilotSettings::instance(), &CopilotSettings::applied, this, [this]() { - if (m_client) - m_client->shutdown(); - m_client = nullptr; - m_client = new CopilotClient(); - }); + connect(&CopilotSettings::instance(), + &CopilotSettings::applied, + this, + &CopilotPlugin::restartClient); } void CopilotPlugin::extensionsInitialized() @@ -47,5 +37,12 @@ void CopilotPlugin::extensionsInitialized() CopilotOptionsPage::instance().init(); } +void CopilotPlugin::restartClient() +{ + LanguageClient::LanguageClientManager::shutdownClient(m_client); + m_client = new CopilotClient(CopilotSettings::instance().nodeJsPath.filePath(), + CopilotSettings::instance().distPath.filePath()); +} + } // namespace Internal } // namespace Copilot diff --git a/src/plugins/copilot/copilotplugin.h b/src/plugins/copilot/copilotplugin.h index 798db7c2819..5d915030653 100644 --- a/src/plugins/copilot/copilotplugin.h +++ b/src/plugins/copilot/copilotplugin.h @@ -7,6 +7,8 @@ #include +#include + namespace TextEditor { class TextEditorWidget; } namespace Copilot { @@ -18,13 +20,12 @@ class CopilotPlugin : public ExtensionSystem::IPlugin Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Copilot.json") public: - ~CopilotPlugin(); - void initialize() override; void extensionsInitialized() override; + void restartClient(); private: - CopilotClient *m_client{nullptr}; + QPointer m_client; }; } // namespace Internal