diff options
author | Jakob Odersky <jakob@odersky.com> | 2017-07-02 17:09:29 -0700 |
---|---|---|
committer | Jakob Odersky <jakob@odersky.com> | 2017-07-02 17:09:29 -0700 |
commit | 1b6557a2972a866aa616af43598caa63564c8ed5 (patch) | |
tree | b0480f8713b33f64d4a85305ada594020081e7d0 /stage2/plugins/Ensime.scala | |
parent | a6eafa3e926bb52ac718f66e7ad35867327fcb83 (diff) | |
download | cbt-1b6557a2972a866aa616af43598caa63564c8ed5.tar.gz cbt-1b6557a2972a866aa616af43598caa63564c8ed5.tar.bz2 cbt-1b6557a2972a866aa616af43598caa63564c8ed5.zip |
Add support for sub-projects
Diffstat (limited to 'stage2/plugins/Ensime.scala')
-rw-r--r-- | stage2/plugins/Ensime.scala | 41 |
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, |