Skip to content

Commit fcbfa20

Browse files
committed
Change HasGeneratedSources to ManagesBuildTargets
Use ProjectName class instead of plain String
1 parent fd5764d commit fcbfa20

17 files changed

+319
-350
lines changed

modules/build/src/main/scala/scala/build/Bloop.scala

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ import java.io.{File, IOException}
1111

1212
import scala.annotation.tailrec
1313
import scala.build.EitherCps.{either, value}
14+
import scala.build.bsp.buildtargets.ProjectName
1415
import scala.build.errors.{BuildException, ModuleFormatError}
15-
import scala.build.internal.CsLoggerUtil._
16+
import scala.build.internal.CsLoggerUtil.*
1617
import scala.concurrent.duration.FiniteDuration
17-
import scala.jdk.CollectionConverters._
18+
import scala.jdk.CollectionConverters.*
1819

1920
object Bloop {
2021

@@ -30,7 +31,7 @@ object Bloop {
3031
}
3132

3233
def compile(
33-
projectName: String,
34+
projectName: ProjectName,
3435
buildServer: BuildServer,
3536
logger: Logger,
3637
buildTargetsTimeout: FiniteDuration
@@ -39,16 +40,16 @@ object Bloop {
3940
logger.debug("Listing BSP build targets")
4041
val results = buildServer.workspaceBuildTargets()
4142
.get(buildTargetsTimeout.length, buildTargetsTimeout.unit)
42-
val buildTargetOpt = results.getTargets.asScala.find(_.getDisplayName == projectName)
43+
val buildTargetOpt = results.getTargets.asScala.find(_.getDisplayName == projectName.name)
4344

4445
val buildTarget = buildTargetOpt.getOrElse {
4546
throw new Exception(
46-
s"Expected to find project '$projectName' in build targets (only got ${results.getTargets
47+
s"Expected to find project '${projectName.name}' in build targets (only got ${results.getTargets
4748
.asScala.map("'" + _.getDisplayName + "'").mkString(", ")})"
4849
)
4950
}
5051

51-
logger.debug(s"Compiling $projectName with Bloop")
52+
logger.debug(s"Compiling ${projectName.name} with Bloop")
5253
val compileRes = buildServer.buildTargetCompile(
5354
new bsp4j.CompileParams(List(buildTarget.getId).asJava)
5455
).get()

modules/build/src/main/scala/scala/build/BloopBuildClient.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ package scala.build
22

33
import ch.epfl.scala.bsp4j
44

5+
import scala.build.bsp.buildtargets.ProjectName
56
import scala.build.options.Scope
67

78
trait BloopBuildClient extends bsp4j.BuildClient {
89
def setProjectParams(newParams: Seq[String]): Unit
9-
def setGeneratedSources(scope: Scope, newGeneratedSources: Seq[GeneratedSource]): Unit
10+
def setGeneratedSources(projectName: ProjectName, newGeneratedSources: Seq[GeneratedSource]): Unit
1011
def diagnostics: Option[Seq[(Either[String, os.Path], bsp4j.Diagnostic)]]
1112
def clear(): Unit
1213
}

modules/build/src/main/scala/scala/build/Build.scala

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import java.util.concurrent.{ScheduledExecutorService, ScheduledFuture}
1212
import scala.annotation.tailrec
1313
import scala.build.EitherCps.{either, value}
1414
import scala.build.Ops.*
15+
import scala.build.bsp.buildtargets.ProjectName
1516
import scala.build.compiler.{ScalaCompiler, ScalaCompilerMaker}
1617
import scala.build.errors.*
1718
import scala.build.input.VirtualScript.VirtualScriptNameRegex
@@ -482,19 +483,24 @@ object Build {
482483
}
483484
}
484485

485-
def projectRootDir(root: os.Path, projectName: String): os.Path =
486-
root / Constants.workspaceDirName / projectName
487-
def classesRootDir(root: os.Path, projectName: String): os.Path =
486+
def projectRootDir(root: os.Path, projectName: ProjectName): os.Path =
487+
root / Constants.workspaceDirName / projectName.name
488+
def classesRootDir(root: os.Path, projectName: ProjectName): os.Path =
488489
projectRootDir(root, projectName) / "classes"
489-
def classesDir(root: os.Path, projectName: String, scope: Scope, suffix: String = ""): os.Path =
490+
def classesDir(
491+
root: os.Path,
492+
projectName: ProjectName,
493+
scope: Scope,
494+
suffix: String = ""
495+
): os.Path =
490496
classesRootDir(root, projectName) / s"${scope.name}$suffix"
491497

492498
def resourcesRegistry(
493499
root: os.Path,
494-
projectName: String,
500+
projectName: ProjectName,
495501
scope: Scope
496502
): os.Path =
497-
root / Constants.workspaceDirName / projectName / s"resources-${scope.name}"
503+
root / Constants.workspaceDirName / projectName.name / s"resources-${scope.name}"
498504

499505
def scalaNativeSupported(
500506
options: BuildOptions,
@@ -1133,7 +1139,7 @@ object Build {
11331139
}
11341140

11351141
buildClient.clear()
1136-
buildClient.setGeneratedSources(scope, generatedSources)
1142+
buildClient.setGeneratedSources(inputs.scopeProjectName(scope), generatedSources)
11371143

11381144
val partial = partialOpt.getOrElse {
11391145
options.notForBloopOptions.packageOptions.packageTypeOpt.exists(_.sourceBased)
@@ -1280,7 +1286,7 @@ object Build {
12801286
buildTests: Boolean,
12811287
actionableDiagnostics: Option[Boolean]
12821288
)(using ScalaCliInvokeData): Either[BuildException, Option[Build]] = either {
1283-
val jmhProjectName = inputs.projectName + "_jmh"
1289+
val jmhProjectName = inputs.projectName.name + "_jmh"
12841290
val jmhOutputDir = inputs.workspace / Constants.workspaceDirName / jmhProjectName
12851291
os.remove.all(jmhOutputDir)
12861292
val jmhSourceDir = jmhOutputDir / "sources"

modules/build/src/main/scala/scala/build/ConsoleBloopBuildClient.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import java.io.File
66
import java.net.URI
77
import java.nio.file.Paths
88

9+
import scala.build.bsp.buildtargets.ProjectName
910
import scala.build.errors.Severity
1011
import scala.build.internal.WrapperParams
1112
import scala.build.internals.ConsoleUtils.ScalaCliConsole
@@ -17,7 +18,7 @@ import scala.jdk.CollectionConverters.*
1718
class ConsoleBloopBuildClient(
1819
logger: Logger,
1920
keepDiagnostics: Boolean = false,
20-
generatedSources: mutable.Map[Scope, Seq[GeneratedSource]] = mutable.Map()
21+
generatedSources: mutable.Map[ProjectName, Seq[GeneratedSource]] = mutable.Map()
2122
) extends BloopBuildClient {
2223
import ConsoleBloopBuildClient._
2324
private var projectParams = Seq.empty[String]
@@ -32,8 +33,8 @@ class ConsoleBloopBuildClient(
3233

3334
private val diagnostics0 = new mutable.ListBuffer[(Either[String, os.Path], bsp4j.Diagnostic)]
3435

35-
def setGeneratedSources(scope: Scope, newGeneratedSources: Seq[GeneratedSource]) =
36-
generatedSources(scope) = newGeneratedSources
36+
def setGeneratedSources(projectName: ProjectName, newGeneratedSources: Seq[GeneratedSource]) =
37+
generatedSources(projectName) = newGeneratedSources
3738
def setProjectParams(newParams: Seq[String]): Unit = {
3839
projectParams = newParams
3940
}

modules/build/src/main/scala/scala/build/Project.scala

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
package scala.build
22

3-
import _root_.bloop.config.{Config => BloopConfig, ConfigCodecs => BloopCodecs}
4-
import _root_.coursier.{Dependency => CsDependency, core => csCore, util => csUtil}
5-
import com.github.plokhotnyuk.jsoniter_scala.core.{writeToArray => writeAsJsonToArray}
3+
import _root_.bloop.config.{Config as BloopConfig, ConfigCodecs as BloopCodecs}
4+
import _root_.coursier.{Dependency as CsDependency, core as csCore, util as csUtil}
5+
import com.github.plokhotnyuk.jsoniter_scala.core.writeToArray as writeAsJsonToArray
66
import coursier.core.Classifier
77

88
import java.io.ByteArrayOutputStream
99
import java.nio.charset.StandardCharsets
1010
import java.nio.file.Path
1111
import java.util.Arrays
1212

13+
import scala.build.bsp.buildtargets.ProjectName
1314
import scala.build.options.{ScalacOpt, Scope, ShadowingSeq}
1415

1516
final case class Project(
@@ -21,7 +22,7 @@ final case class Project(
2122
scalaCompiler: Option[ScalaCompilerParams],
2223
scalaJsOptions: Option[BloopConfig.JsConfig],
2324
scalaNativeOptions: Option[BloopConfig.NativeConfig],
24-
projectName: String,
25+
projectName: ProjectName,
2526
classPath: Seq[os.Path],
2627
sources: Seq[os.Path],
2728
resolution: Option[BloopConfig.Resolution],
@@ -53,7 +54,7 @@ final case class Project(
5354
baseBloopProject(
5455
projectName,
5556
directory.toNIO,
56-
(directory / ".bloop" / projectName).toNIO,
57+
(directory / ".bloop" / projectName.name).toNIO,
5758
classesDir.toNIO,
5859
scope
5960
)
@@ -117,7 +118,7 @@ final case class Project(
117118
def writeBloopFile(strictCheck: Boolean, logger: Logger): Boolean = {
118119
lazy val bloopFileContent =
119120
writeAsJsonToArray(bloopFile)(BloopCodecs.codecFile)
120-
val dest = directory / ".bloop" / s"$projectName.json"
121+
val dest = directory / ".bloop" / s"${projectName.name}.json"
121122
val doWrite =
122123
if (strictCheck)
123124
!os.isFile(dest) || {
@@ -176,14 +177,14 @@ object Project {
176177
)
177178

178179
private def baseBloopProject(
179-
name: String,
180+
projectName: ProjectName,
180181
directory: Path,
181182
out: Path,
182183
classesDir: Path,
183184
scope: Scope
184185
): BloopConfig.Project = {
185186
val project = BloopConfig.Project(
186-
name = name,
187+
name = projectName.name,
187188
directory = directory,
188189
workspaceDir = None,
189190
sources = Nil,

modules/build/src/main/scala/scala/build/bsp/BloopSession.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ final class BloopSession(
1515
val bspServer: BspServer,
1616
val watcher: Build.Watcher
1717
) {
18+
// TODO this resets diagnostics using paths that do not belong to the build targets
1819
def resetDiagnostics(localClient: BspClient): Unit =
1920
for (targetId <- bspServer.targetIds)
2021
inputs.flattened().foreach {

modules/build/src/main/scala/scala/build/bsp/BspClient.scala

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import java.nio.file.Paths
1010
import java.util.concurrent.{ConcurrentHashMap, ExecutorService}
1111

1212
import scala.build.Position.File
13+
import scala.build.bsp.buildtargets.{ManagesBuildTargets, ManagesBuildTargetsImpl}
1314
import scala.build.bsp.protocol.TextEdit
1415
import scala.build.errors.{BuildException, CompositeBuildException, Diagnostic, Severity}
1516
import scala.build.internal.util.WarningMessages
@@ -21,7 +22,7 @@ class BspClient(
2122
@volatile var logger: Logger,
2223
var forwardToOpt: Option[b.BuildClient] = None
2324
) extends b.BuildClient with BuildClientForwardStubs with BloopBuildClient
24-
with HasGeneratedSourcesImpl {
25+
with ManagesBuildTargetsImpl {
2526

2627
private def updatedPublishDiagnosticsParams(
2728
params: b.PublishDiagnosticsParams,
@@ -98,9 +99,10 @@ class BspClient(
9899
}
99100

100101
private def actualBuildPublishDiagnostics(params: b.PublishDiagnosticsParams): Unit = {
101-
val updatedParamsOpt = targetScopeOpt(params.getBuildTarget).flatMap { scope =>
102-
generatedSources.getOrElse(scope, HasGeneratedSources.GeneratedSources(Nil))
103-
.uriMap
102+
val updatedParamsOpt = targetProjectNameOpt(params.getBuildTarget).flatMap { projectName =>
103+
val uriMap = managedTargets(projectName).uriMap
104+
105+
uriMap
104106
.get(params.getTextDocument.getUri)
105107
.map { genSource =>
106108
updatedPublishDiagnosticsParams(params, genSource)

0 commit comments

Comments
 (0)