Skip to content

Add explicit overrides in ScalaCliScalafixModule#4267

Merged
Gedochao merged 1 commit into
VirtusLab:mainfrom
Gedochao:maintenance/mill-incremental-compilation-failures
May 13, 2026
Merged

Add explicit overrides in ScalaCliScalafixModule#4267
Gedochao merged 1 commit into
VirtusLab:mainfrom
Gedochao:maintenance/mill-incremental-compilation-failures

Conversation

@Gedochao
Copy link
Copy Markdown
Contributor

Related to com-lihaoyi/mill#5974
It seems mill-moduledefs plugin adding the override keywords at typer intermittently crashes incremental compilation when changing branches in the scala-cli repo.
Making them explicit seems to make the problem go away. 🤷

Checklist

  • tested the solution locally and it works

How much have your relied on LLM-based tools in this contribution?

extensively, Claude found the likely cause for me

How was the solution tested?

re-compiling and switching between branches with changes in the Mill build

Additional notes

cc @lihaoyi in case you'd like to minimize this.
Without the changes, the intermittent incremental compilation failures look somewhat like this:

Details
build.mill-68] compile compiling 2 Scala sources to out/mill-build/compile.dest/classes ...
build.mill-68] [error] build.mill:212:10
build.mill-68]   object test extends ScalaCliTests with ScalaCliScalafixModule {
build.mill-68]          ^
build.mill-68] error overriding method scalacPluginMvnDeps in trait ScalaTests of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]];
build.mill-68]   method scalacPluginMvnDeps² in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]] module class test$ inherits conflicting members:
build.mill-68]   method scalacPluginMvnDeps in trait ScalaTests of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]]  and
build.mill-68]   method scalacPluginMvnDeps in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]]
build.mill-68] (Note: this can be resolved by declaring an override in module class test$.);
build.mill-68] other members with override errors are:: method scalacOptions
build.mill-68] 
build.mill-68] where:    scalacPluginMvnDeps  is a method in trait ScalaTests
build.mill-68]           scalacPluginMvnDeps² is a method in trait ScalaCliScalafixModule
build.mill-68] 
build.mill-68] 
build.mill-68] [error] build.mill:318:10
build.mill-68]   object test extends ScalaCliTests with ScalaCliScalafixModule {
build.mill-68]          ^
build.mill-68] error overriding method scalacPluginMvnDeps in trait ScalaTests of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]];
build.mill-68]   method scalacPluginMvnDeps in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]] module class test$ inherits conflicting members:
build.mill-68]   method scalacPluginMvnDeps in trait ScalaTests of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]]  and
build.mill-68]   method scalacPluginMvnDeps in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]]
build.mill-68] (Note: this can be resolved by declaring an override in module class test$.)
build.mill-68] 
build.mill-68] [error] build.mill:392:7
build.mill-68] trait ProtoBuildModule extends ScalaCliPublishModule with HasTests
build.mill-68]       ^
build.mill-68] error overriding method scalacOptions in trait HasTests of type => mill.api.Task.Simple[Seq[String]];
build.mill-68]   method scalacOptions in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[String]] trait ProtoBuildModule inherits conflicting members:
build.mill-68]   method scalacOptions in trait HasTests of type => mill.api.Task.Simple[Seq[String]]  and
build.mill-68]   method scalacOptions in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[String]]
build.mill-68] (Note: this can be resolved by declaring an override in trait ProtoBuildModule.)
build.mill-68] 
build.mill-68] [error] build.mill:715:10
build.mill-68]   object test extends ScalaCliTests with ScalaCliScalafixModule {
build.mill-68]          ^
build.mill-68] error overriding method scalacPluginMvnDeps in trait ScalaTests of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]];
build.mill-68]   method scalacPluginMvnDeps in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]] module class test$ inherits conflicting members:
build.mill-68]   method scalacPluginMvnDeps in trait ScalaTests of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]]  and
build.mill-68]   method scalacPluginMvnDeps in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]]
build.mill-68] (Note: this can be resolved by declaring an override in module class test$.)
build.mill-68] 
build.mill-68] [error] build.mill:764:10
build.mill-68]   object test extends ScalaCliTests with ScalaCliScalafixModule {
build.mill-68]          ^
build.mill-68] error overriding method scalacPluginMvnDeps in trait ScalaTests of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]];
build.mill-68]   method scalacPluginMvnDeps in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]] module class test$ inherits conflicting members:
build.mill-68]   method scalacPluginMvnDeps in trait ScalaTests of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]]  and
build.mill-68]   method scalacPluginMvnDeps in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]]
build.mill-68] (Note: this can be resolved by declaring an override in module class test$.)
build.mill-68] 
build.mill-68] [error] build.mill:818:10
build.mill-68]   object test extends ScalaCliTests with ScalaCliScalafixModule
build.mill-68]          ^
build.mill-68] error overriding method scalacPluginMvnDeps in trait ScalaTests of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]];
build.mill-68]   method scalacPluginMvnDeps² in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]] module class test$ inherits conflicting members:
build.mill-68]   method scalacPluginMvnDeps in trait ScalaTests of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]]  and
build.mill-68]   method scalacPluginMvnDeps in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]]
build.mill-68] (Note: this can be resolved by declaring an override in module class test$.);
build.mill-68] other members with override errors are:: method scalacOptions
build.mill-68] 
build.mill-68] where:    scalacPluginMvnDeps  is a method in trait ScalaTests
build.mill-68]           scalacPluginMvnDeps² is a method in trait ScalaCliScalafixModule
build.mill-68] 
build.mill-68] 
build.mill-68] [error] build.mill:811:7
build.mill-68] trait DirectivesParserModule extends ScalaCliCrossSbtModule
build.mill-68]       ^
build.mill-68] error overriding method scalacOptions in trait HasTests of type => mill.api.Task.Simple[Seq[String]];
build.mill-68]   method scalacOptions² in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[String]] trait DirectivesParserModule inherits conflicting members:
build.mill-68]   method scalacOptions in trait HasTests of type => mill.api.Task.Simple[Seq[String]]  and
build.mill-68]   method scalacOptions in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[String]]
build.mill-68] (Note: this can be resolved by declaring an override in trait DirectivesParserModule.)
build.mill-68] 
build.mill-68] where:    scalacOptions  is a method in trait HasTests
build.mill-68]           scalacOptions² is a method in trait ScalaCliScalafixModule
build.mill-68] 
build.mill-68] 
build.mill-68] [error] build.mill:999:10
build.mill-68]   object test extends ScalaCliTests with ScalaCliScalafixModule {
build.mill-68]          ^
build.mill-68] error overriding method scalacPluginMvnDeps in trait ScalaTests of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]];
build.mill-68]   method scalacPluginMvnDeps² in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]] module class test$ inherits conflicting members:
build.mill-68]   method scalacPluginMvnDeps in trait ScalaTests of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]]  and
build.mill-68]   method scalacPluginMvnDeps in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]]
build.mill-68] (Note: this can be resolved by declaring an override in module class test$.);
build.mill-68] other members with override errors are:: method scalacOptions
build.mill-68] 
build.mill-68] where:    scalacPluginMvnDeps  is a method in trait ScalaTests
build.mill-68]           scalacPluginMvnDeps² is a method in trait ScalaCliScalafixModule
build.mill-68] 
build.mill-68] 
build.mill-68] [error] build.mill:1038:9
build.mill-68]   trait IntegrationScalaTests extends super.ScalaCliTests with ScalaCliScalafixModule {
build.mill-68]         ^
build.mill-68] error overriding method scalacPluginMvnDeps in trait ScalaTests of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]];
build.mill-68]   method scalacPluginMvnDeps² in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]] trait IntegrationScalaTests inherits conflicting members:
build.mill-68]   method scalacPluginMvnDeps in trait ScalaTests of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]]  and
build.mill-68]   method scalacPluginMvnDeps in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[mill.scalalib.Dep]]
build.mill-68] (Note: this can be resolved by declaring an override in trait IntegrationScalaTests.);
build.mill-68] other members with override errors are:: method scalacOptions
build.mill-68] 
build.mill-68] where:    scalacPluginMvnDeps  is a method in trait ScalaTests
build.mill-68]           scalacPluginMvnDeps² is a method in trait ScalaCliScalafixModule
build.mill-68] 
build.mill-68] 
build.mill-68] [error] build.mill:1361:7
build.mill-68] trait TastyLib extends ScalaCliCrossSbtModule
build.mill-68]       ^
build.mill-68] error overriding method scalacOptions in trait ScalaCliModule of type => mill.api.Task.Simple[Seq[String]];
build.mill-68]   method scalacOptions in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[String]] trait TastyLib inherits conflicting members:
build.mill-68]   method scalacOptions in trait ScalaCliModule of type => mill.api.Task.Simple[Seq[String]]  and
build.mill-68]   method scalacOptions in trait ScalaCliScalafixModule of type => mill.api.Task.Simple[Seq[String]]
build.mill-68] (Note: this can be resolved by declaring an override in trait TastyLib.)
build.mill-68] 
build.mill-68] [error] 10 errors found
68/73+, 1 FAILED] ~/IdeaProjects/scala-cli/millw generate-reference-doc[].run 7s

@Gedochao Gedochao requested review from tgodzik and zielinsky May 13, 2026 08:21
@Gedochao Gedochao enabled auto-merge (squash) May 13, 2026 12:51
@Gedochao Gedochao merged commit 5adb86e into VirtusLab:main May 13, 2026
102 of 106 checks passed
@lihaoyi
Copy link
Copy Markdown

lihaoyi commented May 14, 2026

Seems like the same issue as com-lihaoyi/mill#5211

@Gedochao Gedochao deleted the maintenance/mill-incremental-compilation-failures branch May 14, 2026 08:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants