aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jakob@odersky.com>2017-07-02 17:09:29 -0700
committerJakob Odersky <jakob@odersky.com>2017-07-02 17:09:29 -0700
commit1b6557a2972a866aa616af43598caa63564c8ed5 (patch)
treeb0480f8713b33f64d4a85305ada594020081e7d0
parenta6eafa3e926bb52ac718f66e7ad35867327fcb83 (diff)
downloadcbt-1b6557a2972a866aa616af43598caa63564c8ed5.tar.gz
cbt-1b6557a2972a866aa616af43598caa63564c8ed5.tar.bz2
cbt-1b6557a2972a866aa616af43598caa63564c8ed5.zip
Add support for sub-projects
-rw-r--r--stage2/plugins/Ensime.scala41
1 files changed, 26 insertions, 15 deletions
diff --git a/stage2/plugins/Ensime.scala b/stage2/plugins/Ensime.scala
index 6e825ab..46b5775 100644
--- a/stage2/plugins/Ensime.scala
+++ b/stage2/plugins/Ensime.scala
@@ -61,20 +61,7 @@ trait Ensime extends BaseBuild {
scalaVersion = ensimeScalaVersion,
javaSources = jdkSource.toSeq,
javaFlags = ensimeJavaFlags,
- projects = EnsimeProject(
- id = EnsimeProjectId(
- project = name,
- config = "compile"
- ),
- depends = Nil, // currently only one project is supported
- sources = sources.filter(_.isDirectory),
- targets = Seq(compileTarget),
- scalacOptions = scalacOptions.toList,
- javacOptions = Nil,
- libraryJars = transitiveDependencies.flatMap(_.exportedClasspathArray).toList,
- librarySources = resolveWithClassifier(transitiveDependencies, Classifier.sources),
- libraryDocs = resolveWithClassifier(transitiveDependencies, Classifier.javadoc)
- ) :: Nil
+ projects = findProjects(this)
)
/** Generate an ENSIME configuration file for this build. */
@@ -172,6 +159,30 @@ object Ensime {
}
}
+ /** Find and convert all (transitive) dependencies of a build to a sequence of ENSIME projects. */
+ def findProjects(root: BaseBuild)(implicit logger: Logger, cache: JMap[AnyRef, AnyRef], classLoaderCache: ClassLoaderCache): Seq[EnsimeProject] = {
+ def asProject(base: BaseBuild) = EnsimeProject(
+ id = EnsimeProjectId(
+ project = base.name,
+ config = "compile"
+ ),
+ depends = base.transitiveDependencies.collect{
+ case b: BaseBuild => EnsimeProjectId(b.name, "compile")
+ },
+ sources = base.sources.filter(_.isDirectory),
+ targets = Seq(base.compileTarget),
+ scalacOptions = base.scalacOptions.toList,
+ javacOptions = Nil, // TODO get javac options from base build
+ libraryJars = base.transitiveDependencies.flatMap(_.exportedClasspathArray).toList,
+ librarySources = resolveWithClassifier(base.transitiveDependencies, Classifier.sources),
+ libraryDocs = resolveWithClassifier(base.transitiveDependencies, Classifier.javadoc)
+ )
+
+ Seq(asProject(root)) ++ root.transitiveDependencies.collect{ case b: BaseBuild =>
+ asProject(b)
+ }
+ }
+
final case class EnsimeProjectId(
project: String,
config: String
@@ -279,7 +290,7 @@ object Ensime {
"projects" -> conf.projects,
// subprojects are required for backwards-compatibility with older clients
// (ensime-server does not require them)
- "subprojects" -> List(EnsimeModule.fromProjects(conf.projects))
+ "subprojects" -> conf.projects.groupBy(_.id.project).mapValues(EnsimeModule.fromProjects)//conf.projects.flatMap(proj => EnsimeModule.fromProjects(conf.projects))
))
case module: EnsimeModule => sexp(List(
"name" -> module.name,