From d7eac5a1d6ab63d81f6ca955ff9ce3153419554d Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Mon, 9 Mar 2020 14:41:28 +0800 Subject: [PATCH 1/2] activate before execute java extension commands Signed-off-by: Yan Zhang --- src/commands.ts | 16 ++++++++-------- src/utility.ts | 4 ++++ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/commands.ts b/src/commands.ts index 1ccad155..ac8b888b 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -39,17 +39,17 @@ export const JAVA_IS_ON_CLASSPATH = "vscode.java.isOnClasspath"; export const JAVA_RESOLVE_JAVAEXECUTABLE = "vscode.java.resolveJavaExecutable"; export function executeJavaLanguageServerCommand(...rest) { - // TODO: need to handle error and trace telemetry - if (!utility.isJavaExtEnabled()) { - throw new utility.JavaExtensionNotActivatedError( - `Cannot execute command ${JAVA_EXECUTE_WORKSPACE_COMMAND}, VS Code Java Extension is not enabled.`); - } - return vscode.commands.executeCommand(JAVA_EXECUTE_WORKSPACE_COMMAND, ...rest); + return executeJavaExtensionCommand(JAVA_EXECUTE_WORKSPACE_COMMAND, ...rest); } -export function executeJavaExtensionCommand(commandName: string, ...rest) { - if (!utility.isJavaExtEnabled()) { +export async function executeJavaExtensionCommand(commandName: string, ...rest) { + // TODO: need to handle error and trace telemetry + const javaExtension = utility.getJavaExtension(); + if (!javaExtension) { throw new utility.JavaExtensionNotActivatedError(`Cannot execute command ${commandName}, VS Code Java Extension is not enabled.`); } + if (!javaExtension.isActive) { + await javaExtension.activate(); + } return vscode.commands.executeCommand(commandName, ...rest); } diff --git a/src/utility.ts b/src/utility.ts index 66c4dc80..8165e4b8 100644 --- a/src/utility.ts +++ b/src/utility.ts @@ -160,6 +160,10 @@ export function getJavaExtensionAPI(): Thenable { return extension.activate(); } +export function getJavaExtension(): vscode.Extension { + return vscode.extensions.getExtension(JAVA_EXTENSION_ID); +} + export function isJavaExtEnabled(): boolean { const javaExt = vscode.extensions.getExtension(JAVA_EXTENSION_ID); return !!javaExt; From b03bf00606590b8c68b9085badeb1d5848f6676a Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Mon, 9 Mar 2020 14:47:27 +0800 Subject: [PATCH 2/2] rename the error type for clarity Signed-off-by: Yan Zhang --- src/build.ts | 2 +- src/commands.ts | 2 +- src/configurationProvider.ts | 4 ++-- src/extension.ts | 2 +- src/utility.ts | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/build.ts b/src/build.ts index 18b9514e..1eb1e2bb 100644 --- a/src/build.ts +++ b/src/build.ts @@ -32,7 +32,7 @@ export async function buildWorkspace(): Promise { } async function handleBuildFailure(operationId: string, err: any): Promise { - if (err instanceof utility.JavaExtensionNotActivatedError) { + if (err instanceof utility.JavaExtensionNotEnabledError) { utility.guideToInstallJavaExtension(); return false; } diff --git a/src/commands.ts b/src/commands.ts index ac8b888b..7ffa3d4d 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -46,7 +46,7 @@ export async function executeJavaExtensionCommand(commandName: string, ...rest) // TODO: need to handle error and trace telemetry const javaExtension = utility.getJavaExtension(); if (!javaExtension) { - throw new utility.JavaExtensionNotActivatedError(`Cannot execute command ${commandName}, VS Code Java Extension is not enabled.`); + throw new utility.JavaExtensionNotEnabledError(`Cannot execute command ${commandName}, VS Code Java Extension is not enabled.`); } if (!javaExtension.isActive) { await javaExtension.activate(); diff --git a/src/configurationProvider.ts b/src/configurationProvider.ts index 58d26785..9bd8e991 100644 --- a/src/configurationProvider.ts +++ b/src/configurationProvider.ts @@ -83,7 +83,7 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration }); resolve([defaultLaunchConfig, ...launchConfigs]); } catch (ex) { - if (ex instanceof utility.JavaExtensionNotActivatedError) { + if (ex instanceof utility.JavaExtensionNotEnabledError) { utility.guideToInstallJavaExtension(); } p.report({ message: `failed to generate configuration. ${ex}` }); @@ -232,7 +232,7 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration throw new Error("Failed to start debug server."); } } catch (ex) { - if (ex instanceof utility.JavaExtensionNotActivatedError) { + if (ex instanceof utility.JavaExtensionNotEnabledError) { utility.guideToInstallJavaExtension(); return undefined; } diff --git a/src/extension.ts b/src/extension.ts index 0f5f1169..754d27cf 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -178,7 +178,7 @@ async function runJavaFile(uri: vscode.Uri, noDebug: boolean) { // Wait for Java Language Support extension being activated. await utility.getJavaExtensionAPI(); } catch (ex) { - if (ex instanceof utility.JavaExtensionNotActivatedError) { + if (ex instanceof utility.JavaExtensionNotEnabledError) { utility.guideToInstallJavaExtension(); return; } diff --git a/src/utility.ts b/src/utility.ts index 8165e4b8..7d563d08 100644 --- a/src/utility.ts +++ b/src/utility.ts @@ -21,7 +21,7 @@ export class UserError extends Error { } } -export class JavaExtensionNotActivatedError extends Error { +export class JavaExtensionNotEnabledError extends Error { constructor(message) { super(message); setUserError(this); @@ -154,7 +154,7 @@ export async function getJavaHome(): Promise { export function getJavaExtensionAPI(): Thenable { const extension = vscode.extensions.getExtension(JAVA_EXTENSION_ID); if (!extension) { - throw new JavaExtensionNotActivatedError("VS Code Java Extension is not enabled."); + throw new JavaExtensionNotEnabledError("VS Code Java Extension is not enabled."); } return extension.activate();