From cc110dd7fac964c14250e5e2bb669d52ed7fa89e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 12 Sep 2025 04:02:38 +0000 Subject: [PATCH 01/32] Initial plan From 71a3394616c50f01e2509aa18cc1bf5c0050960d Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Fri, 12 Sep 2025 12:11:22 +0800 Subject: [PATCH 02/32] Update a TODO comment --- libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala index 1a00bca2937c..3b251aed6b16 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala @@ -356,7 +356,7 @@ object BuildGenUtil { def renderVersionControl(vc: IrVersionControl): String = s"VersionControl(${escapeOption(vc.url)}, ${escapeOption(vc.connection)}, ${escapeOption(vc.devConnection)}, ${escapeOption(vc.tag)})" - // TODO consider renaming to `renderOptionalDef` or `renderIfArgsNonEmpty`? + // TODO consider renaming to `renderOptional(Def)` or `render(Def)IfArgsNonEmpty`? def optional(construct: String, args: IterableOnce[String]): String = optional(construct + "(", args, ",", ")") From 852b4709cb6b526888942d858deed56d44bb6bfa Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 12 Sep 2025 04:18:30 +0000 Subject: [PATCH 03/32] Convert generic type parameters to abstract type members in BuildGenBase Co-authored-by: ShreckYe <27768951+ShreckYe@users.noreply.github.com> --- .../src/mill/main/buildgen/BuildGenBase.scala | 18 ++++++++++++------ .../src/mill/main/sbt/SbtBuildGenMain.scala | 5 ++++- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala index cda1c557397c..cdb8cb1a4c11 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala @@ -4,12 +4,15 @@ import mill.main.buildgen.BuildGenUtil.{compactBuildTree, writeBuildObject} import scala.collection.immutable.{SortedMap, SortedSet} -/* -TODO Can we just convert all generic type parameters to abstract type members? - See https://stackoverflow.com/a/1154727/5082913. - I think abstract type members are preferred in this case. +/** + * Base trait for build generation with abstract type members instead of generic type parameters. + * See https://stackoverflow.com/a/1154727/5082913. + * Abstract type members are preferred in this case for better type variance and flexibility. */ -trait BuildGenBase[M, D, I] { +trait BuildGenBase { + type M + type D + type I type C def convertWriteOut(cfg: C, shared: BuildGenUtil.BasicConfig, input: I): Unit = { val output = convert(input, cfg, shared) @@ -103,7 +106,10 @@ trait BuildGenBase[M, D, I] { } object BuildGenBase { - trait MavenAndGradle[M, D] extends BuildGenBase[M, D, Tree[Node[M]]] { + trait MavenAndGradle[M_, D_] extends BuildGenBase { + type M = M_ + type D = D_ + type I = Tree[Node[M]] override def getModuleTree(input: Tree[Node[M]]): Tree[Node[Option[M]]] = // TODO consider filtering out projects without the `java` plugin applied in Gradle too input.map(node => node.copy(value = Some(node.value))) diff --git a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala index 985e18b3a86b..a6726da01ec4 100644 --- a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala +++ b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala @@ -51,7 +51,10 @@ import scala.collection.immutable.SortedSet */ @internal object SbtBuildGenMain - extends BuildGenBase[Project, String, (BuildInfo, Tree[Node[Option[Project]]])] { + extends BuildGenBase { + type M = Project + type D = String + type I = (BuildInfo, Tree[Node[Option[Project]]]) override type C = Config def main(args: Array[String]): Unit = { From 98a7dd356abbef3177d3188a518e06f35b1515df Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Fri, 12 Sep 2025 12:23:12 +0800 Subject: [PATCH 04/32] Rename `optional` in `BuildGenUtil` to `renderIfArgsNonEmpty` --- .../src/mill/main/buildgen/BuildGenUtil.scala | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala index 3b251aed6b16..ffd7e24aa156 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala @@ -356,11 +356,11 @@ object BuildGenUtil { def renderVersionControl(vc: IrVersionControl): String = s"VersionControl(${escapeOption(vc.url)}, ${escapeOption(vc.connection)}, ${escapeOption(vc.devConnection)}, ${escapeOption(vc.tag)})" - // TODO consider renaming to `renderOptional(Def)` or `render(Def)IfArgsNonEmpty`? - def optional(construct: String, args: IterableOnce[String]): String = - optional(construct + "(", args, ",", ")") + // TODO more alternative names: `renderOptional(Def)` or `render(Def)IfArgsNonEmpty`? + def renderIfArgsNonEmpty(construct: String, args: IterableOnce[String]): String = + renderIfArgsNonEmpty(construct + "(", args, ",", ")") - def optional(start: String, args: IterableOnce[String], sep: String, end: String): String = { + def renderIfArgsNonEmpty(start: String, args: IterableOnce[String], sep: String, end: String): String = { val itr = args.iterator if (itr.isEmpty) "" else itr.mkString(start, sep, end) @@ -406,25 +406,25 @@ object BuildGenUtil { else s"def artifactName = ${escape(name)}" def renderBomMvnDeps(args: IterableOnce[String]): String = - optional("def bomMvnDeps = super.bomMvnDeps() ++ Seq", args) + renderIfArgsNonEmpty("def bomMvnDeps = super.bomMvnDeps() ++ Seq", args) def renderMvnDeps(args: IterableOnce[String]): String = - optional("def mvnDeps = Seq", args) + renderIfArgsNonEmpty("def mvnDeps = Seq", args) def renderModuleDeps(args: IterableOnce[String]): String = - optional("def moduleDeps = super.moduleDeps ++ Seq", args) + renderIfArgsNonEmpty("def moduleDeps = super.moduleDeps ++ Seq", args) def renderCompileMvnDeps(args: IterableOnce[String]): String = - optional("def compileMvnDeps = Seq", args) + renderIfArgsNonEmpty("def compileMvnDeps = Seq", args) def renderCompileModuleDeps(args: IterableOnce[String]): String = - optional("def compileModuleDeps = super.compileModuleDeps ++ Seq", args) + renderIfArgsNonEmpty("def compileModuleDeps = super.compileModuleDeps ++ Seq", args) def renderRunMvnDeps(args: IterableOnce[String]): String = - optional("def runMvnDeps = Seq", args) + renderIfArgsNonEmpty("def runMvnDeps = Seq", args) def renderRunModuleDeps(args: IterableOnce[String]): String = - optional("def runModuleDeps = super.runModuleDeps ++ Seq", args) + renderIfArgsNonEmpty("def runModuleDeps = super.runModuleDeps ++ Seq", args) def renderJavacOptions(args: Seq[String], superArgs: Seq[String] = Seq.empty): String = renderSeqTaskDefWithSuper("javacOptions", args, superArgs, "String", escape).getOrElse("") @@ -455,7 +455,7 @@ object BuildGenUtil { ).getOrElse("") def renderResources(args: IterableOnce[os.SubPath]): String = - optional( + renderIfArgsNonEmpty( """def resources = Task { super.resources() ++ customResources() } |def customResources = Task.Sources(""".stripMargin, args.iterator.map(sub => escape(sub.toString())), @@ -491,7 +491,7 @@ object BuildGenUtil { args: Seq[(String, String)] ): String = { val tuples = args.iterator.map { case (k, v) => s"(${escape(k)}, ${escape(v)})" } - optional("def publishProperties = super.publishProperties() ++ Map", tuples) + renderIfArgsNonEmpty("def publishProperties = super.publishProperties() ++ Map", tuples) } def renderJvmWorker(moduleName: String): String = From 5f421c23b6cb443f911b87618083ca51f20b5e3d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 12 Sep 2025 05:05:33 +0000 Subject: [PATCH 05/32] Address all review comments: remove TODO, fix type parameters, format object declaration, add overrides Co-authored-by: ShreckYe <27768951+ShreckYe@users.noreply.github.com> --- .../src/mill/main/buildgen/BuildGenBase.scala | 11 +++-------- .../src/mill/main/gradle/GradleBuildGenMain.scala | 4 +++- .../maven/src/mill/main/maven/MavenBuildGenMain.scala | 4 +++- libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala | 9 ++++----- 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala index cdb8cb1a4c11..90548809e521 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala @@ -4,11 +4,6 @@ import mill.main.buildgen.BuildGenUtil.{compactBuildTree, writeBuildObject} import scala.collection.immutable.{SortedMap, SortedSet} -/** - * Base trait for build generation with abstract type members instead of generic type parameters. - * See https://stackoverflow.com/a/1154727/5082913. - * Abstract type members are preferred in this case for better type variance and flexibility. - */ trait BuildGenBase { type M type D @@ -106,9 +101,9 @@ trait BuildGenBase { } object BuildGenBase { - trait MavenAndGradle[M_, D_] extends BuildGenBase { - type M = M_ - type D = D_ + trait MavenAndGradle extends BuildGenBase { + type M + type D type I = Tree[Node[M]] override def getModuleTree(input: Tree[Node[M]]): Tree[Node[Option[M]]] = // TODO consider filtering out projects without the `java` plugin applied in Gradle too diff --git a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala index a9e853e60191..ef819a3afb24 100644 --- a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala +++ b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala @@ -42,7 +42,9 @@ import scala.jdk.CollectionConverters.* * - non-Java sources */ @internal -object GradleBuildGenMain extends BuildGenBase.MavenAndGradle[ProjectModel, Dep] { +object GradleBuildGenMain extends BuildGenBase.MavenAndGradle { + override type M = ProjectModel + override type D = Dep override type C = Config def main(args: Array[String]): Unit = { diff --git a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala index 46d1897d7db8..8ee54708b8f9 100644 --- a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala +++ b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala @@ -37,7 +37,9 @@ import scala.jdk.CollectionConverters.* * - build profiles */ @internal -object MavenBuildGenMain extends BuildGenBase.MavenAndGradle[Model, Dependency] { +object MavenBuildGenMain extends BuildGenBase.MavenAndGradle { + override type M = Model + override type D = Dependency override type C = Config def main(args: Array[String]): Unit = { diff --git a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala index a6726da01ec4..08bb126c6b1a 100644 --- a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala +++ b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala @@ -50,11 +50,10 @@ import scala.collection.immutable.SortedSet * - cross builds */ @internal -object SbtBuildGenMain - extends BuildGenBase { - type M = Project - type D = String - type I = (BuildInfo, Tree[Node[Option[Project]]]) +object SbtBuildGenMain extends BuildGenBase { + override type M = Project + override type D = String + override type I = (BuildInfo, Tree[Node[Option[Project]]]) override type C = Config def main(args: Array[String]): Unit = { From a309e67f5249cf710e4f4b9c25d7c7aa65159d4e Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Fri, 12 Sep 2025 12:46:27 +0800 Subject: [PATCH 06/32] Rename `Config` to `MavenAndGradleCommonConfig` in `BuildGenUtil` to make the name clearer --- .../src/mill/main/buildgen/BuildGenUtil.scala | 11 ++++++----- .../src/mill/main/gradle/GradleBuildGenMain.scala | 9 ++++++--- .../maven/src/mill/main/maven/MavenBuildGenMain.scala | 11 +++++++---- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala index 1a00bca2937c..7a46dde48222 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala @@ -557,15 +557,16 @@ object BuildGenUtil { object BasicConfig { implicit def parser: mainargs.ParserForClass[BasicConfig] = mainargs.ParserForClass[BasicConfig] } - // TODO alternative names: `MavenAndGradleConfig`, `MavenAndGradleSharedConfig` + + // TODO other alternative names to consider: `MavenAndGradleConfig`, `MavenAndGradleSharedConfig` @mainargs.main - case class Config( + case class MavenAndGradleCommonConfig( basicConfig: BasicConfig, @arg(doc = "capture Maven publish properties", short = 'p') publishProperties: Flag = Flag() ) - - object Config { - implicit def configParser: mainargs.ParserForClass[Config] = mainargs.ParserForClass[Config] + object MavenAndGradleCommonConfig { + implicit def configParser: mainargs.ParserForClass[MavenAndGradleCommonConfig] = + mainargs.ParserForClass[MavenAndGradleCommonConfig] } } diff --git a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala index a9e853e60191..f6c2fb95c0f4 100644 --- a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala +++ b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala @@ -229,7 +229,10 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle[ProjectModel, Dep] if (null == pom) null else pom.packaging() } - def getPublishProperties(project: ProjectModel, cfg: BuildGenUtil.Config): Seq[(String, String)] = + def getPublishProperties( + project: ProjectModel, + cfg: BuildGenUtil.MavenAndGradleCommonConfig + ): Seq[(String, String)] = if (cfg.publishProperties.value) { val pom = project.maven().pom() if (null == pom) Seq.empty @@ -369,8 +372,8 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle[ProjectModel, Dep] @main @internal case class Config( - shared: BuildGenUtil.Config, - @arg(doc = "name of Gradle project to extract settings for --base-module", short = 'g') + shared: BuildGenUtil.MavenAndGradleCommonConfig, + @arg(doc = "name of Gradle project to extract settings for --base-module", short = 'g') baseProject: Option[String] = None ) diff --git a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala index 46d1897d7db8..18f0f5807b79 100644 --- a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala +++ b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala @@ -164,7 +164,10 @@ object MavenBuildGenMain extends BuildGenBase.MavenAndGradle[Model, Dependency] .toSeq .sorted - def getPublishProperties(model: Model, cfg: BuildGenUtil.Config): Seq[(String, String)] = + def getPublishProperties( + model: Model, + cfg: BuildGenUtil.MavenAndGradleCommonConfig + ): Seq[(String, String)] = if (cfg.publishProperties.value) { val props = model.getProperties props.stringPropertyNames().iterator().asScala @@ -290,10 +293,10 @@ object MavenBuildGenMain extends BuildGenBase.MavenAndGradle[Model, Dependency] @main @internal case class Config( - shared: BuildGenUtil.Config, - @arg(doc = "use cache for Maven repository system") + shared: BuildGenUtil.MavenAndGradleCommonConfig, + @arg(doc = "use cache for Maven repository system") cacheRepository: Flag = Flag(), - @arg(doc = "process Maven plugin executions and configurations") + @arg(doc = "process Maven plugin executions and configurations") processPlugins: Flag = Flag() ) extends ModelerConfig From 5111c97c02b9a6ac43bcd833661df15ccd8634aa Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Fri, 12 Sep 2025 14:56:24 +0000 Subject: [PATCH 07/32] [autofix.ci] apply automated fixes --- libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala index 90548809e521..d66664112130 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala @@ -6,7 +6,7 @@ import scala.collection.immutable.{SortedMap, SortedSet} trait BuildGenBase { type M - type D + type D type I type C def convertWriteOut(cfg: C, shared: BuildGenUtil.BasicConfig, input: I): Unit = { From 8098b5de13085c3f61ca5c5aa625cb7ae2dfecbf Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Fri, 12 Sep 2025 22:56:41 +0800 Subject: [PATCH 08/32] Remove redundant explicit inherited type members --- libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala | 2 -- 1 file changed, 2 deletions(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala index 90548809e521..c0450e7d57dc 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala @@ -102,8 +102,6 @@ trait BuildGenBase { object BuildGenBase { trait MavenAndGradle extends BuildGenBase { - type M - type D type I = Tree[Node[M]] override def getModuleTree(input: Tree[Node[M]]): Tree[Node[Option[M]]] = // TODO consider filtering out projects without the `java` plugin applied in Gradle too From 7cf17b2340fe5fce5c9407ed842bd4f6fb099d27 Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Fri, 12 Sep 2025 23:39:50 +0800 Subject: [PATCH 09/32] Reformat --- .../gradle/src/mill/main/gradle/GradleBuildGenMain.scala | 4 ++-- libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala index f6c2fb95c0f4..e5798c51f43a 100644 --- a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala +++ b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala @@ -372,8 +372,8 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle[ProjectModel, Dep] @main @internal case class Config( - shared: BuildGenUtil.MavenAndGradleCommonConfig, - @arg(doc = "name of Gradle project to extract settings for --base-module", short = 'g') + shared: BuildGenUtil.MavenAndGradleCommonConfig, + @arg(doc = "name of Gradle project to extract settings for --base-module", short = 'g') baseProject: Option[String] = None ) diff --git a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala index 18f0f5807b79..abd32451309c 100644 --- a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala +++ b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala @@ -293,10 +293,10 @@ object MavenBuildGenMain extends BuildGenBase.MavenAndGradle[Model, Dependency] @main @internal case class Config( - shared: BuildGenUtil.MavenAndGradleCommonConfig, - @arg(doc = "use cache for Maven repository system") + shared: BuildGenUtil.MavenAndGradleCommonConfig, + @arg(doc = "use cache for Maven repository system") cacheRepository: Flag = Flag(), - @arg(doc = "process Maven plugin executions and configurations") + @arg(doc = "process Maven plugin executions and configurations") processPlugins: Flag = Flag() ) extends ModelerConfig From 75bb185ae1de0c47dd842a8e10a999d6b2b5e197 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Fri, 12 Sep 2025 15:52:16 +0000 Subject: [PATCH 10/32] [autofix.ci] apply automated fixes --- .../buildgen/src/mill/main/buildgen/BuildGenUtil.scala | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala index ffd7e24aa156..893d604dbe64 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala @@ -360,7 +360,12 @@ object BuildGenUtil { def renderIfArgsNonEmpty(construct: String, args: IterableOnce[String]): String = renderIfArgsNonEmpty(construct + "(", args, ",", ")") - def renderIfArgsNonEmpty(start: String, args: IterableOnce[String], sep: String, end: String): String = { + def renderIfArgsNonEmpty( + start: String, + args: IterableOnce[String], + sep: String, + end: String + ): String = { val itr = args.iterator if (itr.isEmpty) "" else itr.mkString(start, sep, end) From 8b5fb6a653af11cecfc7f5a7c6b81baee4d076ef Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Sat, 13 Sep 2025 00:32:45 +0800 Subject: [PATCH 11/32] Remove `moduleOptionTree` which seems redundant --- libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala index cda1c557397c..8dd09bde2664 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala @@ -37,17 +37,16 @@ trait BuildGenBase[M, D, I] { shared: BuildGenUtil.BasicConfig ): Tree[Node[BuildObject]] = { val moduleTree = getModuleTree(input) - val moduleOptionTree = moduleTree.map(node => node.copy(value = node.value)) // for resolving moduleDeps val moduleNodes = - moduleOptionTree.nodes().flatMap(node => node.value.map(m => node.copy(value = m))).toSeq + moduleTree.nodes().flatMap(node => node.value.map(m => node.copy(value = m))).toSeq val moduleRefMap = getModuleFqnMap(moduleNodes) val baseInfo = shared.baseModule.fold(IrBaseInfo()) { getBaseInfo(input, cfg, _, moduleNodes.size) } - moduleOptionTree.map(optionalBuild => + moduleTree.map(optionalBuild => optionalBuild.copy(value = optionalBuild.value.fold( BuildObject(SortedSet("mill._"), SortedMap.empty, Seq("Module"), "", "") From 3572715e48e89fc2539a6a70a1b14c13c05c3ad5 Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Sat, 13 Sep 2025 08:35:09 +0800 Subject: [PATCH 12/32] Review the TODO `// TODO consider filtering out projects without the `java` plugin applied in Gradle too` and replace some Yoda conditions --- .../init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala index a9e853e60191..54e9783ae043 100644 --- a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala +++ b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala @@ -217,7 +217,7 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle[ProjectModel, Dep] def getJavacOptions(project: ProjectModel): Seq[String] = { val _java = project._java() - if (null == _java) Seq.empty + if (_java == null) Seq.empty else _java.javacOptions().asScala.toSeq } @@ -278,7 +278,7 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle[ProjectModel, Dep] var sd = IrScopedDeps() val hasTest = os.exists(os.Path(project.directory()) / "src/test") val _java = project._java() - if (null != _java) { + if (_java != null) { val mvnDep: ExternalDep => String = cfg.shared.basicConfig.depsObject.fold(interpMvn(_)) { objName => dep => val depName = s"`${dep.group()}:${dep.name()}`" From 2259cab7d95f8c15ba4d7e671fc66f5af88e5a4c Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Sat, 13 Sep 2025 17:05:29 +0800 Subject: [PATCH 13/32] Add a missing backtick in a comment --- .../sbt/exportplugin/src/mill/main/sbt/ExportBuildPlugin.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/init/sbt/exportplugin/src/mill/main/sbt/ExportBuildPlugin.scala b/libs/init/sbt/exportplugin/src/mill/main/sbt/ExportBuildPlugin.scala index ce38f03ebe00..74eb3727a4c0 100644 --- a/libs/init/sbt/exportplugin/src/mill/main/sbt/ExportBuildPlugin.scala +++ b/libs/init/sbt/exportplugin/src/mill/main/sbt/ExportBuildPlugin.scala @@ -135,7 +135,7 @@ object ExportBuildPlugin extends AutoPlugin { }) ) ), - // `target.value` doesn't work in `globalSettings` and `buildSettings`, so this is added to `projectSettings. + // `target.value` doesn't work in `globalSettings` and `buildSettings`, so this is added to `projectSettings`. millInitExportBuild := { val defaultBuildInfo = (ThisBuild / millInitBuildInfo).value val projects = millInitProject.all(ScopeFilter(inAnyProject)).value From 4ab8c14287952243b15ec0c20e42f1903df848ee Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Sat, 13 Sep 2025 17:08:57 +0800 Subject: [PATCH 14/32] Remove the "filter out Gradle projects without the `java` plugin" TODO --- libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala | 1 - 1 file changed, 1 deletion(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala index cda1c557397c..aa9ddcfc6f32 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala @@ -105,7 +105,6 @@ trait BuildGenBase[M, D, I] { object BuildGenBase { trait MavenAndGradle[M, D] extends BuildGenBase[M, D, Tree[Node[M]]] { override def getModuleTree(input: Tree[Node[M]]): Tree[Node[Option[M]]] = - // TODO consider filtering out projects without the `java` plugin applied in Gradle too input.map(node => node.copy(value = Some(node.value))) override def extraImports: Seq[String] = Seq() } From 855c0222fd8690981b455f8748ac8d1eded4bbc0 Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Sun, 14 Sep 2025 01:16:53 +0800 Subject: [PATCH 15/32] Replace all Yoda conditions concerning `null` Achieved by replacing `null ([=!]=) (\w+)` with `$2 $1 null` using regex. --- .../src/mill/main/buildgen/BuildGenUtil.scala | 10 +++++----- .../src/mill/main/gradle/GradleBuildGenMain.scala | 12 ++++++------ .../init/gradle/src/mill/main/gradle/MavenModel.java | 2 +- .../src/mill/main/maven/MavenBuildGenMain.scala | 2 +- libs/init/maven/src/mill/main/maven/Plugins.scala | 8 ++++---- .../src/mill/javalib/spotless/converters.scala | 8 ++++---- 6 files changed, 21 insertions(+), 21 deletions(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala index 1a00bca2937c..4d81938170dd 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala @@ -219,7 +219,7 @@ object BuildGenUtil { childCompanions.foreach { case entry @ (objectName, childConstants) => val parentConstants = mergedParentCompanions.getOrElse(objectName, null) - if (null == parentConstants) mergedParentCompanions += entry + if (parentConstants == null) mergedParentCompanions += entry else { if (childConstants.exists { case (k, v) => v != parentConstants.getOrElse(k, v) }) boundary.break(null) @@ -237,7 +237,7 @@ object BuildGenUtil { children.iterator.foreach { case child @ Tree(Node(_ :+ dir, nested), Seq()) if nested.outer.isEmpty => val mergedCompanions = merge(module.companions, nested.companions) - if (null == mergedCompanions) unmerged += child + if (mergedCompanions == null) unmerged += child else { val mergedImports = module.imports ++ nested.imports val mergedInner = { @@ -271,7 +271,7 @@ object BuildGenUtil { pprint.Util.literalize(if (value == null) "" else value) def escapeOption(value: String): String = - if (null == value) "None" else s"Some(\"$value\")" + if (value == null) "None" else s"Some(\"$value\")" def renderMvnString( group: String, @@ -291,7 +291,7 @@ object BuildGenUtil { } } val sepVersion = - if (null == version) { + if (version == null) { println( s"assuming $group:$artifact is a BOM dependency; if not, please specify version in the generated build file" ) @@ -319,7 +319,7 @@ object BuildGenUtil { groupArtifactVersion._2.endsWith("-bom") def isNullOrEmpty(value: String | Null): Boolean = - null == value || value.isEmpty + value == null || value.isEmpty val linebreak: String = """ diff --git a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala index 54e9783ae043..e39697ed2ac5 100644 --- a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala +++ b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala @@ -118,7 +118,7 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle[ProjectModel, Dep] val projects = input.nodes(Tree.Traversal.BreadthFirst).map(_.value).toSeq cfg.baseProject .flatMap(name => projects.collectFirst { case m if name == m.name => m }) - .orElse(projects.collectFirst { case m if null != m.maven().pom() => m }) + .orElse(projects.collectFirst { case m if m != null.maven().pom() => m }) .orElse(projects.collectFirst { case m if !m.maven().repositories().isEmpty => m }) .getOrElse(input.node.value) } @@ -127,7 +127,7 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle[ProjectModel, Dep] } val supertypes = Seq("MavenModule") ++ - Option.when(null != project.maven().pom()) { "PublishModule" } + Option.when(project != null.maven().pom()) { "PublishModule" } val javacOptions = getJavacOptions(project) val scalaVersion = None @@ -204,7 +204,7 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle[ProjectModel, Dep] baseInfo: IrBaseInfo, build: Node[ProjectModel] ): Seq[String] = - Option.when(null != build.value.maven().pom() && { + Option.when(build != null.value.maven().pom() && { val baseTrait = baseInfo.moduleTypedef baseTrait == null || !baseTrait.moduleSupertypes.contains("PublishModule") }) { "PublishModule" }.toSeq ++ @@ -226,13 +226,13 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle[ProjectModel, Dep] def getPomPackaging(project: ProjectModel): String = { val pom = project.maven().pom() - if (null == pom) null else pom.packaging() + if (pom == null) null else pom.packaging() } def getPublishProperties(project: ProjectModel, cfg: BuildGenUtil.Config): Seq[(String, String)] = if (cfg.publishProperties.value) { val pom = project.maven().pom() - if (null == pom) Seq.empty + if (pom == null) Seq.empty else pom.properties().iterator().asScala .map(prop => (prop.key(), prop.value())) .toSeq @@ -250,7 +250,7 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle[ProjectModel, Dep] def extractPomSettings(project: ProjectModel): IrPom | Null = { val pom = project.maven.pom() - if (null == pom) null + if (pom == null) null else { IrPom( pom.description(), diff --git a/libs/init/gradle/src/mill/main/gradle/MavenModel.java b/libs/init/gradle/src/mill/main/gradle/MavenModel.java index f73beb4ae91c..0bd930cf51ef 100644 --- a/libs/init/gradle/src/mill/main/gradle/MavenModel.java +++ b/libs/init/gradle/src/mill/main/gradle/MavenModel.java @@ -338,7 +338,7 @@ public String tag() { } static Scm from(MavenPomScm scm) { - return null == scm + return scm == null ? null : new Impl( scm.getUrl().getOrNull(), diff --git a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala index 46d1897d7db8..bb70e6251022 100644 --- a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala +++ b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala @@ -185,7 +185,7 @@ object MavenBuildGenMain extends BuildGenBase.MavenAndGradle[Model, Dependency] ) def mkPomParent(parent: Parent): IrArtifact = - if (null == parent) null + if (parent == null) null else IrArtifact(parent.getGroupId, parent.getArtifactId, parent.getVersion) def extractPomSettings(model: Model): IrPom = { diff --git a/libs/init/maven/src/mill/main/maven/Plugins.scala b/libs/init/maven/src/mill/main/maven/Plugins.scala index a40aa755801f..9a763ebfb280 100644 --- a/libs/init/maven/src/mill/main/maven/Plugins.scala +++ b/libs/init/maven/src/mill/main/maven/Plugins.scala @@ -34,7 +34,7 @@ object Plugins { // javac throws exception if release is specified with source/target, and // plugin configuration returns default values for source/target when not specified val release = dom.child("release") - if (null == release) { + if (release == null) { dom.child("source").foreachValue(options += "-source" += _) dom.child("target").foreachValue(options += "-target" += _) } else { @@ -51,12 +51,12 @@ object Plugins { private implicit class NullableDomOps(val self: Xpp3Dom) extends AnyVal { def child(name: String): Xpp3Dom = - if (null == self) self else self.getChild(name) + if (self == null) self else self.getChild(name) def foreachValue(f: String => Unit): Unit = - if (null != self) f(self.getValue) + if (self != null) f(self.getValue) def foreachChildValue(f: String => Unit): Unit = - if (null != self) self.getChildren.iterator.foreach(dom => f(dom.getValue)) + if (self != null) self.getChildren.iterator.foreach(dom => f(dom.getValue)) } } diff --git a/libs/javalib/spotless-worker/src/mill/javalib/spotless/converters.scala b/libs/javalib/spotless-worker/src/mill/javalib/spotless/converters.scala index 753998daf3de..46b0b8afc510 100644 --- a/libs/javalib/spotless-worker/src/mill/javalib/spotless/converters.scala +++ b/libs/javalib/spotless-worker/src/mill/javalib/spotless/converters.scala @@ -21,7 +21,7 @@ class ToFormatterStep(charset: Charset, provisioner: Provisioner) extends (Step => FormatterStep): def path(sub: RelPathRef): Option[Path] = - Option.when(null != sub && os.exists(sub.ref.path))(sub.ref.path) + Option.when(sub != null && os.exists(sub.ref.path))(sub.ref.path) def read(cof: ContentOrFile): String = Option(cof.content) @@ -174,9 +174,9 @@ class ToFormatterStep(charset: Charset, provisioner: Provisioner) def toLintSuppression(suppress: Suppress) = { import suppress.* val ls = LintSuppression() - if (null != path) ls.setPath(path) - if (null != step) ls.setStep(step) - if (null != shortCode) ls.setShortCode(shortCode) + if (path != null) ls.setPath(path) + if (step != null) ls.setStep(step) + if (shortCode != null) ls.setShortCode(shortCode) ls } From 403d4951ecd154882128274ab8e33ed9cd878e15 Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Sun, 14 Sep 2025 01:21:05 +0800 Subject: [PATCH 16/32] Find and replace more Yoda conditions using GitHub Copilot Prompt: ```text Find and replace all Yoda conditions using regex. ``` --- libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala | 4 ++-- .../src/mill/javalib/dependency/versions/Version.scala | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala index 4d81938170dd..e601782534a0 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala @@ -464,9 +464,9 @@ object BuildGenUtil { ) def renderPomPackaging(packaging: String): String = - if (isNullOrEmpty(packaging) || "jar" == packaging) "" // skip default + if (isNullOrEmpty(packaging) || packaging == "jar") "" // skip default else { - val pkg = if ("pom" == packaging) "PackagingType.Pom" else escape(packaging) + val pkg = if (packaging == "pom") "PackagingType.Pom" else escape(packaging) s"def pomPackagingType = $pkg" } diff --git a/libs/javalib/src/mill/javalib/dependency/versions/Version.scala b/libs/javalib/src/mill/javalib/dependency/versions/Version.scala index ebb0971e7bce..ae1dfd219fc0 100644 --- a/libs/javalib/src/mill/javalib/dependency/versions/Version.scala +++ b/libs/javalib/src/mill/javalib/dependency/versions/Version.scala @@ -161,7 +161,7 @@ private[dependency] object VersionOrdering extends Ordering[Version] { case (Left(_), Right(_)) => -1 case (Right(_), Left(_)) => 1 case (Right(x), Right(y)) => x `compareTo` y - } find (0 != _) orElse Some(a `compareTo` b) + } find (_ != 0) orElse Some(a `compareTo` b) } private def compareNumericParts(a: List[Long], b: List[Long]): Option[Int] = From e7a8240194b41ae84bfc655a0da544771b05ae26 Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Mon, 15 Sep 2025 12:25:31 +0800 Subject: [PATCH 17/32] Fix some mistakes in commit 855c0222fd8690981b455f8748ac8d1eded4bbc0 --- .../gradle/src/mill/main/gradle/GradleBuildGenMain.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala index e39697ed2ac5..fc607160a786 100644 --- a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala +++ b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala @@ -118,7 +118,7 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle[ProjectModel, Dep] val projects = input.nodes(Tree.Traversal.BreadthFirst).map(_.value).toSeq cfg.baseProject .flatMap(name => projects.collectFirst { case m if name == m.name => m }) - .orElse(projects.collectFirst { case m if m != null.maven().pom() => m }) + .orElse(projects.collectFirst { case m if m.maven().pom() != null => m }) .orElse(projects.collectFirst { case m if !m.maven().repositories().isEmpty => m }) .getOrElse(input.node.value) } @@ -127,7 +127,7 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle[ProjectModel, Dep] } val supertypes = Seq("MavenModule") ++ - Option.when(project != null.maven().pom()) { "PublishModule" } + Option.when(project.maven().pom() != null) { "PublishModule" } val javacOptions = getJavacOptions(project) val scalaVersion = None @@ -204,7 +204,7 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle[ProjectModel, Dep] baseInfo: IrBaseInfo, build: Node[ProjectModel] ): Seq[String] = - Option.when(build != null.value.maven().pom() && { + Option.when(build.value.maven().pom() != null && { val baseTrait = baseInfo.moduleTypedef baseTrait == null || !baseTrait.moduleSupertypes.contains("PublishModule") }) { "PublishModule" }.toSeq ++ From ae7ea491f51580e191ea2e3303c519e9bf9b6ecf Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Tue, 16 Sep 2025 08:04:41 +0800 Subject: [PATCH 18/32] Rename `IrBuild` to `IrModuleBuild` --- .../buildgen/src/mill/main/buildgen/BuildGenBase.scala | 2 +- .../buildgen/src/mill/main/buildgen/BuildGenUtil.scala | 2 +- libs/init/buildgen/src/mill/main/buildgen/ir.scala | 7 +++---- .../gradle/src/mill/main/gradle/GradleBuildGenMain.scala | 4 ++-- .../init/maven/src/mill/main/maven/MavenBuildGenMain.scala | 4 ++-- libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala | 4 ++-- 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala index 5c82cc693d27..df0fe7446526 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala @@ -96,7 +96,7 @@ trait BuildGenBase { // baseInfo: IrBaseInfo, // `baseInfo` is no longer needed as we compare the `IrBuild` with `IrBaseInfo`/`IrTrait` in common code now. build: Node[M], moduleFqnMap: ModuleFqnMap - ): IrBuild + ): IrModuleBuild } object BuildGenBase { diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala index 9c3cd0d0fa7d..5a1178a4587e 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala @@ -49,7 +49,7 @@ object BuildGenUtil { /** * @param baseInfo to compare with [[build]] and render the values only if they are different. */ - def renderIrBuild(build: IrBuild, baseInfo: IrBaseInfo): String = { + def renderIrBuild(build: IrModuleBuild, baseInfo: IrBaseInfo): String = { val baseTrait = baseInfo.moduleTypedef import build.* val testModuleTypedef = diff --git a/libs/init/buildgen/src/mill/main/buildgen/ir.scala b/libs/init/buildgen/src/mill/main/buildgen/ir.scala index 339174a02e6c..b07c88bff09e 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/ir.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/ir.scala @@ -77,9 +77,8 @@ case class IrLicense( distribution: String = "repo" ) -// TODO Consider renaming to `IrModule(Build)` to disambiguate? `sbt`, for example, uses `ThisBuild` and `buildSettings` to refer to the whole build. // TODO reuse the members in `IrTrait`? -case class IrBuild( +case class IrModuleBuild( scopedDeps: IrScopedDeps, testModule: String, testModuleMainType: String, @@ -101,9 +100,9 @@ case class IrBuild( testForkDir: Option[String] ) -object IrBuild { +object IrModuleBuild { // TODO not used - def empty(dirs: Seq[String]) = IrBuild( + def empty(dirs: Seq[String]) = IrModuleBuild( IrScopedDeps(), null, null, diff --git a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala index 4eedbbe11c39..01a4f7ab96d1 100644 --- a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala +++ b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala @@ -165,11 +165,11 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle { // baseInfo: IrBaseInfo, build: Node[ProjectModel], moduleFqnMap: ModuleFqnMap - ): IrBuild = { + ): IrModuleBuild = { val project = build.value val scopedDeps = extractScopedDeps(project, moduleFqnMap, cfg) val version = getPublishVersion(project) - IrBuild( + IrModuleBuild( scopedDeps = scopedDeps, testModule = cfg.shared.basicConfig.testModule, testModuleMainType = "MavenTests", diff --git a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala index 81082e69a2cf..f8c60559bcf2 100644 --- a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala +++ b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala @@ -103,11 +103,11 @@ object MavenBuildGenMain extends BuildGenBase.MavenAndGradle { // baseInfo: IrBaseInfo, build: Node[Model], moduleFqnMap: Map[(String, String, String), String] - ): IrBuild = { + ): IrModuleBuild = { val model = build.value val scopedDeps = extractScopedDeps(model, moduleFqnMap, cfg) val version = model.getVersion - IrBuild( + IrModuleBuild( scopedDeps = scopedDeps, testModule = cfg.shared.basicConfig.testModule, testModuleMainType = "MavenTests", diff --git a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala index 08bb126c6b1a..7a0784e00f5a 100644 --- a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala +++ b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala @@ -278,12 +278,12 @@ object SbtBuildGenMain extends BuildGenBase { // baseInfo: IrBaseInfo, build: Node[Project], moduleFqnMap: ModuleFqnMap - ): IrBuild = { + ): IrModuleBuild = { val project = build.value val buildInfo = project.buildInfo val configurationDeps = extractConfigurationDeps(project, moduleFqnMap, cfg) val version = getPublishVersion(buildInfo) - IrBuild( + IrModuleBuild( scopedDeps = configurationDeps, testModule = cfg.shared.testModule, testModuleMainType = "SbtTests", From a39cd8dd572c1c25849c42ecf982107c3d07e5b1 Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Tue, 16 Sep 2025 08:07:46 +0800 Subject: [PATCH 19/32] Update a TODO comment to an ordinary comment --- libs/init/buildgen/src/mill/main/buildgen/ir.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/ir.scala b/libs/init/buildgen/src/mill/main/buildgen/ir.scala index b07c88bff09e..959e1397f0e6 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/ir.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/ir.scala @@ -101,7 +101,7 @@ case class IrModuleBuild( ) object IrModuleBuild { - // TODO not used + // This function is not used currently but temporarily kept for possible use cases. Remove if it's ensured that it's not going to be used. def empty(dirs: Seq[String]) = IrModuleBuild( IrScopedDeps(), null, From ab843e417b78929455b501959991adced29f7628 Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Tue, 16 Sep 2025 08:50:18 +0800 Subject: [PATCH 20/32] Rename `IrTrait` to `IrBaseInfo` and replace the original references of `IrBaseInfo` with `Option[IrBaseInfo]` The original name `IrTrait` looks too broad. --- .../src/mill/main/buildgen/BuildGenBase.scala | 11 ++++---- .../src/mill/main/buildgen/BuildGenUtil.scala | 26 ++++++------------- .../buildgen/src/mill/main/buildgen/ir.scala | 17 +----------- .../mill/main/gradle/GradleBuildGenMain.scala | 14 +++++----- .../mill/main/maven/MavenBuildGenMain.scala | 6 ++--- .../src/mill/main/sbt/SbtBuildGenMain.scala | 6 ++--- 6 files changed, 25 insertions(+), 55 deletions(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala index df0fe7446526..3a55cdb889db 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala @@ -41,8 +41,9 @@ trait BuildGenBase { moduleTree.nodes().flatMap(node => node.value.map(m => node.copy(value = m))).toSeq val moduleRefMap = getModuleFqnMap(moduleNodes) - val baseInfo = - shared.baseModule.fold(IrBaseInfo()) { getBaseInfo(input, cfg, _, moduleNodes.size) } + val baseInfo = shared.baseModule.map { + getBaseInfo(input, cfg, _, moduleNodes.size) + } moduleTree.map(optionalBuild => optionalBuild.copy(value = @@ -70,8 +71,8 @@ trait BuildGenBase { supertypes = getSupertypes(cfg, baseInfo, build), inner = BuildGenUtil.renderIrBuild(inner, baseInfo), outer = - if (isNested || baseInfo.moduleTypedef == null) "" - else BuildGenUtil.renderIrTrait(baseInfo.moduleTypedef) + if (isNested || baseInfo.isEmpty) "" + else BuildGenUtil.renderIrBaseInfo(baseInfo.get) ) }) ) @@ -80,7 +81,7 @@ trait BuildGenBase { def extraImports: Seq[String] - def getSupertypes(cfg: C, baseInfo: IrBaseInfo, build: Node[M]): Seq[String] + def getSupertypes(cfg: C, baseInfo: Option[IrBaseInfo], build: Node[M]): Seq[String] def getBaseInfo( input: I, diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala index 5a1178a4587e..277cbdd30f01 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala @@ -14,7 +14,7 @@ import scala.util.boundary @internal object BuildGenUtil { - def renderIrTrait(value: IrTrait): String = { + def renderIrBaseInfo(value: IrBaseInfo): String = { import value.* s"""trait $baseModule ${renderExtends(moduleSupertypes)} { @@ -49,8 +49,7 @@ object BuildGenUtil { /** * @param baseInfo to compare with [[build]] and render the values only if they are different. */ - def renderIrBuild(build: IrModuleBuild, baseInfo: IrBaseInfo): String = { - val baseTrait = baseInfo.moduleTypedef + def renderIrBuild(build: IrModuleBuild, baseInfo: Option[IrBaseInfo]): String = { import build.* val testModuleTypedef = if (!hasTest) "" @@ -84,20 +83,14 @@ object BuildGenUtil { | |${renderJavacOptions( javacOptions, - if (baseTrait != null) baseTrait.javacOptions else Seq.empty + baseInfo.fold(Seq.empty)(_.javacOptions) )} | - |${renderScalaVersion(scalaVersion, if (baseTrait != null) baseTrait.scalaVersion else None)} + |${renderScalaVersion(scalaVersion, baseInfo.flatMap(_.scalaVersion))} | - |${renderScalacOptions( - scalacOptions, - if (baseTrait != null) baseTrait.scalacOptions else None - )} + |${renderScalacOptions(scalacOptions, baseInfo.flatMap(_.scalacOptions))} | - |${renderRepositories( - repositories, - if (baseTrait != null) baseTrait.repositories else Seq.empty - )} + |${renderRepositories(repositories, baseInfo.fold(Seq.empty)(_.repositories))} | |${renderBomMvnDeps(scopedDeps.mainBomMvnDeps)} | @@ -114,15 +107,12 @@ object BuildGenUtil { |${renderRunModuleDeps(scopedDeps.mainRunModuleDeps)} | |${ - if (pomSettings != (if (baseTrait != null) baseTrait.pomSettings else null)) + if (pomSettings != baseInfo.map(_.pomSettings).orNull) renderPomSettings(renderIrPom(pomSettings)) else "" } | - |${renderPublishVersion( - publishVersion, - if (baseTrait != null) baseTrait.publishVersion else null - )} + |${renderPublishVersion(publishVersion, baseInfo.map(_.publishVersion).orNull)} | |${renderPomPackaging(packaging)} | diff --git a/libs/init/buildgen/src/mill/main/buildgen/ir.scala b/libs/init/buildgen/src/mill/main/buildgen/ir.scala index 959e1397f0e6..0b86f5a5c2c2 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/ir.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/ir.scala @@ -36,7 +36,7 @@ object BuildObject { @mill.api.experimental case class Node[T](dirs: Seq[String], value: T) -case class IrTrait( +case class IrBaseInfo( jvmId: Option[String], baseModule: String, moduleSupertypes: Seq[String], @@ -143,21 +143,6 @@ case class IrScopedDeps( testCompileModuleDeps: SortedSet[String] = SortedSet() ) -// TODO remove `IrBaseInfo` and just use `IrTrait` directly? -case class IrBaseInfo( - /* - javacOptions: Seq[String] = Nil, - scalaVersion: Option[String] = None, - scalacOptions: Option[Seq[String]] = None, - repositories: Seq[String] = Nil, - noPom: Boolean = true, - publishVersion: String = "", - publishProperties: Seq[(String, String)] = Nil, - */ - // TODO consider renaming directly to `trait` or `baseTrait`? - moduleTypedef: IrTrait | Null = null -) - sealed class IrDependencyType object IrDependencyType { case object Default extends IrDependencyType diff --git a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala index 01a4f7ab96d1..886b1f4e6dec 100644 --- a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala +++ b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala @@ -139,7 +139,7 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle { val publishVersion = getPublishVersion(project) val publishProperties = getPublishProperties(project, cfg.shared) - val typedef = IrTrait( + IrBaseInfo( cfg.shared.basicConfig.jvmId, baseModule, supertypes, @@ -151,8 +151,6 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle { publishProperties, repos ) - - IrBaseInfo(typedef) } override type ModuleFqnMap = Map[String, String] @@ -203,13 +201,13 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle { override def getSupertypes( cfg: Config, - baseInfo: IrBaseInfo, + baseInfo: Option[IrBaseInfo], build: Node[ProjectModel] ): Seq[String] = - Option.when(build.value.maven().pom() != null && { - val baseTrait = baseInfo.moduleTypedef - baseTrait == null || !baseTrait.moduleSupertypes.contains("PublishModule") - }) { "PublishModule" }.toSeq ++ + Option.when(build.value.maven().pom() != null && + baseInfo.forall(!_.moduleSupertypes.contains("PublishModule"))) { + "PublishModule" + }.toSeq ++ Option.when(build.dirs.nonEmpty || os.exists(getMillSourcePath(build.value) / "src")) { getModuleSupertypes(cfg) }.toSeq.flatten diff --git a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala index f8c60559bcf2..ac840cab04ba 100644 --- a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala +++ b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala @@ -77,7 +77,7 @@ object MavenBuildGenMain extends BuildGenBase.MavenAndGradle { val publishVersion = model.getVersion val publishProperties = getPublishProperties(model, cfg.shared) - val typedef = IrTrait( + IrBaseInfo( cfg.shared.basicConfig.jvmId, baseModule, getModuleSupertypes, @@ -89,8 +89,6 @@ object MavenBuildGenMain extends BuildGenBase.MavenAndGradle { publishProperties, repositories ) - - IrBaseInfo(typedef) } override type ModuleFqnMap = Map[(String, String, String), String] @@ -145,7 +143,7 @@ object MavenBuildGenMain extends BuildGenBase.MavenAndGradle { def getMillSourcePath(model: Model): Path = os.Path(model.getProjectDirectory) - override def getSupertypes(cfg: Config, baseInfo: IrBaseInfo, build: Node[Model]): Seq[String] = + override def getSupertypes(cfg: Config, baseInfo: Option[IrBaseInfo], build: Node[Model]): Seq[String] = cfg.shared.basicConfig.baseModule.fold(getModuleSupertypes)(Seq(_)) def processResources( diff --git a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala index 7a0784e00f5a..278009f8c237 100644 --- a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala +++ b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala @@ -249,7 +249,7 @@ object SbtBuildGenMain extends BuildGenBase { val pomSettings = extractPomSettings(buildPublicationInfo) val publishVersion = getPublishVersion(buildInfo) - val typedef = IrTrait( + IrBaseInfo( cfg.shared.jvmId, // There doesn't seem to be a Java version setting in `sbt` though. See https://stackoverflow.com/a/76456295/5082913. baseModule, sbtSupertypes, @@ -261,8 +261,6 @@ object SbtBuildGenMain extends BuildGenBase { Seq.empty, // not available in `sbt` as it seems repositories ) - - IrBaseInfo(typedef) } /** @@ -315,7 +313,7 @@ object SbtBuildGenMain extends BuildGenBase { def getMillSourcePath(project: Project): Path = os.Path(project.projectDirectory) - override def getSupertypes(cfg: Config, baseInfo: IrBaseInfo, build: Node[Project]): Seq[String] = + override def getSupertypes(cfg: Config, baseInfo: Option[IrBaseInfo], build: Node[Project]): Seq[String] = getModuleSupertypes(cfg) def getJavacOptions(buildInfo: BuildInfo): Seq[String] = From fb6f970e43f41ea04e9ff2eea63f2753b99af97a Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Tue, 16 Sep 2025 09:03:39 +0800 Subject: [PATCH 21/32] Remove remaining occurrences of `IrTrait` --- libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala | 2 +- libs/init/buildgen/src/mill/main/buildgen/ir.scala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala index 3a55cdb889db..fd8a2554aebb 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala @@ -94,7 +94,7 @@ trait BuildGenBase { def extractIrBuild( cfg: C, - // baseInfo: IrBaseInfo, // `baseInfo` is no longer needed as we compare the `IrBuild` with `IrBaseInfo`/`IrTrait` in common code now. + // baseInfo: IrBaseInfo, // `baseInfo` is no longer needed as we compare the `IrBuild` with `IrBaseInfo` in common code now. build: Node[M], moduleFqnMap: ModuleFqnMap ): IrModuleBuild diff --git a/libs/init/buildgen/src/mill/main/buildgen/ir.scala b/libs/init/buildgen/src/mill/main/buildgen/ir.scala index 0b86f5a5c2c2..2df232ee0323 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/ir.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/ir.scala @@ -77,7 +77,7 @@ case class IrLicense( distribution: String = "repo" ) -// TODO reuse the members in `IrTrait`? +// TODO reuse the members in `IrBaseInfo`? case class IrModuleBuild( scopedDeps: IrScopedDeps, testModule: String, From 53499b16ef5d2105aee674967af6268fa9aba596 Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Tue, 16 Sep 2025 09:05:36 +0800 Subject: [PATCH 22/32] Replace remaining occurrences of `IrBuild` --- .../buildgen/src/mill/main/buildgen/BuildGenBase.scala | 8 ++++---- .../buildgen/src/mill/main/buildgen/BuildGenUtil.scala | 2 +- .../gradle/src/mill/main/gradle/GradleBuildGenMain.scala | 2 +- .../maven/src/mill/main/maven/MavenBuildGenMain.scala | 2 +- libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala index fd8a2554aebb..37fd462a7398 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala @@ -54,7 +54,7 @@ trait BuildGenBase { println(s"converting module $name") val build = optionalBuild.copy(value = moduleModel) - val inner = extractIrBuild(cfg, build, moduleRefMap) + val inner = extractIrModuleBuild(cfg, build, moduleRefMap) val isNested = optionalBuild.dirs.nonEmpty BuildObject( @@ -69,7 +69,7 @@ trait BuildGenBase { SortedMap((name, SortedMap(inner.scopedDeps.namedMvnDeps.toSeq*))) ), supertypes = getSupertypes(cfg, baseInfo, build), - inner = BuildGenUtil.renderIrBuild(inner, baseInfo), + inner = BuildGenUtil.renderIrModuleBuild(inner, baseInfo), outer = if (isNested || baseInfo.isEmpty) "" else BuildGenUtil.renderIrBaseInfo(baseInfo.get) @@ -92,9 +92,9 @@ trait BuildGenBase { def getArtifactId(moduleModel: M): String - def extractIrBuild( + def extractIrModuleBuild( cfg: C, - // baseInfo: IrBaseInfo, // `baseInfo` is no longer needed as we compare the `IrBuild` with `IrBaseInfo` in common code now. + // baseInfo: IrBaseInfo, // `baseInfo` is no longer needed as we compare the `IrModuleBuild` with `IrBaseInfo` in common code now. build: Node[M], moduleFqnMap: ModuleFqnMap ): IrModuleBuild diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala index 277cbdd30f01..0b48558e0a2a 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala @@ -49,7 +49,7 @@ object BuildGenUtil { /** * @param baseInfo to compare with [[build]] and render the values only if they are different. */ - def renderIrBuild(build: IrModuleBuild, baseInfo: Option[IrBaseInfo]): String = { + def renderIrModuleBuild(build: IrModuleBuild, baseInfo: Option[IrBaseInfo]): String = { import build.* val testModuleTypedef = if (!hasTest) "" diff --git a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala index 886b1f4e6dec..7fbe5d269fe0 100644 --- a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala +++ b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala @@ -158,7 +158,7 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle { : ModuleFqnMap = buildModuleFqnMap(moduleNodes)(_.path()) - override def extractIrBuild( + override def extractIrModuleBuild( cfg: Config, // baseInfo: IrBaseInfo, build: Node[ProjectModel], diff --git a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala index ac840cab04ba..d71da036a2de 100644 --- a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala +++ b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala @@ -96,7 +96,7 @@ object MavenBuildGenMain extends BuildGenBase.MavenAndGradle { : Map[(String, String, String), String] = buildModuleFqnMap(moduleNodes)(getProjectGav) - override def extractIrBuild( + override def extractIrModuleBuild( cfg: Config, // baseInfo: IrBaseInfo, build: Node[Model], diff --git a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala index 278009f8c237..77dffcb8b613 100644 --- a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala +++ b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala @@ -271,7 +271,7 @@ object SbtBuildGenMain extends BuildGenBase { override def getModuleFqnMap(moduleNodes: Seq[Node[Project]]): Map[String, String] = buildModuleFqnMap(moduleNodes)(_.projectRefProject) - override def extractIrBuild( + override def extractIrModuleBuild( cfg: Config, // baseInfo: IrBaseInfo, build: Node[Project], From d8860ef25d4857d7ddbb31012dfd7ee704bdfb2c Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Tue, 16 Sep 2025 09:38:01 +0800 Subject: [PATCH 23/32] Rename `extractScopedDeps` to `extractConfigurationDeps` in `GradleBuildGenMain` --- .../gradle/src/mill/main/gradle/GradleBuildGenMain.scala | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala index 7fbe5d269fe0..2f54bea118f7 100644 --- a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala +++ b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala @@ -165,7 +165,7 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle { moduleFqnMap: ModuleFqnMap ): IrModuleBuild = { val project = build.value - val scopedDeps = extractScopedDeps(project, moduleFqnMap, cfg) + val scopedDeps = extractConfigurationDeps(project, moduleFqnMap, cfg) val version = getPublishVersion(project) IrModuleBuild( scopedDeps = scopedDeps, @@ -272,8 +272,7 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle { } } - // TODO consider renaming to `extractConfigurationDeps` as Gradle calls them configurations instead of scopes - def extractScopedDeps( + def extractConfigurationDeps( project: ProjectModel, getModuleFqn: PartialFunction[String, String], cfg: Config From 43bf2da9d048e94875ee1403e0844abca039472e Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Tue, 16 Sep 2025 09:38:58 +0800 Subject: [PATCH 24/32] Update a TODO to an ordinary comment --- libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala index 77dffcb8b613..0257459f8245 100644 --- a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala +++ b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala @@ -139,7 +139,7 @@ object SbtBuildGenMain extends BuildGenBase { } val buildExportPickled = os.read(workspace / "target" / "mill-init-build-export.json") - // TODO This is mainly for debugging purposes. Comment out or uncomment this line as needed. + // This line is mainly for debugging purposes. Comment out or uncomment this line as needed. // println("sbt build export retrieved: " + buildExportPickled) import upickle.* val buildExport = read[BuildExport](buildExportPickled) From d1f801c8c7411e1c534a07507933d97d52a48ae9 Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Tue, 16 Sep 2025 12:56:43 +0800 Subject: [PATCH 25/32] Change `I` to `(BuildExport, Tree[Node[Option[Project]]])` in `SbtBuildGenMain` and refactor `getBaseInfo` to retrieve `buildExport.projects` directly --- .../src/mill/main/buildgen/BuildGenBase.scala | 1 + .../sbt/src/mill/main/sbt/SbtBuildGenMain.scala | 16 +++++++--------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala index 37fd462a7398..b491c8092276 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala @@ -9,6 +9,7 @@ trait BuildGenBase { type D type I type C + def convertWriteOut(cfg: C, shared: BuildGenUtil.BasicConfig, input: I): Unit = { val output = convert(input, cfg, shared) writeBuildObject( diff --git a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala index 0257459f8245..a156580f2558 100644 --- a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala +++ b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala @@ -53,7 +53,7 @@ import scala.collection.immutable.SortedSet object SbtBuildGenMain extends BuildGenBase { override type M = Project override type D = String - override type I = (BuildInfo, Tree[Node[Option[Project]]]) + override type I = (BuildExport, Tree[Node[Option[Project]]]) override type C = Config def main(args: Array[String]): Unit = { @@ -156,7 +156,7 @@ object SbtBuildGenMain extends BuildGenBase { val projectNodeTree = projectNodes.foldLeft(Tree(Node(Seq.empty, None)))(merge) - convertWriteOut(cfg, cfg.shared, (buildExport.defaultBuildInfo, projectNodeTree)) + convertWriteOut(cfg, cfg.shared, (buildExport, projectNodeTree)) println("converted sbt build to Mill") @@ -224,23 +224,21 @@ object SbtBuildGenMain extends BuildGenBase { ) override def getModuleTree( - input: (BuildInfo, Tree[Node[Option[Project]]]) + input: (BuildExport, Tree[Node[Option[Project]]]) ): Tree[Node[Option[Project]]] = input._2 private def sbtSupertypes = Seq("SbtModule", "PublishModule") // always publish override def getBaseInfo( - input: (BuildInfo, Tree[Node[Option[Project]]]), + input: (BuildExport, Tree[Node[Option[Project]]]), cfg: Config, baseModule: String, packagesSize: Int ): IrBaseInfo = { - val buildInfo = cfg.baseProject.fold(input._1)(name => - // TODO This can simplified if `buildExport.projects` is passed here. - input._2.nodes().collectFirst(Function.unlift(_.value.flatMap(project => - Option.when(project.name == name)(project) - ))).get.buildInfo + val buildExport = input._1 + val buildInfo = cfg.baseProject.fold(buildExport.defaultBuildInfo)(name => + buildExport.projects.find(_.name == name).get.buildInfo ) import buildInfo.* From 493276643ab0fcc09bf7abe22f42d138b9a9a6fd Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Tue, 16 Sep 2025 13:13:22 +0800 Subject: [PATCH 26/32] Fix format --- libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala index 0b48558e0a2a..a3d57c5dea67 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala @@ -81,10 +81,7 @@ object BuildGenUtil { s"""${renderArtifactName(projectName, dirs)} | - |${renderJavacOptions( - javacOptions, - baseInfo.fold(Seq.empty)(_.javacOptions) - )} + |${renderJavacOptions(javacOptions, baseInfo.fold(Seq.empty)(_.javacOptions))} | |${renderScalaVersion(scalaVersion, baseInfo.flatMap(_.scalaVersion))} | From d7876845378e22ed0a9f53d233df76612abee757 Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Tue, 16 Sep 2025 13:15:48 +0800 Subject: [PATCH 27/32] Fix format --- libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala index a156580f2558..2303f54bde6b 100644 --- a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala +++ b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala @@ -311,7 +311,11 @@ object SbtBuildGenMain extends BuildGenBase { def getMillSourcePath(project: Project): Path = os.Path(project.projectDirectory) - override def getSupertypes(cfg: Config, baseInfo: Option[IrBaseInfo], build: Node[Project]): Seq[String] = + override def getSupertypes( + cfg: Config, + baseInfo: Option[IrBaseInfo], + build: Node[Project] + ): Seq[String] = getModuleSupertypes(cfg) def getJavacOptions(buildInfo: BuildInfo): Seq[String] = From a1e2a858602c260eafa332e5e22888dfdbfcf30c Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Tue, 16 Sep 2025 05:42:28 +0000 Subject: [PATCH 28/32] [autofix.ci] apply automated fixes --- .../src/mill/main/buildgen/BuildGenUtil.scala | 2 +- .../src/mill/main/maven/MavenBuildGenMain.scala | 6 +++++- .../init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala | 12 ++++++------ 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala index a3d57c5dea67..c99afa5230ce 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenUtil.scala @@ -104,7 +104,7 @@ object BuildGenUtil { |${renderRunModuleDeps(scopedDeps.mainRunModuleDeps)} | |${ - if (pomSettings != baseInfo.map(_.pomSettings).orNull) + if (pomSettings != baseInfo.map(_.pomSettings).orNull) renderPomSettings(renderIrPom(pomSettings)) else "" } diff --git a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala index d71da036a2de..05de10bc922d 100644 --- a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala +++ b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala @@ -143,7 +143,11 @@ object MavenBuildGenMain extends BuildGenBase.MavenAndGradle { def getMillSourcePath(model: Model): Path = os.Path(model.getProjectDirectory) - override def getSupertypes(cfg: Config, baseInfo: Option[IrBaseInfo], build: Node[Model]): Seq[String] = + override def getSupertypes( + cfg: Config, + baseInfo: Option[IrBaseInfo], + build: Node[Model] + ): Seq[String] = cfg.shared.basicConfig.baseModule.fold(getModuleSupertypes)(Seq(_)) def processResources( diff --git a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala index 2303f54bde6b..9503fb9d0821 100644 --- a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala +++ b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala @@ -224,14 +224,14 @@ object SbtBuildGenMain extends BuildGenBase { ) override def getModuleTree( - input: (BuildExport, Tree[Node[Option[Project]]]) + input: (BuildExport, Tree[Node[Option[Project]]]) ): Tree[Node[Option[Project]]] = input._2 private def sbtSupertypes = Seq("SbtModule", "PublishModule") // always publish override def getBaseInfo( - input: (BuildExport, Tree[Node[Option[Project]]]), + input: (BuildExport, Tree[Node[Option[Project]]]), cfg: Config, baseModule: String, packagesSize: Int @@ -312,10 +312,10 @@ object SbtBuildGenMain extends BuildGenBase { def getMillSourcePath(project: Project): Path = os.Path(project.projectDirectory) override def getSupertypes( - cfg: Config, - baseInfo: Option[IrBaseInfo], - build: Node[Project] - ): Seq[String] = + cfg: Config, + baseInfo: Option[IrBaseInfo], + build: Node[Project] + ): Seq[String] = getModuleSupertypes(cfg) def getJavacOptions(buildInfo: BuildInfo): Seq[String] = From cc2caccb2a1ce578ef0b4148906a874b8121dd03 Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Tue, 16 Sep 2025 15:39:51 +0800 Subject: [PATCH 29/32] Remove the `D` type member --- libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala | 1 - libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala | 1 - libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala | 1 - libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala | 1 - 4 files changed, 4 deletions(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala index b491c8092276..bdfc8e37e791 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala @@ -6,7 +6,6 @@ import scala.collection.immutable.{SortedMap, SortedSet} trait BuildGenBase { type M - type D type I type C diff --git a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala index 2f54bea118f7..353f2b02a474 100644 --- a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala +++ b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala @@ -44,7 +44,6 @@ import scala.jdk.CollectionConverters.* @internal object GradleBuildGenMain extends BuildGenBase.MavenAndGradle { override type M = ProjectModel - override type D = Dep override type C = Config def main(args: Array[String]): Unit = { diff --git a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala index d71da036a2de..bf1cba8e4ec3 100644 --- a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala +++ b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala @@ -39,7 +39,6 @@ import scala.jdk.CollectionConverters.* @internal object MavenBuildGenMain extends BuildGenBase.MavenAndGradle { override type M = Model - override type D = Dependency override type C = Config def main(args: Array[String]): Unit = { diff --git a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala index 2303f54bde6b..823db01440e8 100644 --- a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala +++ b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala @@ -52,7 +52,6 @@ import scala.collection.immutable.SortedSet @internal object SbtBuildGenMain extends BuildGenBase { override type M = Project - override type D = String override type I = (BuildExport, Tree[Node[Option[Project]]]) override type C = Config From 53ea96f7b05244a15caf2f967d0c4a3d62d27f96 Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Tue, 16 Sep 2025 15:57:10 +0800 Subject: [PATCH 30/32] Rename the type members to be more specific --- .../src/mill/main/buildgen/BuildGenBase.scala | 27 ++++++++++--------- .../mill/main/gradle/GradleBuildGenMain.scala | 2 +- .../mill/main/maven/MavenBuildGenMain.scala | 2 +- .../src/mill/main/sbt/SbtBuildGenMain.scala | 4 +-- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala index bdfc8e37e791..a368f8c3432e 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala @@ -5,11 +5,12 @@ import mill.main.buildgen.BuildGenUtil.{compactBuildTree, writeBuildObject} import scala.collection.immutable.{SortedMap, SortedSet} trait BuildGenBase { - type M - type I + type Module + type Input + // not renamed to `Config` as it would otherwise conflict with the concrete nested `Config` classes inside type C - def convertWriteOut(cfg: C, shared: BuildGenUtil.BasicConfig, input: I): Unit = { + def convertWriteOut(cfg: C, shared: BuildGenUtil.BasicConfig, input: Input): Unit = { val output = convert(input, cfg, shared) writeBuildObject( if (shared.merge.value) compactBuildTree(output) else output, @@ -17,7 +18,7 @@ trait BuildGenBase { ) } - def getModuleTree(input: I): Tree[Node[Option[M]]] + def getModuleTree(input: Input): Tree[Node[Option[Module]]] /** * A [[Map]] mapping from a key retrieved from the original build tool @@ -27,10 +28,11 @@ trait BuildGenBase { * If there is no need for such a map, override it with [[Unit]]. */ type ModuleFqnMap - def getModuleFqnMap(moduleNodes: Seq[Node[M]]): ModuleFqnMap + + def getModuleFqnMap(moduleNodes: Seq[Node[Module]]): ModuleFqnMap def convert( - input: I, + input: Input, cfg: C, shared: BuildGenUtil.BasicConfig ): Tree[Node[BuildObject]] = { @@ -81,29 +83,30 @@ trait BuildGenBase { def extraImports: Seq[String] - def getSupertypes(cfg: C, baseInfo: Option[IrBaseInfo], build: Node[M]): Seq[String] + def getSupertypes(cfg: C, baseInfo: Option[IrBaseInfo], build: Node[Module]): Seq[String] def getBaseInfo( - input: I, + input: Input, cfg: C, baseModule: String, packagesSize: Int ): IrBaseInfo - def getArtifactId(moduleModel: M): String + def getArtifactId(moduleModel: Module): String def extractIrModuleBuild( cfg: C, // baseInfo: IrBaseInfo, // `baseInfo` is no longer needed as we compare the `IrModuleBuild` with `IrBaseInfo` in common code now. - build: Node[M], + build: Node[Module], moduleFqnMap: ModuleFqnMap ): IrModuleBuild } object BuildGenBase { trait MavenAndGradle extends BuildGenBase { - type I = Tree[Node[M]] - override def getModuleTree(input: Tree[Node[M]]): Tree[Node[Option[M]]] = + type Input = Tree[Node[Module]] + + override def getModuleTree(input: Tree[Node[Module]]): Tree[Node[Option[Module]]] = input.map(node => node.copy(value = Some(node.value))) override def extraImports: Seq[String] = Seq() } diff --git a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala index 353f2b02a474..86789b263ee8 100644 --- a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala +++ b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala @@ -43,7 +43,7 @@ import scala.jdk.CollectionConverters.* */ @internal object GradleBuildGenMain extends BuildGenBase.MavenAndGradle { - override type M = ProjectModel + override type Module = ProjectModel override type C = Config def main(args: Array[String]): Unit = { diff --git a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala index bf1cba8e4ec3..028ceeb5c840 100644 --- a/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala +++ b/libs/init/maven/src/mill/main/maven/MavenBuildGenMain.scala @@ -38,7 +38,7 @@ import scala.jdk.CollectionConverters.* */ @internal object MavenBuildGenMain extends BuildGenBase.MavenAndGradle { - override type M = Model + override type Module = Model override type C = Config def main(args: Array[String]): Unit = { diff --git a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala index 823db01440e8..3f0ab9d4fa12 100644 --- a/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala +++ b/libs/init/sbt/src/mill/main/sbt/SbtBuildGenMain.scala @@ -51,8 +51,8 @@ import scala.collection.immutable.SortedSet */ @internal object SbtBuildGenMain extends BuildGenBase { - override type M = Project - override type I = (BuildExport, Tree[Node[Option[Project]]]) + override type Module = Project + override type Input = (BuildExport, Tree[Node[Option[Project]]]) override type C = Config def main(args: Array[String]): Unit = { From 09027fac1867b0ca25c2dc2cd6ab0f8304174d6d Mon Sep 17 00:00:00 2001 From: Yongshun Ye Date: Tue, 16 Sep 2025 15:58:33 +0800 Subject: [PATCH 31/32] Rename `_java` to `javaModel` --- .../src/mill/main/gradle/GradleBuildGenMain.scala | 13 +++++++------ .../gradle/src/mill/main/gradle/ProjectModel.java | 12 ++++++------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala index 86789b263ee8..3dc51f94c1fd 100644 --- a/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala +++ b/libs/init/gradle/src/mill/main/gradle/GradleBuildGenMain.scala @@ -215,9 +215,9 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle { (dep.group(), dep.name(), dep.version()) def getJavacOptions(project: ProjectModel): Seq[String] = { - val _java = project._java() - if (_java == null) Seq.empty - else _java.javacOptions().asScala.toSeq + val javaModel = project.javaModel() + if (javaModel == null) Seq.empty + else javaModel.javacOptions().asScala.toSeq } def getRepositories(project: ProjectModel): Seq[String] = @@ -278,8 +278,8 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle { ): IrScopedDeps = { var sd = IrScopedDeps() val hasTest = os.exists(os.Path(project.directory()) / "src/test") - val _java = project._java() - if (_java != null) { + val javaModel = project.javaModel() + if (javaModel != null) { val mvnDep: ExternalDep => String = cfg.shared.basicConfig.depsObject.fold(interpMvn(_)) { objName => dep => val depName = s"`${dep.group()}:${dep.name()}`" @@ -303,7 +303,8 @@ object GradleBuildGenMain extends BuildGenBase.MavenAndGradle { } } } - _java.configs().forEach { config => + + javaModel.configs().forEach { config => import JavaPlugin.* val conf = config.name() diff --git a/libs/init/gradle/src/mill/main/gradle/ProjectModel.java b/libs/init/gradle/src/mill/main/gradle/ProjectModel.java index f3803ce0b417..6a9cda7a95c2 100644 --- a/libs/init/gradle/src/mill/main/gradle/ProjectModel.java +++ b/libs/init/gradle/src/mill/main/gradle/ProjectModel.java @@ -24,7 +24,7 @@ public interface ProjectModel extends Serializable { MavenModel maven(); - JavaModel _java(); + JavaModel javaModel(); class Impl implements ProjectModel { @@ -34,7 +34,7 @@ class Impl implements ProjectModel { private final File directory; private final String path; private final MavenModel maven; - private final JavaModel _java; + private final JavaModel javaModel; public Impl( String group, @@ -43,14 +43,14 @@ public Impl( File directory, String path, MavenModel maven, - JavaModel _java) { + JavaModel javaModel) { this.group = group; this.name = name; this.version = version; this.directory = directory; this.path = path; this.maven = maven; - this._java = _java; + this.javaModel = javaModel; } @Override @@ -84,8 +84,8 @@ public MavenModel maven() { } @Override - public JavaModel _java() { - return _java; + public JavaModel javaModel() { + return javaModel; } } From 45813a14809af89e55624a46fe1aa5871ba8d1c7 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Tue, 16 Sep 2025 08:08:15 +0000 Subject: [PATCH 32/32] [autofix.ci] apply automated fixes --- libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala index a368f8c3432e..04400b592ba8 100644 --- a/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala +++ b/libs/init/buildgen/src/mill/main/buildgen/BuildGenBase.scala @@ -32,7 +32,7 @@ trait BuildGenBase { def getModuleFqnMap(moduleNodes: Seq[Node[Module]]): ModuleFqnMap def convert( - input: Input, + input: Input, cfg: C, shared: BuildGenUtil.BasicConfig ): Tree[Node[BuildObject]] = { @@ -86,7 +86,7 @@ trait BuildGenBase { def getSupertypes(cfg: C, baseInfo: Option[IrBaseInfo], build: Node[Module]): Seq[String] def getBaseInfo( - input: Input, + input: Input, cfg: C, baseModule: String, packagesSize: Int