From 32a86977bbd03137f55981f3ce4ca8e24f239649 Mon Sep 17 00:00:00 2001 From: Vitalii Lysov Date: Wed, 17 Apr 2019 07:49:57 +0200 Subject: contrib BuildInfo plugin: fix generatedSources, it must be a folder (#589) * fix BuildInfo generatedSources, it must be a folder generatedSources must be a folder, but till now it was a reference to a generated file This commit fixes this issue. There are 2 reasons for this fix: (1) Because generatedSources must be folders by the definition: Folders containing source files that are generated (2) If you use intellij IDEA and build your project from the IDE, building module, which includes BuildInfo plugin, fails. * test: make explicit check that generatedSources is a folder * correct T.ctx -> T.ctx() * workaround to get `dest` property of the task into other --- contrib/buildinfo/src/BuildInfo.scala | 36 ++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) (limited to 'contrib/buildinfo/src') diff --git a/contrib/buildinfo/src/BuildInfo.scala b/contrib/buildinfo/src/BuildInfo.scala index fe252b97..0804b9a5 100644 --- a/contrib/buildinfo/src/BuildInfo.scala +++ b/contrib/buildinfo/src/BuildInfo.scala @@ -1,8 +1,8 @@ package mill.contrib.buildinfo import mill.T -import mill.define.Target -import mill.api.{Ctx, Logger, PathRef} +import mill.api.Logger +import mill.api.PathRef import mill.scalalib.ScalaModule trait BuildInfo extends ScalaModule { @@ -15,33 +15,35 @@ trait BuildInfo extends ScalaModule { Map.empty[String, String] } - private def generateBuildInfo(members: Map[String, Any])(implicit dest: Ctx.Dest, log: Ctx.Log): Seq[PathRef] = - if (!members.isEmpty) { - val outputFile = dest.dest / "BuildInfo.scala" + def generatedBuildInfo: T[(Seq[PathRef], PathRef)] = T { + val logger: Logger = T.ctx().log + val members: Map[String, String] = buildInfoMembers() + if (members.nonEmpty) { + val outputFile = T.ctx().dest / "BuildInfo.scala" val internalMembers = members .map { case (name, value) => s""" def ${name} = "${value}"""" } .mkString("\n") - log.log.debug(s"Generating object [${buildInfoPackageName.map(_ + ".").getOrElse("")}${buildInfoObjectName}] with [${members.size}] members to [${outputFile}]") + logger.debug(s"Generating object [${buildInfoPackageName.map(_ + ".").getOrElse("")}${buildInfoObjectName}] with [${members.size}] members to [${outputFile}]") os.write( outputFile, - s"""|${buildInfoPackageName.map(p => s"package ${p}").getOrElse("")} - |object ${buildInfoObjectName} { - |$internalMembers - |}""".stripMargin + s"""|${buildInfoPackageName.map(packageName => s"package ${packageName}\n").getOrElse("")} + |object ${buildInfoObjectName} { + |$internalMembers + |}""".stripMargin ) - Seq(PathRef(outputFile)) + (Seq(PathRef(outputFile)), PathRef(T.ctx().dest)) } else { - log.log.debug("No build info member defined, skipping code generation") - Seq.empty[PathRef] + logger.debug("No build info member defined, skipping code generation") + (Seq.empty[PathRef], PathRef(T.ctx().dest)) } - - def buildInfo = T { - generateBuildInfo(buildInfoMembers()) } - override def generatedSources: Target[Seq[PathRef]] = T { super.generatedSources() ++ buildInfo() } + override def generatedSources = T { + val (_, destPathRef) = generatedBuildInfo() + super.generatedSources() :+ destPathRef + } } -- cgit v1.2.3