Skip to content

Incorrect children queried before class was discovered error when typeCheckErrors is used #18484

Closed as not planned
@jchyb

Description

@jchyb

Compiler version

3.3.0, main (8c311a0)

Minimized code

macro.scala

object Macro {
  import scala.quoted.*

  def subtypesImpl[A: Type](using quotes: Quotes): Expr[String] = {
    import quotes.reflect.*
    TypeRepr.of[A].typeSymbol.children // causes the error
    '{""}
  }

  inline def subtypes[A]: String = ${ subtypesImpl[A] }
}

test.scala

class Test {

  def test(): Unit = {
    scala.compiletime.testing.typeCheckErrors("Macro.subtypes[fixture.Shape]")
  }
}

package fixture {

  sealed trait Shape
  case class Circle(center: Int, rad: Double) extends Shape

  object Inner {
    case class Circle2(center: Int, rad: Double) extends Shape
  }
}

Output

-- Error: test.scala:14:15 ------------------------------------------------------
14 |    case class Circle2(center: Int, rad: Double) extends Shape
   |               ^
   |children of trait Shape were already queried before class Circle2 was discovered.
   |As a remedy, you could move class Circle2 on the same nesting level as trait Shape.

Expectation

Code should compile, as it does when either the code inside typeCheckErrors is extracted outside of that method.

Original minimization by @MateuszKubuszok with usage context: here

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions