summaryrefslogtreecommitdiff
path: root/contrib/bsp/src
diff options
context:
space:
mode:
authorAlexandra Dima <alexandra.dima@jetbrains.com>2019-07-19 16:33:43 +0200
committerSamvel Abrahamyan <samvel1024@gmail.com>2019-10-12 14:33:06 +0200
commit2e37532d915d54f61bc645faa6b0c73f29c5d9ea (patch)
treea067452b2c4ebbe19d2318801f5b0435dab0394b /contrib/bsp/src
parent90cc85577949416f5a367f86ba040a293915cb31 (diff)
downloadmill-2e37532d915d54f61bc645faa6b0c73f29c5d9ea.tar.gz
mill-2e37532d915d54f61bc645faa6b0c73f29c5d9ea.tar.bz2
mill-2e37532d915d54f61bc645faa6b0c73f29c5d9ea.zip
Added a root target for the mill base module of each project so that intellij can display the project correctly.
Diffstat (limited to 'contrib/bsp/src')
-rw-r--r--contrib/bsp/src/mill/contrib/bsp/MillBuildServer.scala14
-rw-r--r--contrib/bsp/src/mill/contrib/bsp/ModuleUtils.scala56
2 files changed, 59 insertions, 11 deletions
diff --git a/contrib/bsp/src/mill/contrib/bsp/MillBuildServer.scala b/contrib/bsp/src/mill/contrib/bsp/MillBuildServer.scala
index 7684ba31..2c25a9fc 100644
--- a/contrib/bsp/src/mill/contrib/bsp/MillBuildServer.scala
+++ b/contrib/bsp/src/mill/contrib/bsp/MillBuildServer.scala
@@ -48,7 +48,10 @@ class MillBuildServer(evaluator: Evaluator,
var millEvaluator: Evaluator = evaluator
var millModules: Seq[JavaModule] = getMillModules(millEvaluator)
var client: BuildClient = _
- var moduleToTargetId: Predef.Map[JavaModule, BuildTargetIdentifier] = ModuleUtils.getModuleTargetIdMap(millModules)
+ var moduleToTargetId: Predef.Map[JavaModule, BuildTargetIdentifier] = ModuleUtils.getModuleTargetIdMap(
+ millModules,
+ evaluator
+ )
var targetIdToModule: Predef.Map[BuildTargetIdentifier, JavaModule] = targetToModule(moduleToTargetId)
var moduleToTarget: Predef.Map[JavaModule, BuildTarget] =
ModuleUtils.millModulesToBspTargets(millModules, evaluator, List("scala", "java"))
@@ -97,7 +100,8 @@ class MillBuildServer(evaluator: Evaluator,
override def workspaceBuildTargets(): CompletableFuture[WorkspaceBuildTargetsResult] = {
recomputeTargets()
handleExceptions[String, WorkspaceBuildTargetsResult](
- (in) => new WorkspaceBuildTargetsResult(moduleToTarget.values.toList.asJava), "")
+ (in) => new WorkspaceBuildTargetsResult(moduleToTarget.values.toList.asJava),
+ "")
}
private[this] def getSourceFiles(sources: Seq[os.Path]): Iterable[os.Path] = {
@@ -114,7 +118,7 @@ class MillBuildServer(evaluator: Evaluator,
files
}
- //TODO: use mill's sources, same for resources
+
override def buildTargetSources(sourcesParams: SourcesParams): CompletableFuture[SourcesResult] = {
def computeSourcesResult: SourcesResult = {
@@ -403,7 +407,7 @@ class MillBuildServer(evaluator: Evaluator,
var cleaned = true
for (targetId <- cleanCacheParams.getTargets.asScala) {
val module = targetIdToModule(targetId)
- val process = Runtime.getRuntime.exec(s"mill clean ${module.millModuleSegments.parts.mkString(".")}.compile")
+ val process = Runtime.getRuntime.exec(s"mill clean ${ModuleUtils.moduleName(module.millModuleSegments)}.compile")
val processIn = process.getInputStream
val processErr = process.getErrorStream
@@ -527,7 +531,7 @@ class MillBuildServer(evaluator: Evaluator,
private[this] def recomputeTargets(): Unit = {
millModules = getMillModules(millEvaluator)
- moduleToTargetId = ModuleUtils.getModuleTargetIdMap(millModules)
+ moduleToTargetId = ModuleUtils.getModuleTargetIdMap(millModules, millEvaluator)
targetIdToModule = targetToModule(moduleToTargetId)
moduleToTarget = ModuleUtils.millModulesToBspTargets(millModules, evaluator, List("scala", "java"))
}
diff --git a/contrib/bsp/src/mill/contrib/bsp/ModuleUtils.scala b/contrib/bsp/src/mill/contrib/bsp/ModuleUtils.scala
index 1d707350..d0db5fd0 100644
--- a/contrib/bsp/src/mill/contrib/bsp/ModuleUtils.scala
+++ b/contrib/bsp/src/mill/contrib/bsp/ModuleUtils.scala
@@ -1,12 +1,14 @@
package mill.contrib.bsp
+import java.net.URI
import java.util.Collections
import scala.collection.JavaConverters._
import ch.epfl.scala.bsp4j._
+import mill.T
import mill.api.Result.Success
import mill.api.{Loose, Strict}
-import mill.define.{Discover, Segment, Segments, Task}
+import mill.define.{BaseModule, Ctx, Discover, Module, Segment, Segments, Sources, Target, Task}
import mill.eval._
import mill.eval.Evaluator
import mill.scalajslib.ScalaJSModule
@@ -14,6 +16,7 @@ import mill.scalalib.api.Util
import mill.scalanativelib._
import mill.scalalib.{GenIdea, GenIdeaImpl, JavaModule, ScalaModule, TestModule}
import mill.util.DummyLogger
+import os.Path
object ModuleUtils {
@@ -31,8 +34,11 @@ object ModuleUtils {
evaluator: Evaluator,
supportedLanguages: List[String]): Predef.Map[JavaModule, BuildTarget] = {
- val moduleIdMap = getModuleTargetIdMap(modules)
- var moduleToTarget = Predef.Map[JavaModule, BuildTarget]()
+ val moduleIdMap = getModuleTargetIdMap(modules, evaluator)
+ val rootModule = getRootJavaModule(evaluator.rootModule)
+ var moduleToTarget = Predef.Map[JavaModule, BuildTarget](
+ rootModule -> getRootTarget(rootModule, evaluator)
+ )
for ( module <- modules ) {
val dataBuildTarget = computeScalaBuildTarget(module, evaluator)
@@ -57,12 +63,47 @@ object ModuleUtils {
buildTarget.setData(dataBuildTarget)
buildTarget.setDisplayName(moduleName(module.millModuleSegments))
buildTarget.setBaseDirectory(module.intellijModulePath.toNIO.toAbsolutePath.toUri.toString)
- moduleToTarget ++= Map(module -> buildTarget)
+
+ if (!moduleToTarget.contains(module)) moduleToTarget ++= Map(module -> buildTarget)
}
moduleToTarget
}
+ def getRootJavaModule(rootBaseModule: BaseModule): JavaModule = {
+ implicit val ctx: Ctx = rootBaseModule.millOuterCtx
+ new JavaModule {
+
+ override def millSourcePath: Path = rootBaseModule.millSourcePath
+ override def sources = T.sources{millSourcePath / "src"}
+
+ def out = T.sources{millSourcePath / "out"}
+ def target = T.sources{millSourcePath / "target"}
+ //override def sources: Sources = T.sources{millSourcePath}
+ override def generatedSources: Target[Seq[PathRef]] = T.sources{
+ out() ++ target()}
+ }
+ }
+
+ def getRootTarget(rootModule: JavaModule, evaluator: Evaluator): BuildTarget = {
+
+ val rootTarget = new BuildTarget(
+ new BuildTargetIdentifier(rootModule.millSourcePath.toNIO.toAbsolutePath.toUri.toString),
+ List.empty[String].asJava,
+ List.empty[String].asJava,
+ List.empty[BuildTargetIdentifier].asJava,
+ new BuildTargetCapabilities(false, false, false))
+ rootTarget.setBaseDirectory(rootModule.millSourcePath.toNIO.toAbsolutePath.toUri.toString)
+ rootTarget.setDataKind("scala")
+ rootTarget.setTags(List(BuildTargetTag.LIBRARY, BuildTargetTag.APPLICATION).asJava)
+ rootTarget.setData(computeScalaBuildTarget(rootModule, evaluator))
+ val basePath = rootModule.millSourcePath.toIO.toPath
+ if (basePath.getNameCount >= 1)
+ rootTarget.setDisplayName(basePath.getName(basePath.getNameCount - 1) + "-root")
+ else rootTarget.setDisplayName("root")
+ rootTarget
+ }
+
def getModuleCapabilities(module: JavaModule, evaluator: Evaluator): BuildTargetCapabilities = {
val canTest = module match {
case module: TestModule => true
@@ -126,8 +167,11 @@ object ModuleUtils {
}
}
- def getModuleTargetIdMap(modules: Seq[JavaModule]): Predef.Map[JavaModule, BuildTargetIdentifier] = {
- var moduleToTarget = Map[JavaModule, BuildTargetIdentifier]()
+ def getModuleTargetIdMap(modules: Seq[JavaModule], evaluator:Evaluator): Predef.Map[JavaModule, BuildTargetIdentifier] = {
+ var moduleToTarget = Map[JavaModule, BuildTargetIdentifier](
+ getRootJavaModule(evaluator.rootModule) -> new BuildTargetIdentifier(evaluator.rootModule.millSourcePath.
+ toNIO.toAbsolutePath.toUri.toString)
+ )
for ( module <- modules ) {
moduleToTarget ++= Map(module -> new BuildTargetIdentifier(