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 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.'); 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.');