Skip to content

Commit 621c6ac

Browse files
committed
* Introduce open extension user directory command
* Improve delete cache error to prompt for manual deletion * Add unit test for new command open user directory
1 parent 5746ec1 commit 621c6ac

File tree

10 files changed

+65
-19
lines changed

10 files changed

+65
-19
lines changed

vscode/l10n/bundle.l10n.en.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
"jdk.extension.cache.label.confirmation.cancel":"Cancel",
5353
"jdk.extension.cache.message.cacheCleared":"Cache cleared successfully for this workspace",
5454
"jdk.extension.cache.label.reloadWindow":"Reload window",
55+
"jdk.extension.cache.label.openLSUserDir": "Open Oracle Java Language Server user directory",
56+
"jdk.extension.cache.message.reloadWindow.afterUserDirDeletion": "After deleting user directory manually please reload the window",
5557
"jdk.extension.cache.message.noUserDir":"Cannot find userdir path",
5658
"jdk.extension.command.progress.compilingWorkSpace": "Compiling workspace...",
5759
"jdk.extension.command.progress.compilingProject": "Compiling...",
@@ -91,7 +93,7 @@
9193
"jdk.extension.error_msg.doesntSupportNotebookCellExecution":"Language Server for {client} doesn't support notebook cell execution",
9294
"jdk.extension.error_msg.doesntSupportJShellExecution":"Language Server for {client} doesn't support JShell execution",
9395
"jdk.extension.error_msg.noSuperImpl":"No super implementation found",
94-
"jdk.extension.error_msg.cacheDeletionError":"Error deleting the cache",
96+
"jdk.extension.error_msg.cacheDeletionError":"Error deleting the cache.Please try deleting this {userDir} directory manually and reloading the window.",
9597
"jdk.extension.message.cacheDeleted":"Cache deleted successfully",
9698
"jdk.extension.cache.error_msg.cannotFindWrkSpacePath":"Cannot find workspace path",
9799
"jdk.extension.debugger.error_msg.debugAdapterNotInitialized":"Oracle Java extension Debug Server Adapter not yet initialized. Please wait for a while and try again.",

vscode/l10n/bundle.l10n.ja.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
"jdk.extension.cache.label.confirmation.cancel":"取消",
5353
"jdk.extension.cache.message.cacheCleared":"このワークスペースのキャッシュは正常に消去されました",
5454
"jdk.extension.cache.label.reloadWindow":"ウィンドウのリロード",
55+
"jdk.extension.cache.label.openLSUserDir": "Open Oracle Java Language Server user directory",
56+
"jdk.extension.cache.message.reloadWindow.afterUserDirDeletion": "After deleting user directory manually please reload the window",
5557
"jdk.extension.cache.message.noUserDir":"userdirパスが見つかりません",
5658
"jdk.extension.command.progress.compilingWorkSpace": "ワークスペースのコンパイル中...",
5759
"jdk.extension.command.progress.compilingProject": "コンパイル中...",
@@ -91,7 +93,7 @@
9193
"jdk.extension.error_msg.doesntSupportNotebookCellExecution":"{client}の言語サーバーではノートブック・セルの実行はサポートされていません",
9294
"jdk.extension.error_msg.doesntSupportJShellExecution":"{client}の言語サーバーではJShellの実行はサポートされていません",
9395
"jdk.extension.error_msg.noSuperImpl":"スーパークラスの実装が見つかりません",
94-
"jdk.extension.error_msg.cacheDeletionError":"キャッシュの削除中にエラーが発生しました",
96+
"jdk.extension.error_msg.cacheDeletionError":"Error deleting the cache.Please try deleting this {userDir} directory manually and reloading the window.",
9597
"jdk.extension.message.cacheDeleted":"キャッシュが正常に削除されました",
9698
"jdk.extension.cache.error_msg.cannotFindWrkSpacePath":"ワークスペース・パスが見つかりません",
9799
"jdk.extension.debugger.error_msg.debugAdapterNotInitialized":"Oracle Java拡張のデバッグ・サーバー・アダプタが、まだ初期化されていません。しばらく待ってから再試行してください。",

