Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 14 additions & 15 deletions extension/src/languageServer/languageServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@ function getGradleSettings(): unknown {
async function syncSingleProject(project: GradleProject): Promise<void> {
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 {
Expand All @@ -117,27 +116,29 @@ async function syncSingleProject(project: GradleProject): Promise<void> {
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()
),
]);
}
}

async function syncProject(project: GradleProject): Promise<void> {
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<void> {
const rootProject = gradleBuild.getProject();
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);
Expand All @@ -160,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);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,8 @@
public class GradleServices implements TextDocumentService, WorkspaceService, LanguageClientAware {

public static final List<String> 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;
Expand Down Expand Up @@ -376,6 +377,7 @@ public CompletableFuture<Object> 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);
Expand Down
Loading