From 99ab31d07bc44dd9eb28f5f43af160b9a9f2f6bf Mon Sep 17 00:00:00 2001 From: wenyutang-ms Date: Fri, 3 Apr 2026 15:38:34 +0800 Subject: [PATCH 1/3] perf: adjust compile timing to performance --- extension/src/languageServer/languageServer.ts | 1 + .../src/main/java/com/microsoft/gradle/GradleServices.java | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/extension/src/languageServer/languageServer.ts b/extension/src/languageServer/languageServer.ts index 8aab6e7ef..748c45ffe 100644 --- a/extension/src/languageServer/languageServer.ts +++ b/extension/src/languageServer/languageServer.ts @@ -138,6 +138,7 @@ export async function syncGradleBuild(gradleBuild: GradleBuild): Promise { if (rootProject && rootProject.getIsRoot()) { try { await syncProject(rootProject); + await vscode.commands.executeCommand("gradle.recompile"); } catch (e) { // Log but don't propagate - sync failures should not block task discovery const message = e instanceof Error ? e.message : String(e); diff --git a/gradle-language-server/src/main/java/com/microsoft/gradle/GradleServices.java b/gradle-language-server/src/main/java/com/microsoft/gradle/GradleServices.java index b2b623dc0..625ca2d8c 100644 --- a/gradle-language-server/src/main/java/com/microsoft/gradle/GradleServices.java +++ b/gradle-language-server/src/main/java/com/microsoft/gradle/GradleServices.java @@ -80,7 +80,8 @@ public class GradleServices implements TextDocumentService, WorkspaceService, LanguageClientAware { public static final List supportedCommands = Arrays.asList("gradle.getDependencies", - "gradle.distributionChanged", "gradle.setPlugins", "gradle.setClosures", "gradle.setScriptClasspaths"); + "gradle.distributionChanged", "gradle.setPlugins", "gradle.setClosures", "gradle.setScriptClasspaths", + "gradle.recompile"); private LanguageClient client; private GradleFilesManager gradleFilesManager; @@ -376,6 +377,7 @@ public CompletableFuture executeCommand(ExecuteCommandParams params) { String projectPath = new Gson().fromJson((JsonElement) arguments.get(0), String.class); String[] scriptClasspaths = new Gson().fromJson((JsonElement) arguments.get(1), String[].class); this.gradleFilesManager.setScriptClasspaths(projectPath, Arrays.asList(scriptClasspaths)); + } else if (command.equals("gradle.recompile")) { this.recompileAll(); } return CompletableFuture.completedFuture(null); From 08ae70b203c91d5d371cec935f13fbf452af7c97 Mon Sep 17 00:00:00 2001 From: wenyutang-ms Date: Fri, 3 Apr 2026 15:40:27 +0800 Subject: [PATCH 2/3] perf: update --- extension/src/languageServer/languageServer.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/extension/src/languageServer/languageServer.ts b/extension/src/languageServer/languageServer.ts index 748c45ffe..384ee5035 100644 --- a/extension/src/languageServer/languageServer.ts +++ b/extension/src/languageServer/languageServer.ts @@ -128,9 +128,7 @@ async function syncSingleProject(project: GradleProject): Promise { async function syncProject(project: GradleProject): Promise { await syncSingleProject(project); - for (const subProject of project.getProjectsList()) { - await syncProject(subProject); - } + await Promise.all(project.getProjectsList().map((subProject) => syncProject(subProject))); } export async function syncGradleBuild(gradleBuild: GradleBuild): Promise { From 7c5e557f775dc2b5d23c0920e6fcd402715f6def Mon Sep 17 00:00:00 2001 From: wenyutang-ms Date: Fri, 3 Apr 2026 15:58:57 +0800 Subject: [PATCH 3/3] perf: update --- .../src/languageServer/languageServer.ts | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/extension/src/languageServer/languageServer.ts b/extension/src/languageServer/languageServer.ts index 384ee5035..a9077be82 100644 --- a/extension/src/languageServer/languageServer.ts +++ b/extension/src/languageServer/languageServer.ts @@ -96,7 +96,6 @@ function getGradleSettings(): unknown { async function syncSingleProject(project: GradleProject): Promise { if (isLanguageServerStarted) { const projectPath = vscode.Uri.file(project.getProjectpath()).fsPath; - await vscode.commands.executeCommand("gradle.setPlugins", project.getProjectpath(), project.getPluginsList()); const closures = project.getPluginclosuresList().map((value) => { const JSONMethod = value.getMethodsList().map((method) => { return { @@ -117,12 +116,15 @@ async function syncSingleProject(project: GradleProject): Promise { fields: JSONField, }; }); - await vscode.commands.executeCommand("gradle.setClosures", projectPath, closures); - await vscode.commands.executeCommand( - "gradle.setScriptClasspaths", - projectPath, - project.getScriptclasspathsList() - ); + await Promise.all([ + vscode.commands.executeCommand("gradle.setPlugins", project.getProjectpath(), project.getPluginsList()), + vscode.commands.executeCommand("gradle.setClosures", projectPath, closures), + vscode.commands.executeCommand( + "gradle.setScriptClasspaths", + projectPath, + project.getScriptclasspathsList() + ), + ]); } } @@ -159,11 +161,9 @@ async function handleLanguageServerStart( return; } // when language server starts, it knows nothing about the project - // here to asynchronously sync the project content (plugins, closures) with language server - const gradleBuild = await contentProvider.getGradleBuild(rootProject); - if (gradleBuild) { - await syncGradleBuild(gradleBuild); - } + // getGradleBuild internally calls syncGradleBuild to sync plugins, closures + // and classpaths with the language server on first fetch + await contentProvider.getGradleBuild(rootProject); } } }