vscode/l10n/bundle.l10n.zh-cn.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
"jdk.extension.cache.label.confirmation.cancel":"取消",
5353
"jdk.extension.cache.message.cacheCleared":"已成功清除此工作区的高速缓存",
5454
"jdk.extension.cache.label.reloadWindow":"重新加载窗口",
55+
"jdk.extension.cache.label.openLSUserDir": "Open Oracle Java Language Server user directory",
56+
"jdk.extension.cache.message.reloadWindow.afterUserDirDeletion":"After deleting user directory manually please reload the window",
5557
"jdk.extension.cache.message.noUserDir":"找不到 userdir 路径",
5658
"jdk.extension.command.progress.compilingWorkSpace": "正在编译工作区...",
5759
"jdk.extension.command.progress.compilingProject": "正在编译...",
@@ -91,7 +93,7 @@
9193
"jdk.extension.error_msg.noSuperImpl":"未找到超类实现",
9294
"jdk.extension.error_msg.doesntSupportNotebookCellExecution":"{client} 的语言服务器不支持记事本单元格执行",
9395
"jdk.extension.error_msg.doesntSupportJShellExecution":"{client} 的语言服务器不支持 JShell 执行",
94-
"jdk.extension.error_msg.cacheDeletionError":"删除高速缓存时出错",
96+
"jdk.extension.error_msg.cacheDeletionError":"Error deleting the cache.Please try deleting this {userDir} directory manually and reloading the window.",
9597
"jdk.extension.message.cacheDeleted":"已成功删除高速缓存",
9698
"jdk.extension.cache.error_msg.cannotFindWrkSpacePath":"找不到工作区路径",
9799
"jdk.extension.debugger.error_msg.debugAdapterNotInitialized":"Oracle Java扩展调试服务器适配器尚未初始化。请稍候,然后重试。",

