Skip to content

Compiler crash with duplicate child annotation #23312

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
threeseed opened this issue Jun 3, 2025 · 0 comments
Closed

Compiler crash with duplicate child annotation #23312

threeseed opened this issue Jun 3, 2025 · 0 comments
Labels
itype:bug itype:crash stat:needs triage Every issue needs to have an "area" and "itype" label

Comments

@threeseed
Copy link

threeseed commented Jun 3, 2025

Compiler version

3.7.0

Minimized code

package com.harana.web.components.elements
import com.harana.web.external.tailwind.colors.ColorFamily
import slinky.core.{ FunctionalComponent, StatelessComponent }
import slinky.core.facade.ReactElement
import slinky.web.html._
import slinky.web.svg.{ d, fill, path, svg, viewBox, className => svgClassName }
import typings.react.mod.CSSProperties
import slinky.core.annotations.react
import scala.scalajs.js
sealed trait AvatarType
case class Image(imageUrl: String) extends AvatarType
case class Initials(initialsText: String, color: ColorFamily) extends AvatarType
case class Placeholder(color: ColorFamily) extends AvatarType
class Avatar(jsProps: _root_.scala.scalajs.js.Object) extends Avatar.Definition(jsProps) {
  import Avatar.{ Props, State, Snapshot }
  if (false) {
    locally {
      null.asInstanceOf[Props]
      null.asInstanceOf[State]
      null.asInstanceOf[Snapshot]
    }
  }
  case class Props(avatarType: AvatarType, notificationColor: Option[ColorFamily] = None, size: Int = 8)
  def render() = {
    val notification = props.notificationColor.map(color => span(className := (s"absolute bottom-0 right-0 block h-1.5 w-1.5 rounded-full ${
      color.background600
    } ring-2 ring-white")))
    val avatar: ReactElement = props.avatarType match {
      case Image(imageUrl) =>
        img(src := imageUrl, className := (s"h-${
          props.size
        } w-${
          props.size
        } rounded-full"))
      case Initials(initialsText, color) =>
        span(className := (s"inline-flex h-12 w-12 items-center justify-center rounded-full ${
          color.background500
        }"))(span(className := "text-lg font-medium leading-none text-white")(initialsText))
      case Placeholder(color) =>
        span(className := (s"inline-block h-8 w-8 overflow-hidden rounded-full ${
          color.background100
        }"))(svg(fill := "currentColor", viewBox := "0 0 24 24", svgClassName := (s"h-full w-full ${
          color.text300
        }"))(path(d := "M24 20.993V24H0v-2.996A14.977 14.977 0 0112.004 15c4.904 0 9.26 2.354 11.996 5.993zM16.002 8.999a4 4 0 11-8 0 4 4 0 018 0z")))
    }
    if (notification.nonEmpty) span(className := "relative inline-block")(avatar, notification.get) else avatar
  }
}
object Avatar extends StatelessComponent.Wrapper {
  case class Props(avatarType: AvatarType, notificationColor: Option[ColorFamily] = None, size: Int = 8)
  type Def = Avatar
  def apply(avatarType: AvatarType, notificationColor: Option[ColorFamily] = None, size: Int = 8): _root_.slinky.core.KeyAndRefAddingStage[Def] = {
    this.apply(Props.apply(avatarType, notificationColor, size))
  }
  val component = Avatar
}

Output (click arrow to expand)

[error] java.lang.AssertionError: assertion failed: duplicate child annotation class Image$1 / class Image
[error] scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:8)
[error] dotty.tools.dotc.typer.Namer.insertInto$1(Namer.scala:500)
[error] dotty.tools.dotc.typer.Namer.insertInto$1(Namer.scala:502)
[error] dotty.tools.dotc.typer.Namer.insertInto$1(Namer.scala:502)
[error] dotty.tools.dotc.typer.Namer.addChild(Namer.scala:507)
[error] dotty.tools.dotc.typer.Namer$Completer.register$1(Namer.scala:980)
[error] dotty.tools.dotc.typer.Namer$Completer.registerIfChildInCreationContext$$anonfun$1(Namer.scala:989)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.immutable.List.foreach(List.scala:334)
[error] dotty.tools.dotc.typer.Namer$Completer.registerIfChildInCreationContext(Namer.scala:989)
[error] dotty.tools.dotc.typer.Namer$Completer.complete(Namer.scala:873)
[error] dotty.tools.dotc.core.SymDenotations$SymDenotation.completeFrom(SymDenotations.scala:175)
[error] dotty.tools.dotc.core.Denotations$Denotation.completeInfo$1(Denotations.scala:190)
[error] dotty.tools.dotc.core.Denotations$Denotation.info(Denotations.scala:192)
[error] dotty.tools.dotc.core.SymDenotations$SymDenotation.ensureCompleted(SymDenotations.scala:393)
[error] dotty.tools.dotc.typer.Typer.retrieveSym(Typer.scala:3507)
[error] dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:3532)
[error] dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:3647)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:3725)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:3730)
[error] dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:3752)
[error] dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:3798)
[error] dotty.tools.dotc.typer.Typer.typedPackageDef(Typer.scala:3353)
[error] dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:3594)
[error] dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:3648)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:3725)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:3730)
[error] dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:3841)
[error] dotty.tools.dotc.typer.TyperPhase.typeCheck$$anonfun$1(TyperPhase.scala:47)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] dotty.tools.dotc.core.Phases$Phase.monitor(Phases.scala:510)
[error] dotty.tools.dotc.typer.TyperPhase.typeCheck(TyperPhase.scala:53)
[error] dotty.tools.dotc.typer.TyperPhase.$anonfun$4(TyperPhase.scala:99)
[error] scala.collection.Iterator$$anon$6.hasNext(Iterator.scala:479)
[error] scala.collection.Iterator$$anon$9.hasNext(Iterator.scala:583)
[error] scala.collection.immutable.List.prependedAll(List.scala:155)
[error] scala.collection.immutable.List$.from(List.scala:685)
[error] scala.collection.immutable.List$.from(List.scala:682)
[error] scala.collection.IterableOps$WithFilter.map(Iterable.scala:900)
[error] dotty.tools.dotc.typer.TyperPhase.runOn(TyperPhase.scala:98)
[error] dotty.tools.dotc.Run.runPhases$1$$anonfun$1(Run.scala:367)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1324)
[error] dotty.tools.dotc.Run.runPhases$1(Run.scala:360)
[error] dotty.tools.dotc.Run.compileUnits$$anonfun$1$$anonfun$2(Run.scala:407)
[error] dotty.tools.dotc.Run.compileUnits$$anonfun$1$$anonfun$adapted$1(Run.scala:407)
[error] scala.Function0.apply$mcV$sp(Function0.scala:42)
[error] dotty.tools.dotc.Run.showProgress(Run.scala:469)
[error] dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:407)
[error] dotty.tools.dotc.Run.compileUnits$$anonfun$adapted$1(Run.scala:419)
[error] dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:69)
[error] dotty.tools.dotc.Run.compileUnits(Run.scala:419)
[error] dotty.tools.dotc.Run.compileSources(Run.scala:306)
[error] dotty.tools.dotc.Run.compile(Run.scala:291)
[error] dotty.tools.dotc.Driver.doCompile(Driver.scala:37)
[error] dotty.tools.xsbt.CompilerBridgeDriver.run(CompilerBridgeDriver.java:141)
[error] dotty.tools.xsbt.CompilerBridge.run(CompilerBridge.java:22)
[error] sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:91)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$7(MixedAnalyzingCompiler.scala:196)
[error] scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error] sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:252)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:186)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4$adapted(MixedAnalyzingCompiler.scala:166)
[error] sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:241)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:166)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:204)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:542)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:542)
[error] sbt.internal.inc.Incremental$.$anonfun$apply$3(Incremental.scala:182)
[error] sbt.internal.inc.Incremental$.$anonfun$apply$3$adapted(Incremental.scala:180)
[error] sbt.internal.inc.Incremental$$anon$2.run(Incremental.scala:458)
[error] sbt.internal.inc.IncrementalCommon$CycleState.next(IncrementalCommon.scala:116)
[error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:56)
[error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:52)
[error] sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:264)
[error] sbt.internal.inc.Incremental$.$anonfun$incrementalCompile$8(Incremental.scala:413)
[error] sbt.internal.inc.Incremental$.withClassfileManager(Incremental.scala:500)
[error] sbt.internal.inc.Incremental$.incrementalCompile(Incremental.scala:400)
[error] sbt.internal.inc.Incremental$.apply(Incremental.scala:208)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:542)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:496)
[error] sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:332)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:433)
[error] sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:137)
[error] sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:2490)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$2(Defaults.scala:2440)
[error] sbt.internal.server.BspCompileTask$.$anonfun$compute$1(BspCompileTask.scala:41)
[error] sbt.internal.io.Retry$.sbt$internal$io$Retry$$impl(Retry.scala:114)
[error] sbt.internal.io.Retry$.io(Retry.scala:102)
[error] sbt.internal.io.Retry$.io(Retry.scala:78)
[error] sbt.internal.io.Retry$.io(Retry.scala:67)
[error] sbt.internal.server.BspCompileTask$.compute(BspCompileTask.scala:41)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:2438)
[error] scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error] sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:63)
[error] sbt.std.Transform$$anon$4.work(Transform.scala:69)
[error] sbt.Execute.$anonfun$submit$2(Execute.scala:283)
[error] sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:24)
[error] sbt.Execute.work(Execute.scala:292)
[error] sbt.Execute.$anonfun$submit$1(Execute.scala:283)
[error] sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
[error] sbt.CompletionService$$anon$2.call(CompletionService.scala:65)
[error] java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
[error] java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
[error] java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
[error] java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
[error] java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
[error] java.base/java.lang.Thread.run(Thread.java:1583)
@threeseed threeseed added itype:bug itype:crash stat:needs triage Every issue needs to have an "area" and "itype" label labels Jun 3, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
itype:bug itype:crash stat:needs triage Every issue needs to have an "area" and "itype" label
Projects
None yet
Development

No branches or pull requests

1 participant