Skip to content
This repository has been archived by the owner on Aug 5, 2024. It is now read-only.

Commit

Permalink
[feature] Add "build and get build targets" BSP endpoint for build&re…
Browse files Browse the repository at this point in the history
…sync action

fixup! Keep the behavior of the workspace/buildTargets as it was before
Keep the behavior of the workspace/buildTargets as it was before

[feature] Add "build and get build targets" BSP endpoint for build&resync action


Co-authored-by: Marcin Abramowicz <marcin.abramowicz@jetbrains.com>

Merge-request: BAZEL-MR-960
Merged-by: Tomasz Pasternak <Tomasz.Pasternak@jetbrains.com>
  • Loading branch information
Tomasz Pasternak authored and Space Team committed Mar 25, 2024
1 parent 28797b6 commit 774e427
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 12 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.jetbrains.bsp

import ch.epfl.scala.bsp4j.RunResult
import ch.epfl.scala.bsp4j.WorkspaceBuildTargetsResult
import org.eclipse.lsp4j.jsonrpc.services.JsonRequest
import java.util.concurrent.CompletableFuture

Expand All @@ -22,4 +23,7 @@ public interface BazelBuildServer {

@JsonRequest("buildTarget/jvmBinaryJars")
public fun buildTargetJvmBinaryJars(params: JvmBinaryJarsParams): CompletableFuture<JvmBinaryJarsResult>

@JsonRequest("workspace/buildAndGetBuildTargets")
public fun workspaceBuildAndGetBuildTargets(): CompletableFuture<WorkspaceBuildTargetsResult>
}
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,17 @@ class BspServerApi(private val bazelServicesBuilder: (BuildClient) -> BazelServi
override fun workspaceBuildTargets(): CompletableFuture<WorkspaceBuildTargetsResult> {
return runner.handleRequest("workspaceBuildTargets") { cancelChecker: CancelChecker ->
projectSyncService.workspaceBuildTargets(
cancelChecker
cancelChecker,
build = false
)
}
}

override fun workspaceBuildAndGetBuildTargets(): CompletableFuture<WorkspaceBuildTargetsResult> {
return runner.handleRequest("workspaceBuildAndGetBuildTargets") { cancelChecker: CancelChecker ->
projectSyncService.workspaceBuildTargets(
cancelChecker,
true
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ class ProjectProvider(
private var project: Project? = null

@Synchronized
fun refreshAndGet(cancelChecker: CancelChecker): Project =
loadFromBazel(cancelChecker)
fun refreshAndGet(cancelChecker: CancelChecker, build: Boolean): Project =
loadFromBazel(cancelChecker, build = build)

@Synchronized
fun get(cancelChecker: CancelChecker): Project = project ?: loadFromDisk() ?: loadFromBazel(cancelChecker)
fun get(cancelChecker: CancelChecker): Project = project ?: loadFromDisk() ?: loadFromBazel(cancelChecker, false)

private fun loadFromBazel(cancelChecker: CancelChecker) = projectResolver.resolve(cancelChecker).also {
private fun loadFromBazel(cancelChecker: CancelChecker, build: Boolean) = projectResolver.resolve(cancelChecker, build = build).also {
project = it
storeOnDisk()
System.gc()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class ProjectResolver(
return Measurements.measure(f, description, metricsLogger, bspLogger)
}

fun resolve(cancelChecker: CancelChecker): Project {
fun resolve(cancelChecker: CancelChecker, build: Boolean): Project {

val workspaceContext = measured(
"Reading project view and creating workspace context",
Expand All @@ -55,7 +55,7 @@ class ProjectResolver(

val buildAspectResult = measured(
"Building project with aspect"
) { buildProjectWithAspect(cancelChecker, workspaceContext) }
) { buildProjectWithAspect(cancelChecker, workspaceContext, keepDefaultOutputGroups = build) }
val aspectOutputs = measured(
"Reading aspect output paths"
) { buildAspectResult.bepOutput.filesByOutputGroupNameTransitive(BSP_INFO_OUTPUT_GROUP) }
Expand All @@ -75,13 +75,18 @@ class ProjectResolver(
) { bazelProjectMapper.createProject(targets, rootTargets.toSet(), allTargetNames, workspaceContext, bazelInfo) }
}

private fun buildProjectWithAspect(cancelChecker: CancelChecker, workspaceContext: WorkspaceContext): BazelBspAspectsManagerResult =
bazelBspAspectsManager.fetchFilesFromOutputGroups(
private fun buildProjectWithAspect(cancelChecker: CancelChecker, workspaceContext: WorkspaceContext, keepDefaultOutputGroups: Boolean): BazelBspAspectsManagerResult {
val outputGroups =
listOf(BSP_INFO_OUTPUT_GROUP, ARTIFACTS_OUTPUT_GROUP, RUST_ANALYZER_OUTPUT_GROUP)
.map { if (keepDefaultOutputGroups) "+$it" else it }

return bazelBspAspectsManager.fetchFilesFromOutputGroups(
cancelChecker,
workspaceContext.targets,
ASPECT_NAME,
listOf(BSP_INFO_OUTPUT_GROUP, ARTIFACTS_OUTPUT_GROUP, RUST_ANALYZER_OUTPUT_GROUP)
outputGroups
)
}

private fun formatTargetsIfNeeded(targets: Collection<String>, targetsInfo: Map<String, BspTargetInfo.TargetInfo >): List<String> =
when (bazelInfo.release.major) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ class ProjectSyncService(private val bspMapper: BspProjectMapper, private val pr
// correctly, so I am not changing anything.
fun workspaceReload(cancelChecker: CancelChecker): Any = Any()

fun workspaceBuildTargets(cancelChecker: CancelChecker): WorkspaceBuildTargetsResult {
val project = projectProvider.refreshAndGet(cancelChecker)
fun workspaceBuildTargets(cancelChecker: CancelChecker, build: Boolean): WorkspaceBuildTargetsResult {
val project = projectProvider.refreshAndGet(cancelChecker, build = build)
return bspMapper.workspaceTargets(project)
}

Expand Down

0 comments on commit 774e427

Please sign in to comment.