vscode/package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,6 +605,10 @@
605605
"command": "jdk.delete.cache",
606606
"title": "%jdk.delete.cache%"
607607
},
608+
{
609+
"command": "jdk.open.userDir",
610+
"title": "%jdk.open.userDir%"
611+
},
608612
{
609613
"command": "jdk.notebook.new",
610614
"title": "%jdk.notebook.new%",

vscode/package.nls.ja.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"jdk.download.jdk": "JDKのダウンロード、インストールおよび使用",
2929
"jdk.open.test": "テスト/テスト済のクラスへ移動...",
3030
"jdk.delete.cache": "このワークスペースのOracle Java拡張キャッシュの削除",
31+
"jdk.open.userDir": "Open Oracle Java Language Server user directory for this workspace",
3132
"jdk.configuration.specifyJdk.description": "Oracle Visual Studio Code拡張機能のJDKを指定します",
3233
"jdk.configuration.specifyProjectJdk.description": "ユーザーのプロジェクトが実行されるJDKを指定します。値はデフォルトでjdk.jdkhomeに設定されます",
3334
"jdk.configuration.verbose.description": "Oracle Visual Studio Code拡張機能からの詳細メッセージを有効化します",

vscode/package.nls.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"jdk.download.jdk": "Download, install and use JDK",
2929
"jdk.open.test": "Go To Test/Tested class...",
3030
"jdk.delete.cache": "Delete Oracle Java extension cache for this workspace",
31+
"jdk.open.userDir": "Open Oracle Java Language Server user directory for this workspace",
3132
"jdk.configuration.specifyJdk.description": "Specifies JDK for the Oracle Visual Studio Code Extension",
3233
"jdk.configuration.specifyProjectJdk.description": "Specifies the JDK on which user's project will be run. Defaults to the value of jdk.jdkhome",
3334
"jdk.configuration.verbose.description": "Enables verbose messages from the Oracle Visual Studio Code Extension",

vscode/package.nls.zh-cn.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"jdk.download.jdk": "下载、安装和使用 JDK",
2929
"jdk.open.test": "转至测试/被测试的类...",
3030
"jdk.delete.cache": "删除此工作区的 Oracle Java 扩展高速缓存",
31+
"jdk.open.userDir": "Open Oracle Java Language Server user directory for this workspace",
3132
"jdk.configuration.specifyJdk.description": "指定适用于 Oracle Visual Studio Code 扩展的 JDK",
3233
"jdk.configuration.specifyProjectJdk.description": "指定将在其上运行用户项目的 JDK。默认值为 jdk.jdkhome",
3334
"jdk.configuration.verbose.description": "启用来自 Oracle Visual Studio Code 扩展的详细消息",

vscode/src/commands/cache.ts

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Copyright (c) 2023-2024, Oracle and/or its affiliates.
2+
Copyright (c) 2023-2025, Oracle and/or its affiliates.
33
44
Licensed under the Apache License, Version 2.0 (the "License");
55
you may not use this file except in compliance with the License.
@@ -13,23 +13,29 @@
1313
See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
16-
import { commands, window } from "vscode";
16+
import { commands, window, env } from "vscode";
1717
import { builtInCommands, extCommands } from "./commands";
1818
import { ICommand } from "./types";
1919
import { l10n } from "../localiser";
2020
import * as fs from 'fs';
2121
import * as path from 'path';
2222
import { globalState } from "../globalState";
23+
import { getConfigurationValue } from "../configurations/handlers";
24+
import { configKeys } from "../configurations/configuration";
25+
import { LOGGER } from "../logger";
26+
import { FileUtils, isError } from "../utils";
2327

28+
const getLanguageServerUserDir = () => {
29+
const userdirScope = process.env['nbcode_userdir'] || getConfigurationValue(configKeys.userdir, "local");
30+
const workspaceStoragePath = globalState.getExtensionContextInfo().getWorkspaceStorage()?.fsPath;
31+
const userdirParentDir = userdirScope === "local" && workspaceStoragePath
32+
? workspaceStoragePath
33+
: globalState.getExtensionContextInfo().getGlobalStorage().fsPath;
34+
const userDir = path.join(userdirParentDir, "userdir");
35+
return userDir;
36+
}
2437
const deleteCache = async () => {
25-
// TODO: Change workspace path to userdir path
26-
const storagePath = globalState.getExtensionContextInfo().getWorkspaceStorage()?.fsPath;
27-
if (!storagePath) {
28-
window.showErrorMessage(l10n.value("jdk.extension.cache.error_msg.cannotFindWrkSpacePath"));
29-
return;
30-
}
31-
32-
const userDir = path.join(storagePath, "userdir");
38+
const userDir = getLanguageServerUserDir();
3339
if (userDir && fs.existsSync(userDir)) {
3440
const yes = l10n.value("jdk.extension.cache.label.confirmation.yes")
3541
const cancel = l10n.value("jdk.extension.cache.label.confirmation.cancel")
@@ -44,7 +50,14 @@ const deleteCache = async () => {
4450
await fs.promises.rm(userDir, { recursive: true });
4551
await window.showInformationMessage(l10n.value("jdk.extension.message.cacheDeleted"), reloadWindowActionLabel);
4652
} catch (err) {
47-
await window.showErrorMessage(l10n.value("jdk.extension.error_msg.cacheDeletionError"), reloadWindowActionLabel);
53+
LOGGER.error(`Error while deleting the cache : ${isError(err) ? err.message : err}`);
54+
const openLSUserDirLabel = l10n.value("jdk.extension.cache.label.openLSUserDir");
55+
const selectedAction = await window.showErrorMessage(l10n.value("jdk.extension.error_msg.cacheDeletionError", { userDir }), openLSUserDirLabel);
56+
if (selectedAction === openLSUserDirLabel) {
57+
const opened = await openLanguageServerUserDir();
58+
if (opened)
59+
await window.showErrorMessage(l10n.value("jdk.extension.cache.message.reloadWindow.afterUserDirDeletion"), reloadWindowActionLabel);
60+
}
4861
} finally {
4962
commands.executeCommand(builtInCommands.reloadWindow);
5063
}
@@ -53,8 +66,22 @@ const deleteCache = async () => {
5366
window.showErrorMessage(l10n.value("jdk.extension.cache.message.noUserDir"));
5467
}
5568
}
69+
const openLanguageServerUserDir = async () => {
70+
const userDir = getLanguageServerUserDir();
71+
if (userDir && fs.existsSync(userDir)) {
72+
return env.openExternal(FileUtils.toUri(userDir));
73+
} else {
74+
window.showErrorMessage(l10n.value("jdk.extension.cache.message.noUserDir"));
75+
return false;
76+
}
77+
}
5678

57-
export const registerCacheCommands: ICommand[] = [{
58-
command: extCommands.deleteCache,
59-
handler: deleteCache
60-
}];
79+
export const registerCacheCommands: ICommand[] = [
80+
{
81+
command: extCommands.deleteCache,
82+
handler: deleteCache
83+
}, {
84+
command: extCommands.openLanguageServerUserDir,
85+
handler: openLanguageServerUserDir
86+
},
87+
];

vscode/src/commands/commands.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export const extCommands = {
2222
newProject: appendPrefixToCommand('workspace.newproject'),
2323
openTest: appendPrefixToCommand('open.test'),
2424
deleteCache: appendPrefixToCommand('delete.cache'),
25+
openLanguageServerUserDir: appendPrefixToCommand('open.userDir'),
2526
downloadJdk: appendPrefixToCommand('download.jdk'),
2627
compileWorkspace: appendPrefixToCommand('workspace.compile'),
2728
cleanWorkspace: appendPrefixToCommand('workspace.clean'),

vscode/src/test/integration/suite/general/extension.test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,5 +306,10 @@ suite('Extension Test Suite', function () {
306306
const formattedContents = editor.document.getText().trim();
307307
assert.ok(formattedContents == FORMATTED_POM_XML.trim(), "pom.xml is not formatted");
308308
});
309-
309+
// Check if open language server user directory command is excuted succesfully
310+
test("Open Oracle Java Language Server user directory ", async () => {
311+
const opened = await commands.executeCommand('jdk.open.userDir');
312+
assert.ok(opened, "Open Oracle Java Language Server user directory command not working");
313+
});
314+
// Check if delete cache command is executed succesfully
310315
});

0 commit comments

Comments
 (0)