From d3a16fe10ec7e670d8aa6b3241fb037ec60215fc Mon Sep 17 00:00:00 2001 From: Shivam Madan Date: Mon, 16 Jun 2025 17:39:13 +0530 Subject: [PATCH] Extension restart fix Moved the reload window pop up from jdk downloader to configuration change listener(restartExtension) triggered whenever any configuration is changed and extension is in bad state. --- vscode/l10n/bundle.l10n.en.json | 4 +- vscode/l10n/bundle.l10n.ja.json | 4 +- vscode/l10n/bundle.l10n.zh-cn.json | 4 +- vscode/src/lsp/clientPromise.ts | 45 ++++++++++++--------- vscode/src/webviews/jdkDownloader/action.ts | 8 +--- 5 files changed, 37 insertions(+), 28 deletions(-) diff --git a/vscode/l10n/bundle.l10n.en.json b/vscode/l10n/bundle.l10n.en.json index d08bba0..be7b4b9 100644 --- a/vscode/l10n/bundle.l10n.en.json +++ b/vscode/l10n/bundle.l10n.en.json @@ -96,5 +96,7 @@ "jdk.workspace.new.prompt": "Input the directory path where the new file will be generated", "jdk.extension.utils.error_message.failedHttpsRequest": "Failed to get {url} ({statusCode})", "jdk.extension.error_msg.notEnabled": "{SERVER_NAME} not enabled", - "jdk.telemetry.consent": "Allow anonymous telemetry data to be reported to Oracle? You may opt-out or in at any time from the Settings for jdk.telemetry.enabled." + "jdk.telemetry.consent": "Allow anonymous telemetry data to be reported to Oracle? You may opt-out or in at any time from the Settings for jdk.telemetry.enabled.", + "jdk.configChanged": "Configurations updated for oracle java extenion , please reload the window to restart the extension.", + "jdk.configChangedFailed": "Error while updating extension configurations , please reload the window to restart the extension." } diff --git a/vscode/l10n/bundle.l10n.ja.json b/vscode/l10n/bundle.l10n.ja.json index 542a4d7..29d36ed 100755 --- a/vscode/l10n/bundle.l10n.ja.json +++ b/vscode/l10n/bundle.l10n.ja.json @@ -96,5 +96,7 @@ "jdk.workspace.new.prompt": "新しいファイルを生成するディレクトリのパスを入力してください", "jdk.extension.utils.error_message.failedHttpsRequest": "{url}の取得に失敗しました({statusCode})", "jdk.extension.error_msg.notEnabled": "{SERVER_NAME}が有効化されていません", - "jdk.telemetry.consent": "匿名テレメトリ・データをOracleにレポートすることを許可しますか。jdk.telemetry.enabledの設定からいつでもオプトアウトまたはオプトインできます。" + "jdk.telemetry.consent": "匿名テレメトリ・データをOracleにレポートすることを許可しますか。jdk.telemetry.enabledの設定からいつでもオプトアウトまたはオプトインできます。", + "jdk.configChanged": "Configurations updated for oracle java extenion , please reload the window to restart the extension.", + "jdk.configChangedFailed": "Error while updating extension configurations , please reload the window to restart the extension." } diff --git a/vscode/l10n/bundle.l10n.zh-cn.json b/vscode/l10n/bundle.l10n.zh-cn.json index b935471..c210e54 100755 --- a/vscode/l10n/bundle.l10n.zh-cn.json +++ b/vscode/l10n/bundle.l10n.zh-cn.json @@ -96,5 +96,7 @@ "jdk.workspace.new.prompt": "输入生成新文件的目录路径", "jdk.extension.utils.error_message.failedHttpsRequest": "无法获取 {url} ({statusCode})", "jdk.extension.error_msg.notEnabled": "{SERVER_NAME} 未启用", - "jdk.telemetry.consent": "是否允许向 Oracle 报告匿名遥测数据?您随时可以通过 jdk.telemetry.enabled 对应的设置选择退出或加入。" + "jdk.telemetry.consent": "是否允许向 Oracle 报告匿名遥测数据?您随时可以通过 jdk.telemetry.enabled 对应的设置选择退出或加入。", + "jdk.configChanged": "Configurations updated for oracle java extenion , please reload the window to restart the extension.", + "jdk.configChangedFailed": "Error while updating extension configurations , please reload the window to restart the extension." } diff --git a/vscode/src/lsp/clientPromise.ts b/vscode/src/lsp/clientPromise.ts index d24cdc2..b3fff4e 100644 --- a/vscode/src/lsp/clientPromise.ts +++ b/vscode/src/lsp/clientPromise.ts @@ -13,12 +13,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { commands } from "vscode"; +import { commands,window } from "vscode"; import { LOGGER } from "../logger"; import { NbProcessManager } from "./nbProcessManager"; import { clientInit } from "./initializer"; import { NbLanguageClient } from "./nbLanguageClient"; import { globalState } from "../globalState"; +import { l10n } from "../localiser"; export class ClientPromise { setClient!: [(c: NbLanguageClient) => void, (err: any) => void]; @@ -60,24 +61,32 @@ export class ClientPromise { } public restartExtension = async (nbProcessManager: NbProcessManager | null, notifyKill: boolean) => { - if (this.activationPending) { - LOGGER.warn("Server activation requested repeatedly, ignoring..."); - return; - } - if (!nbProcessManager) { + if (nbProcessManager) { + try { + globalState.setDeactivated(true); + await this.stopClient(); + await nbProcessManager.killProcess(notifyKill); + this.initialize(); + clientInit(); + } catch (error) { + LOGGER.error(`Error during activation: ${error}`); + const reloadNow: string = l10n.value("jdk.downloader.message.reload"); + const dialogBoxMessage = l10n.value("jdk.configChangedFailed"); + const selected = await window.showInformationMessage(dialogBoxMessage, reloadNow); + if (selected === reloadNow) { + await commands.executeCommand('workbench.action.reloadWindow'); + } + } finally { + this.activationPending = false; + } + }else{ LOGGER.error("Nbcode Process is null"); - return; - } - try { - await this.stopClient(); - await nbProcessManager.killProcess(notifyKill); - this.initialize(); - clientInit(); - } catch (error) { - LOGGER.error(`Error during activation: ${error}`); - throw error; - } finally { - this.activationPending = false; + const reloadNow: string = l10n.value("jdk.downloader.message.reload"); + const dialogBoxMessage = l10n.value("jdk.configChanged"); + const selected = await window.showInformationMessage(dialogBoxMessage, reloadNow); + if (selected === reloadNow) { + await commands.executeCommand('workbench.action.reloadWindow'); + } } } diff --git a/vscode/src/webviews/jdkDownloader/action.ts b/vscode/src/webviews/jdkDownloader/action.ts index ecd9943..4abd4ac 100644 --- a/vscode/src/webviews/jdkDownloader/action.ts +++ b/vscode/src/webviews/jdkDownloader/action.ts @@ -121,13 +121,7 @@ export class JdkDownloaderAction { dialogBoxMessage = l10n.value("jdk.downloader.message.completedInstallingJdk"); } LOGGER.log(`JDK installation completed successfully`); - - const reloadNow: string = l10n.value("jdk.downloader.message.reload"); - const selected = await window.showInformationMessage(dialogBoxMessage, reloadNow); - if (selected === reloadNow) { - await this.downloaderView.disposeView(); - await commands.executeCommand('workbench.action.reloadWindow'); - } + await window.showInformationMessage(dialogBoxMessage); } private jdkInstallationManager = async () => {