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 1ccad155..7ffa3d4d 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()) { - throw new utility.JavaExtensionNotActivatedError(`Cannot execute command ${commandName}, VS Code Java Extension is not enabled.`); +export async function executeJavaExtensionCommand(commandName: string, ...rest) { + // TODO: need to handle error and trace telemetry + const javaExtension = utility.getJavaExtension(); + if (!javaExtension) { + throw new utility.JavaExtensionNotEnabledError(`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/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 66c4dc80..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,12 +154,16 @@ 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(); } +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;