From 14a6ec78a3ae5312b0732bd8ec2ebf111c92bfb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=A4der?= Date: Wed, 17 Sep 2025 10:18:39 +0200 Subject: [PATCH 1/3] Add command to add JDK to settings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Mäder --- package.json | 5 +++++ package.nls.json | 3 ++- src/extension.ts | 2 ++ src/javaRuntimes.ts | 42 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/javaRuntimes.ts diff --git a/package.json b/package.json index 05ee877252..ccc96ac144 100644 --- a/package.json +++ b/package.json @@ -1752,6 +1752,11 @@ "command": "java.action.showExtendedOutline", "title": "%java.action.showExtendedOutline%", "category": "Java" + }, + { + "command": "java.runtimes.add", + "title": "%java.runtimes.add%", + "category": "Java" } ], "keybindings": [ diff --git a/package.nls.json b/package.nls.json index 33307fcaae..2ac32d40a2 100644 --- a/package.nls.json +++ b/package.nls.json @@ -29,5 +29,6 @@ "java.action.filesExplorerPasteAction": "Paste Clipboard Text Into a File", "java.action.doCleanup": "Performs Cleanup Actions", "java.change.searchScope": "Change Search Scope", - "java.action.showExtendedOutline": "Open Extended Outline" + "java.action.showExtendedOutline": "Open Extended Outline", + "java.runtimes.add": "Add Java Runtime" } diff --git a/src/extension.ts b/src/extension.ts index 77ad9031b3..7043d33140 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -39,6 +39,7 @@ import { BuildFileSelector, PICKED_BUILD_FILES, cleanupWorkspaceState } from './ import { pasteFile } from './pasteAction'; import { ServerStatusKind } from './serverStatus'; import { TelemetryService } from '@redhat-developer/vscode-redhat-telemetry/lib/node'; +import { JavaRuntimes } from './javaRuntimes'; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -114,6 +115,7 @@ export function fixJdtLinksInDocumentation(oldDocumentation: MarkdownString): Ma export async function activate(context: ExtensionContext): Promise { await loadSupportedJreNames(context); + await JavaRuntimes.initialize(context); context.subscriptions.push(commands.registerCommand(Commands.FILESEXPLORER_ONPASTE, async () => { const originalClipboard = await env.clipboard.readText(); // Hack in order to get path to selected folder if applicable (see https://github.com/microsoft/vscode/issues/3553#issuecomment-1098562676) diff --git a/src/javaRuntimes.ts b/src/javaRuntimes.ts new file mode 100644 index 0000000000..9a7947e036 --- /dev/null +++ b/src/javaRuntimes.ts @@ -0,0 +1,42 @@ +import { getRuntime } from "jdk-utils"; +import * as vscode from "vscode"; +import { getSupportedJreNames } from "./jdkUtils"; + + +export namespace JavaRuntimes { + export async function initialize(context: vscode.ExtensionContext): Promise { + context.subscriptions.push(vscode.commands.registerCommand('java.runtimes.add', async () => { + const directory = await vscode.window.showOpenDialog({ + canSelectFiles: false, + canSelectFolders: true, + canSelectMany: false, + title: 'Select JDK Directory', + }); + if (directory) { + const runtime = await getRuntime(directory[0].fsPath); + if (runtime) { + const config = vscode.workspace.getConfiguration('java.configuration').get('runtimes'); + if (Array.isArray(config)) { + if (config.some(r => r.path === directory[0].fsPath)) { + vscode.window.showErrorMessage(`JDK Directory ${directory[0].fsPath} already configured`); + } else { + const name = await vscode.window.showQuickPick(getSupportedJreNames(), { + title: 'Select Java Runtime', + }); + if (name) { + config.push({ + name: name, + path: directory[0].fsPath, + }); + } + vscode.workspace.getConfiguration('java.configuration').update('runtimes', config, vscode.ConfigurationTarget.Global); + vscode.window.showInformationMessage(`JDK Directory ${directory[0].fsPath} added`); + } + } + } else { + vscode.window.showErrorMessage(`Invalid JDK Directory ${directory[0].fsPath}`); + } + } + })); + } +} \ No newline at end of file From 19a5278579105dc1f9f686dc3e6e7453976f1da6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=A4der?= Date: Wed, 17 Sep 2025 16:57:33 +0200 Subject: [PATCH 2/3] Add java.runtimes.add command to test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Mäder --- test/standard-mode-suite/extension.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 54df60897c..db86da807d 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -127,7 +127,8 @@ suite('Java Language Extension - Standard', () => { Commands.RESOLVE_SOURCE_ATTACHMENT, Commands.FILESEXPLORER_ONPASTE, Commands.RESOLVE_PASTED_TEXT, - Commands.CHANGE_JAVA_SEARCH_SCOPE + Commands.CHANGE_JAVA_SEARCH_SCOPE, + "java.runtimes.add" ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); From 3c9b691adfe64d0551366456d77eec70953a4ef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=A4der?= Date: Wed, 17 Sep 2025 17:13:20 +0200 Subject: [PATCH 3/3] Add new command to lighweght test suite MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Mäder --- test/lightweight-mode-suite/extension.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/lightweight-mode-suite/extension.test.ts b/test/lightweight-mode-suite/extension.test.ts index 23f1a27587..0d270c7bd1 100644 --- a/test/lightweight-mode-suite/extension.test.ts +++ b/test/lightweight-mode-suite/extension.test.ts @@ -26,7 +26,8 @@ suite('Java Language Extension - LightWeight', () => { Commands.CLEAN_SHARED_INDEXES, Commands.RESTART_LANGUAGE_SERVER, Commands.FILESEXPLORER_ONPASTE, - Commands.CHANGE_JAVA_SEARCH_SCOPE + Commands.CHANGE_JAVA_SEARCH_SCOPE, + "java.runtimes.add" ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.');