From 59759962b36dc03e77b894351ed0df301530698a Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Fri, 23 Jul 2021 15:18:28 +0200 Subject: [PATCH 1/2] Add bsp JavaBuildServerForwardStubs --- .../scala/scala/build/bloop/BuildServer.scala | 2 +- .../main/scala/scala/build/bsp/BspImpl.scala | 2 +- .../scala/scala/build/bsp/BspServer.scala | 4 +- .../bsp/JavaBuildServerForwardStubs.scala | 13 ++++++ .../build/bsp/LoggingBuildServerAll.scala | 4 +- .../build/bsp/LoggingJavaBuildServer.scala | 11 +++++ .../scala-cli-core/reflect-config.json | 42 +++++++++++++++++++ .../cli/integration/BspTestDefinitions.scala | 11 ++++- .../scala/cli/integration/TestBspClient.scala | 4 +- 9 files changed, 83 insertions(+), 10 deletions(-) create mode 100644 modules/build/src/main/scala/scala/build/bsp/JavaBuildServerForwardStubs.scala create mode 100644 modules/build/src/main/scala/scala/build/bsp/LoggingJavaBuildServer.scala diff --git a/modules/bloop-rifle/src/main/scala/scala/build/bloop/BuildServer.scala b/modules/bloop-rifle/src/main/scala/scala/build/bloop/BuildServer.scala index e0424debac..ae0eb793f5 100644 --- a/modules/bloop-rifle/src/main/scala/scala/build/bloop/BuildServer.scala +++ b/modules/bloop-rifle/src/main/scala/scala/build/bloop/BuildServer.scala @@ -2,4 +2,4 @@ package scala.build.bloop import ch.epfl.scala.bsp4j -trait BuildServer extends bsp4j.BuildServer with bsp4j.ScalaBuildServer +trait BuildServer extends bsp4j.BuildServer with bsp4j.ScalaBuildServer with bsp4j.JavaBuildServer diff --git a/modules/build/src/main/scala/scala/build/bsp/BspImpl.scala b/modules/build/src/main/scala/scala/build/bsp/BspImpl.scala index 4475746eeb..c19cc41155 100644 --- a/modules/build/src/main/scala/scala/build/bsp/BspImpl.scala +++ b/modules/build/src/main/scala/scala/build/bsp/BspImpl.scala @@ -195,7 +195,7 @@ final class BspImpl( ) actualLocalServer.setProjectName(inputs.workspace, inputs.projectName) - val localServer: b.BuildServer with b.ScalaBuildServer = + val localServer: b.BuildServer with b.ScalaBuildServer with b.JavaBuildServer = if (verbosity >= 3) new LoggingBuildServerAll(actualLocalServer) else diff --git a/modules/build/src/main/scala/scala/build/bsp/BspServer.scala b/modules/build/src/main/scala/scala/build/bsp/BspServer.scala index c0418ba71f..4806aa87da 100644 --- a/modules/build/src/main/scala/scala/build/bsp/BspServer.scala +++ b/modules/build/src/main/scala/scala/build/bsp/BspServer.scala @@ -12,10 +12,10 @@ import scala.build.GeneratedSource import scala.build.Logger class BspServer( - bloopServer: b.BuildServer with b.ScalaBuildServer, + bloopServer: b.BuildServer with b.ScalaBuildServer with b.JavaBuildServer, compile: (() => CompletableFuture[b.CompileResult]) => CompletableFuture[b.CompileResult], logger: Logger -) extends b.BuildServer with b.ScalaBuildServer with BuildServerForwardStubs with ScalaBuildServerForwardStubs with HasGeneratedSources { +) extends b.BuildServer with b.ScalaBuildServer with b.JavaBuildServer with BuildServerForwardStubs with ScalaBuildServerForwardStubs with JavaBuildServerForwardStubs with HasGeneratedSources { import BspServer._ diff --git a/modules/build/src/main/scala/scala/build/bsp/JavaBuildServerForwardStubs.scala b/modules/build/src/main/scala/scala/build/bsp/JavaBuildServerForwardStubs.scala new file mode 100644 index 0000000000..460d5ea465 --- /dev/null +++ b/modules/build/src/main/scala/scala/build/bsp/JavaBuildServerForwardStubs.scala @@ -0,0 +1,13 @@ +package scala.build.bsp + +import ch.epfl.scala.bsp4j.{JavacOptionsParams, JavacOptionsResult} +import ch.epfl.scala.{bsp4j => b} + +import java.util.concurrent.CompletableFuture + +trait JavaBuildServerForwardStubs extends b.JavaBuildServer { + protected def forwardTo: b.JavaBuildServer + + override def buildTargetJavacOptions(params: JavacOptionsParams): CompletableFuture[JavacOptionsResult] = + forwardTo.buildTargetJavacOptions(params) +} diff --git a/modules/build/src/main/scala/scala/build/bsp/LoggingBuildServerAll.scala b/modules/build/src/main/scala/scala/build/bsp/LoggingBuildServerAll.scala index a23f774244..3c9d1e9dbc 100644 --- a/modules/build/src/main/scala/scala/build/bsp/LoggingBuildServerAll.scala +++ b/modules/build/src/main/scala/scala/build/bsp/LoggingBuildServerAll.scala @@ -2,5 +2,5 @@ package scala.build.bsp import ch.epfl.scala.{bsp4j => b} -class LoggingBuildServerAll(val underlying: b.BuildServer with b.ScalaBuildServer) - extends LoggingBuildServer with LoggingScalaBuildServer +class LoggingBuildServerAll(val underlying: b.BuildServer with b.ScalaBuildServer with b.JavaBuildServer) + extends LoggingBuildServer with LoggingScalaBuildServer with LoggingJavaBuildServer diff --git a/modules/build/src/main/scala/scala/build/bsp/LoggingJavaBuildServer.scala b/modules/build/src/main/scala/scala/build/bsp/LoggingJavaBuildServer.scala new file mode 100644 index 0000000000..fe0496d18f --- /dev/null +++ b/modules/build/src/main/scala/scala/build/bsp/LoggingJavaBuildServer.scala @@ -0,0 +1,11 @@ +package scala.build.bsp + +import ch.epfl.scala.{bsp4j => b} + +import java.util.concurrent.CompletableFuture + +trait LoggingJavaBuildServer extends b.JavaBuildServer { + protected def underlying: b.JavaBuildServer + override def buildTargetJavacOptions(params: b.JavacOptionsParams): CompletableFuture[b.JavacOptionsResult] = + underlying.buildTargetJavacOptions(pprint.better.log(params)).logF +} diff --git a/modules/cli-core/src/main/resources/META-INF/native-image/org.scala-lang/scala-cli-core/reflect-config.json b/modules/cli-core/src/main/resources/META-INF/native-image/org.scala-lang/scala-cli-core/reflect-config.json index 5484eed32b..c25e7a5ba3 100644 --- a/modules/cli-core/src/main/resources/META-INF/native-image/org.scala-lang/scala-cli-core/reflect-config.json +++ b/modules/cli-core/src/main/resources/META-INF/native-image/org.scala-lang/scala-cli-core/reflect-config.json @@ -237,6 +237,34 @@ "allDeclaredMethods": true, "allDeclaredFields": true }, + { + "name": "ch.epfl.scala.bsp4j.JavaBuildServer", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allDeclaredFields": true + }, + { + "name": "ch.epfl.scala.bsp4j.JavacOptionsItem", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allDeclaredFields": true + }, + { + "name": "ch.epfl.scala.bsp4j.JavacOptionsParams", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allDeclaredFields": true + }, + { + "name": "ch.epfl.scala.bsp4j.JavacOptionsResult", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allDeclaredFields": true + }, { "name": "ch.epfl.scala.bsp4j.JvmBuildServer", "allDeclaredConstructors": true, @@ -717,6 +745,13 @@ "allDeclaredMethods": true, "allDeclaredFields": true }, + { + "name": "scala.build.bsp.JavaBuildServerForwardStubs", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allDeclaredFields": true + }, { "name": "scala.build.bsp.LoggingBuildClient", "allDeclaredConstructors": true, @@ -745,6 +780,13 @@ "allDeclaredMethods": true, "allDeclaredFields": true }, + { + "name": "scala.build.bsp.LoggingJavaBuildServer", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allDeclaredFields": true + }, { "name": "scala.build.bsp.ScalaBuildServerForwardStubs", "allDeclaredConstructors": true, diff --git a/modules/integration-core/src/test/scala/scala/cli/integration/BspTestDefinitions.scala b/modules/integration-core/src/test/scala/scala/cli/integration/BspTestDefinitions.scala index 8e07c0a92c..0ea4b331d4 100644 --- a/modules/integration-core/src/test/scala/scala/cli/integration/BspTestDefinitions.scala +++ b/modules/integration-core/src/test/scala/scala/cli/integration/BspTestDefinitions.scala @@ -55,11 +55,11 @@ abstract class BspTestDefinitions(val scalaVersionOpt: Option[String]) extends m pool.shutdown() } - def withBsp[T](root: os.Path, args: Seq[String])(f: (TestBspClient, b.BuildServer with b.ScalaBuildServer) => Future[T]): T = { + def withBsp[T](root: os.Path, args: Seq[String])(f: (TestBspClient, b.BuildServer with b.ScalaBuildServer with b.JavaBuildServer) => Future[T]): T = { // Having issues with local sockets during the tests, never got those outside of tests… val proc = os.proc(TestUtil.cli, "bsp", "--bloop-bsp-protocol", "tcp", extraOptions, args).spawn(cwd = root) - var remoteServer: b.BuildServer with b.ScalaBuildServer = null + var remoteServer: b.BuildServer with b.ScalaBuildServer with b.JavaBuildServer = null try { val (localClient, remoteServer0, shutdownFuture) = TestBspClient.connect(proc.stdout, proc.stdin, pool) @@ -179,6 +179,13 @@ abstract class BspTestDefinitions(val scalaVersionOpt: Option[String]) extends m resp } + val javacOptionsResp = { + val resp = await(remoteServer.buildTargetJavacOptions(new b.JavacOptionsParams(targets)).asScala) + val foundTargets = resp.getItems.asScala.map(_.getTarget.getUri).map(TestUtil.normalizeUri) + expect(foundTargets == Seq(targetUri)) + resp + } + val classDir = os.Path(Paths.get(new URI(scalacOptionsResp.getItems.asScala.head.getClassDirectory))) val compileResp = { diff --git a/modules/integration-core/src/test/scala/scala/cli/integration/TestBspClient.scala b/modules/integration-core/src/test/scala/scala/cli/integration/TestBspClient.scala index 3c9d8d9414..1698ee5533 100644 --- a/modules/integration-core/src/test/scala/scala/cli/integration/TestBspClient.scala +++ b/modules/integration-core/src/test/scala/scala/cli/integration/TestBspClient.scala @@ -66,13 +66,13 @@ class TestBspClient extends b.BuildClient { object TestBspClient { - private trait BuildServer extends b.BuildServer with b.ScalaBuildServer + private trait BuildServer extends b.BuildServer with b.ScalaBuildServer with b.JavaBuildServer def connect( in: InputStream, out: OutputStream, es: ExecutorService - ): (TestBspClient, b.BuildServer with b.ScalaBuildServer, Future[Unit]) = { + ): (TestBspClient, b.BuildServer with b.ScalaBuildServer with b.JavaBuildServer, Future[Unit]) = { val localClient = new TestBspClient From 19f70a22e8fee11bd4fee321cd699f2fddc1433f Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Mon, 26 Jul 2021 11:37:42 +0200 Subject: [PATCH 2/2] Use Bloop nightly config To get the buildTarget/javacOptions endpoint: https://github.com/scalacenter/bloop/pull/1397 --- modules/build/src/test/scala/scala/build/tests/BuildTests.scala | 2 -- project/deps.sc | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/build/src/test/scala/scala/build/tests/BuildTests.scala b/modules/build/src/test/scala/scala/build/tests/BuildTests.scala index 680bb46937..0939795f23 100644 --- a/modules/build/src/test/scala/scala/build/tests/BuildTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/BuildTests.scala @@ -252,7 +252,6 @@ class BuildTests extends munit.FunSuite { val end = new bsp4j.Position(2, 2) val range = new bsp4j.Range(start, end) val d = new bsp4j.Diagnostic(range, "not found: value zz") - d.setCode("zz") d.setSource("bloop") d.setSeverity(bsp4j.DiagnosticSeverity.ERROR) d @@ -282,7 +281,6 @@ class BuildTests extends munit.FunSuite { val end = new bsp4j.Position(2, 0) // would have expected (2, 2) here :| val range = new bsp4j.Range(start, end) val d = new bsp4j.Diagnostic(range, "Not found: zz") - d.setCode("zz") d.setSource("bloop") d.setSeverity(bsp4j.DiagnosticSeverity.ERROR) d diff --git a/project/deps.sc b/project/deps.sc index 8a7fefdd51..f441eb3899 100644 --- a/project/deps.sc +++ b/project/deps.sc @@ -23,7 +23,7 @@ object Deps { } def ammonite = ivy"com.lihaoyi:::ammonite:2.4.0-5-534c9436" def asm = ivy"org.ow2.asm:asm:9.1" - def bloopConfig = ivy"ch.epfl.scala::bloop-config:1.4.8" + def bloopConfig = ivy"ch.epfl.scala::bloop-config:1.4.8-83-27d9d739" def bsp4j = ivy"ch.epfl.scala:bsp4j:2.0.0-M13" def caseApp = ivy"com.github.alexarchambault::case-app:2.1.0-M4" def coursierJvm = ivy"io.get-coursier::coursier-jvm:${Versions.coursier}"