diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 7a0aae0eb..fc73cbadc 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -120,7 +120,7 @@ export class StandardLanguageClient { public registerLanguageClientActions(context: ExtensionContext, hasImported: boolean, jdtEventEmitter: EventEmitter) { activationProgressNotification.showProgress(); - this.languageClient.onNotification(StatusNotification.type, (report) => { + this.languageClient.onNotification(StatusNotification.type, async (report) => { // Resolve serverRunning on the first status notification from the server, // indicating the server process is alive and can accept requests. apiManager.resolveServerRunningPromise(); @@ -149,10 +149,17 @@ export class StandardLanguageClient { apiManager.getApiInstance().onDidClasspathUpdate((projectUri: Uri) => { checkLombokDependency(context, projectUri); }); + apiManager.getApiInstance().onDidProjectsImport(() => { + updateJavaProjectsContext(); + }); + apiManager.getApiInstance().onDidProjectsDelete(() => { + updateJavaProjectsContext(); + }); // Disable the client-side snippet provider since LS is ready. snippetCompletionProvider.dispose(); registerDocumentValidationListener(context, this.languageClient); commands.executeCommand('setContext', 'javaLSReady', true); + updateJavaProjectsContext(); break; case 'Started': this.status = ClientStatus.started; @@ -844,6 +851,15 @@ export class StandardLanguageClient { } } +function updateJavaProjectsContext(): void { + getAllJavaProjects().then((projectUris) => { + const projectPaths = projectUris.map((uriString) => Uri.parse(uriString).fsPath.replace(/[\\/]$/, '')); + commands.executeCommand('setContext', 'java.projects', projectPaths); + }).catch((error) => { + logger.error(error); + }); +} + async function showImportFinishNotification(context: ExtensionContext) { const neverShow: boolean | undefined = context.globalState.get("java.neverShowImportFinishNotification"); if (!neverShow) {