Skip to content

Commit

Permalink
feature: Add support for buildTarget/jvmCompileClasspath (#542)
Browse files Browse the repository at this point in the history
* feature: Add support for buildTarget/jvmCompileClasspath

Previously, classpath would be obtained via scalacOptions and javacOptions requests, which would cause additional querries even if client was only interested in actual javac/scalac options.

Now, we don't send classpath together with scalac/javac options if the client declares that they will use the new jvmCompileClasspath request, which they should then trigger.

* chore: Update changelog with information about the change
  • Loading branch information
tgodzik committed Mar 27, 2024
1 parent 3629a3f commit cd00ed5
Show file tree
Hide file tree
Showing 8 changed files with 158 additions and 167 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Expand Up @@ -30,6 +30,8 @@
| [6b45eb6](https://github.com/JetBrains/bazel-bsp/commit/6b45eb61fb90c143b845cae69e2f69c6c1b4460d)
- Include libraries defined in `jdeps` files during sync.
| [bb47e49](https://github.com/JetBrains/bazel-bsp/commit/bb47e493fc595ddf21438f454cee7a6cd756fc0b)
- Add support for buildTarget/jvmCompileClasspath
| [f7f2662](https://github.com/JetBrains/bazel-bsp/commit/f7f26623ce3254b2f1ecda95329b665d05862109)

### Fixes 🛠️

Expand Down
4 changes: 2 additions & 2 deletions MODULE.bazel
Expand Up @@ -71,7 +71,7 @@ maven.install(
artifacts = [
"com.google.code.gson:gson:2.10.1",
"com.google.guava:guava:31.0.1-jre",
"ch.epfl.scala:bsp4j:2.2.0-M1",
"ch.epfl.scala:bsp4j:2.2.0-M2",
"commons-io:commons-io:jar:2.15.1",
"commons-cli:commons-cli:jar:1.6.0",
"org.apache.logging.log4j:log4j-api:2.23.1",
Expand Down Expand Up @@ -99,7 +99,7 @@ maven.install(
fetch_sources = True,
lock_file = "//:maven_install.json",
repositories = [
"https://repo.maven.apache.org/maven2",
"https://repo.maven.apache.org/maven2"
],
)
use_repo(
Expand Down
273 changes: 113 additions & 160 deletions MODULE.bazel.lock

Large diffs are not rendered by default.

11 changes: 6 additions & 5 deletions maven_install.json
@@ -1,8 +1,9 @@
{
"__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL",
"__INPUT_ARTIFACTS_HASH": -175229471,
"__RESOLVED_ARTIFACTS_HASH": 1516630770,
"__INPUT_ARTIFACTS_HASH": 1340442464,
"__RESOLVED_ARTIFACTS_HASH": -1828073000,
"conflict_resolution": {
"ch.epfl.scala:bsp4j:2.2.0-M1": "ch.epfl.scala:bsp4j:2.2.0-M2",
"com.google.code.gson:gson:2.8.9": "com.google.code.gson:gson:2.10.1",
"com.google.errorprone:error_prone_annotations:2.3.2": "com.google.errorprone:error_prone_annotations:2.23.0",
"com.google.guava:guava:31.0.1-jre": "com.google.guava:guava:32.1.3-android",
Expand All @@ -15,10 +16,10 @@
"artifacts": {
"ch.epfl.scala:bsp4j": {
"shasums": {
"jar": "b21b471404f989c3351a6cd02160f3f7de7f7b7276ced6d65b192260c6a9ef04",
"sources": "41cddede304e9439d98c193f3882b81b1c50ea77a20531949f79575b63e5401d"
"jar": "cf13ce15161190b2fa88dc646229979d3cfb48407c0ca5f4b866d1c32d9f5c19",
"sources": "4c1108ffcd20efa4f46448fddc29249c1d4400ba4cfbc0f36135404b60269d61"
},
"version": "2.2.0-M1"
"version": "2.2.0-M2"
},
"com.fasterxml.jackson.core:jackson-annotations": {
"shasums": {
Expand Down
Expand Up @@ -24,6 +24,7 @@ public class BazelBuildServerCapabilities(
jvmRunEnvironmentProvider: Boolean = false,
jvmTestEnvironmentProvider: Boolean = false,
canReload: Boolean = false,
jvmCompileClasspathProvider: Boolean = false,
public val workspaceLibrariesProvider: Boolean = false,
public val workspaceDirectoriesProvider: Boolean = false,
public val workspaceInvalidTargetsProvider: Boolean = false,
Expand All @@ -44,5 +45,6 @@ public class BazelBuildServerCapabilities(
this.jvmRunEnvironmentProvider = jvmRunEnvironmentProvider
this.jvmTestEnvironmentProvider = jvmTestEnvironmentProvider
this.canReload = canReload
this.jvmCompileClasspathProvider = jvmCompileClasspathProvider
}
}
Expand Up @@ -23,6 +23,8 @@ import ch.epfl.scala.bsp4j.JavaBuildServer
import ch.epfl.scala.bsp4j.JavacOptionsParams
import ch.epfl.scala.bsp4j.JavacOptionsResult
import ch.epfl.scala.bsp4j.JvmBuildServer
import ch.epfl.scala.bsp4j.JvmCompileClasspathParams
import ch.epfl.scala.bsp4j.JvmCompileClasspathResult
import ch.epfl.scala.bsp4j.JvmRunEnvironmentParams
import ch.epfl.scala.bsp4j.JvmRunEnvironmentResult
import ch.epfl.scala.bsp4j.JvmTestEnvironmentParams
Expand Down Expand Up @@ -362,6 +364,17 @@ class BspServerApi(private val bazelServicesBuilder: (BuildClient) -> BazelServi
)
}

override fun buildTargetJvmCompileClasspath(params: JvmCompileClasspathParams): CompletableFuture<JvmCompileClasspathResult> {
return runner.handleRequest(
"jvmCompileClasspath",
{ cancelChecker: CancelChecker, params: JvmCompileClasspathParams ->
projectSyncService.jvmCompileClasspath(
cancelChecker, params
)
}, params
)
}

override fun buildTargetJvmTestEnvironment(
params: JvmTestEnvironmentParams
): CompletableFuture<JvmTestEnvironmentResult> {
Expand Down
Expand Up @@ -16,6 +16,9 @@ import ch.epfl.scala.bsp4j.InverseSourcesResult
import ch.epfl.scala.bsp4j.JavacOptionsItem
import ch.epfl.scala.bsp4j.JavacOptionsParams
import ch.epfl.scala.bsp4j.JavacOptionsResult
import ch.epfl.scala.bsp4j.JvmCompileClasspathItem
import ch.epfl.scala.bsp4j.JvmCompileClasspathParams
import ch.epfl.scala.bsp4j.JvmCompileClasspathResult
import ch.epfl.scala.bsp4j.JvmEnvironmentItem
import ch.epfl.scala.bsp4j.JvmMainClass
import ch.epfl.scala.bsp4j.JvmRunEnvironmentParams
Expand Down Expand Up @@ -108,6 +111,7 @@ class BspProjectMapper(
workspaceInvalidTargetsProvider = true,
runWithDebugProvider = true,
jvmBinaryJarsProvider = true,
jvmCompileClasspathProvider = true,
)
return InitializeBuildResult(
Constants.NAME, Constants.VERSION, Constants.BSP_VERSION, capabilities
Expand Down Expand Up @@ -304,6 +308,15 @@ class BspProjectMapper(
return JvmTestEnvironmentResult(result)
}

fun jvmCompileClasspath(
project: Project, params: JvmCompileClasspathParams, cancelChecker: CancelChecker
): JvmCompileClasspathResult {
val items = params.targets.collectClasspathForTargetsAndApply(project, cancelChecker) { module, ideClasspath ->
JvmCompileClasspathItem(BspMappings.toBspId(module), ideClasspath.map { it.toString() })
}
return JvmCompileClasspathResult(items)
}

private fun getJvmEnvironmentItems(
project: Project, targets: List<BuildTargetIdentifier>, cancelChecker: CancelChecker
): List<JvmEnvironmentItem> {
Expand Down
Expand Up @@ -11,6 +11,8 @@ import ch.epfl.scala.bsp4j.InverseSourcesParams
import ch.epfl.scala.bsp4j.InverseSourcesResult
import ch.epfl.scala.bsp4j.JavacOptionsParams
import ch.epfl.scala.bsp4j.JavacOptionsResult
import ch.epfl.scala.bsp4j.JvmCompileClasspathParams
import ch.epfl.scala.bsp4j.JvmCompileClasspathResult
import ch.epfl.scala.bsp4j.JvmRunEnvironmentParams
import ch.epfl.scala.bsp4j.JvmRunEnvironmentResult
import ch.epfl.scala.bsp4j.JvmTestEnvironmentParams
Expand Down Expand Up @@ -120,6 +122,11 @@ class ProjectSyncService(private val bspMapper: BspProjectMapper, private val pr
return bspMapper.jvmBinaryJars(project, params)
}

fun jvmCompileClasspath(cancelChecker: CancelChecker, params: JvmCompileClasspathParams): JvmCompileClasspathResult {
val project = projectProvider.get(cancelChecker)
return bspMapper.jvmCompileClasspath(project, params, cancelChecker)
}

fun buildTargetJavacOptions(cancelChecker: CancelChecker, params: JavacOptionsParams): JavacOptionsResult {
val project = projectProvider.get(cancelChecker)
return bspMapper.buildTargetJavacOptions(project, params, cancelChecker)
Expand Down

0 comments on commit cd00ed5

Please sign in to comment.