From a7a2dc37088bb75be2ee3b2d7d1e9893247532c3 Mon Sep 17 00:00:00 2001 From: Simon Cockx Date: Mon, 25 Aug 2025 10:43:42 +0200 Subject: [PATCH] ide: LanguageServerImpl initialize() returns immediately and schedules background build; widen visibility for extension points (fixes eclipse-xtext/xtext#3492) --- .../xtext/ide/server/LanguageServerImpl.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/LanguageServerImpl.java b/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/LanguageServerImpl.java index 33787a57e0c..b032e50b768 100644 --- a/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/LanguageServerImpl.java +++ b/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/LanguageServerImpl.java @@ -188,9 +188,9 @@ public class LanguageServerImpl implements LanguageServer, WorkspaceService, Tex private WorkspaceManager workspaceManager; - private InitializeParams initializeParams; + protected InitializeParams initializeParams; - private InitializeResult initializeResult; + protected InitializeResult initializeResult; private WorkspaceResourceAccess resourceAccess; @@ -229,10 +229,13 @@ public CompletableFuture initialize(InitializeParams params) { initializeParams = params; InitializeResult result = new InitializeResult(); - result.setCapabilities(createServerCapabilities(params)); access.addBuildListener(this); - return requestManager.runWrite(() -> { + + initializeResult = result; + + // Schedule a background build of the project + requestManager.runWrite(() -> { if (clientSupportsWorkspaceFolders() && workspaceManager.isSupportsWorkspaceFolders()) { List workspaceFolders = params.getWorkspaceFolders(); if (workspaceFolders == null) @@ -242,8 +245,10 @@ public CompletableFuture initialize(InitializeParams params) { URI baseDir = getBaseDir(params); workspaceManager.initialize(baseDir, this::publishDiagnostics, CancelIndicator.NullImpl); } - return result; - }, (cancelIndicator, it) -> it).thenApply(it -> initializeResult = it); + return null; + }, (cancelIndicator, it) -> it); + + return CompletableFuture.completedFuture(result); } protected boolean clientSupportsWorkspaceFolders() { @@ -508,7 +513,7 @@ public void didChangeWorkspaceFolders(DidChangeWorkspaceFoldersParams params) { }, (a, b) -> null); } - private void publishDiagnostics(URI uri, Iterable issues) { + protected void publishDiagnostics(URI uri, Iterable issues) { initialized.thenAccept((initParams) -> { PublishDiagnosticsParams publishDiagnosticsParams = new PublishDiagnosticsParams(); publishDiagnosticsParams.setUri(uriExtensions.toUriString(uri));