Closed
Description
Minimized code
class Container : // needs to be wrapped in a class
enum Color extends java.lang.Enum[Color]:
case Red, Green, Blue
Output (click arrow to expand)
an unexpected type representation reached the compiler backend while compiling Container.scala: MethodType(List(), List(), TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class <empty>)),class Container)),class Container$Color)). If possible, please file a bug on https://github.com/lampepfl/dotty/issues
Error while emitting Container.scala
exception occurred while compiling Container.scala
scala.MatchError: MethodType(List(), List(), TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class <empty>)),class Container)),class Container$Color)) (of class dotty.tools.dotc.core.Types$CachedMethodType) while compiling Container.scala
Exception in thread "main" scala.MatchError: MethodType(List(), List(), TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class <empty>)),class Container)),class Container$Color)) (of class dotty.tools.dotc.core.Types$CachedMethodType)
at dotty.tools.backend.jvm.BCodeHelpers.dotty$tools$backend$jvm$BCodeHelpers$$typeToTypeKind(BCodeHelpers.scala:850)
at dotty.tools.backend.jvm.BCodeHelpers$BCInnerClassGen.toTypeKind(BCodeHelpers.scala:299)
at dotty.tools.backend.jvm.BCodeHelpers$BCInnerClassGen.toTypeKind$(BCodeHelpers.scala:210)
at dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.toTypeKind(BCodeSkelBuilder.scala:58)
at dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.symInfoTK(BCodeSkelBuilder.scala:87)
at dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.addClassFields$$anonfun$2(BCodeSkelBuilder.scala:268)
at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
at scala.collection.immutable.List.foreach(List.scala:333)
at dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.addClassFields(BCodeSkelBuilder.scala:274)
at dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.genPlainClass(BCodeSkelBuilder.scala:134)
at dotty.tools.backend.jvm.GenBCodePipeline$Worker1.visit(GenBCode.scala:224)
at dotty.tools.backend.jvm.GenBCodePipeline$Worker1.run(GenBCode.scala:191)
at dotty.tools.backend.jvm.GenBCodePipeline.buildAndSendToDisk(GenBCode.scala:521)
at dotty.tools.backend.jvm.GenBCodePipeline.run(GenBCode.scala:487)
at dotty.tools.backend.jvm.GenBCode.run(GenBCode.scala:57)
at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:295)
at scala.collection.immutable.List.map(List.scala:246)
at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:296)
at dotty.tools.backend.jvm.GenBCode.runOn(GenBCode.scala:61)
at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:181)
at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
at dotty.tools.dotc.Run.runPhases$5(Run.scala:191)
at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:199)
at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:64)
at dotty.tools.dotc.Run.compileUnits(Run.scala:206)
at dotty.tools.dotc.Run.compileSources(Run.scala:143)
at dotty.tools.dotc.Run.compile(Run.scala:125)
at dotty.tools.dotc.Driver.doCompile(Driver.scala:38)
at dotty.tools.dotc.Driver.process(Driver.scala:195)
at dotty.tools.dotc.Driver.process(Driver.scala:164)
at dotty.tools.dotc.Driver.process(Driver.scala:176)
at dotty.tools.dotc.Driver.main(Driver.scala:203)
at dotty.tools.dotc.Main.main(Main.scala)
Notes
with -Ycheck:completeJavaEnums
we get the assertion failure: "non member selection of getter Red in object Color from Container.this.Color.type in Color.this.$outer.Color.Red while compiling Container.scala"
checking Container.scala after phase MegaPhase{elimErasedValueType, pureStats, vcElideAllocations, arrayApply, elimPolyFunction, tailrec, completeJavaEnums, mixin, lazyVals, memoize, nonLocalReturns, capturedVars}
exception while typing @scala.annotation.static() <static> val Red: (): Container.this.Color =
Color.this.$outer.Color.Red of class class dotty.tools.dotc.ast.Trees$ValDef # 2002
exception while typing @scala.annotation.internal.Child[
(Container.Color.Blue : (): Container.this.Color)
]() @scala.annotation.internal.Child[
(Container.Color.Green : (): Container.this.Color)
]() @scala.annotation.internal.Child[
(Container.Color.Red : (): Container.this.Color)
]() sealed abstract class Color($outer: Container, _$name: String,
_$ordinal: Int
) extends Enum, Enum {
super(Color.this._$name, Color.this._$ordinal)
def productIterator(): scala.collection.Iterator =
super[Product].productIterator()
def productPrefix(): String = super[Product].productPrefix()
def productElementName(n: Int): String = super[Product].productElementName(n)
def productElementNames(): scala.collection.Iterator =
super[Product].productElementNames()
private val $outer: Container
val _$name: String
val _$ordinal: Int
@scala.annotation.static() <static> val Red: (): Container.this.Color =
Color.this.$outer.Color.Red
@scala.annotation.static() <static> val Green: (): Container.this.Color =
Color.this.$outer.Color.Green
@scala.annotation.static() <static> val Blue: (): Container.this.Color =
Color.this.$outer.Color.Blue
final def Container$Color$$$outer(): Container = Color.this.$outer
} of class class dotty.tools.dotc.ast.Trees$TypeDef # 2064
exception while typing @scala.annotation.internal.SourceFile("Container.scala") class Container()
extends
Object {
super()
@scala.annotation.internal.Child[
(Container.Color.Blue : (): Container.this.Color)
]() @scala.annotation.internal.Child[
(Container.Color.Green : (): Container.this.Color)
]() @scala.annotation.internal.Child[
(Container.Color.Red : (): Container.this.Color)
]() sealed abstract class Color($outer: Container, _$name: String,
_$ordinal: Int
) extends Enum, Enum {
super(Color.this._$name, Color.this._$ordinal)
def productIterator(): scala.collection.Iterator =
super[Product].productIterator()
def productPrefix(): String = super[Product].productPrefix()
def productElementName(n: Int): String =
super[Product].productElementName(n)
def productElementNames(): scala.collection.Iterator =
super[Product].productElementNames()
private val $outer: Container
val _$name: String
val _$ordinal: Int
@scala.annotation.static() <static> val Red: (): Container.this.Color =
Color.this.$outer.Color.Red
@scala.annotation.static() <static> val Green: (): Container.this.Color =
Color.this.$outer.Color.Green
@scala.annotation.static() <static> val Blue: (): Container.this.Color =
Color.this.$outer.Color.Blue
final def Container$Color$$$outer(): Container = Color.this.$outer
}
val Color$lzy1: Container.this.Color$ = new Container.this.Color$(this)
final lazy module def Color(): Container.this.Color$ = this.Color$lzy1
final module class Color$($outer: Container) extends Object,
java.io.Serializable
, scala.deriving.Mirror.Sum {
super()
def values(): Container.this.Color[] =
this.$values.values().toArray(
scala.reflect.ClassTag.apply(classOf[Container.this.Color])
).asInstanceOf[Container.this.Color[]]
private val $values: scala.runtime.EnumValues =
new scala.runtime.EnumValues()
def valueOf($name: String): Container.this.Color =
try
this.$values.fromName().apply($name).asInstanceOf[Container.this.Color]
catch
{
case ex$ @ _:java.util.NoSuchElementException =>
throw new IllegalArgumentException("key not found: ".concat($name))
}
private def $new(_$ordinal: Int, $name: String): Container.this.Color =
{
final class $anon($outer: Container.this.Color$) extends
Container.this.Color
, scala.runtime.EnumValue, scala.deriving.Mirror.Singleton {
super(this.$outer.Container$Color$$$$outer(), $name, _$ordinal)
override def canEqual(that: Object): Boolean =
super[EnumValue].canEqual(that)
override def productArity(): Int = super[EnumValue].productArity()
override def productPrefix(): String =
super[EnumValue].productPrefix()
override def productElement(n: Int): Object =
super[EnumValue].productElement(n)
override def productElementName(n: Int): String =
super[EnumValue].productElementName(n)
def fromProduct(p: Product): scala.deriving.Mirror.Singleton =
super[Singleton].fromProduct(p)
def $ordinal(): Int = _$ordinal
override def toString(): String = $name
this.$outer.$values.register(this)
private val $outer: Container.this.Color$
final def Container$Color$_$$anon$$$outer(): Container.this.Color$ =
$outer
def fromProduct(p: Product): Object = this.fromProduct(p)
}
new
Container.this.Color with scala.runtime.EnumValue with
scala.deriving.Mirror.Singleton
{...}
(this):Container.this.Color
}
private val Red: Container.this.Color = this.$new(0, "Red")
case def Red(): Container.this.Color = this.Red
private val Green: Container.this.Color = this.$new(1, "Green")
case def Green(): Container.this.Color = this.Green
private val Blue: Container.this.Color = this.$new(2, "Blue")
case def Blue(): Container.this.Color = this.Blue
def ordinal(x$0: Container.this.Color): Int = x$0.ordinal()
private val $outer: Container
final def Container$Color$$$$outer(): Container = Container.Color.$outer
def ordinal(x: Object): Int =
this.ordinal(x.asInstanceOf[Container.this.Color])
}
} of class class dotty.tools.dotc.ast.Trees$TypeDef # 2187
exception while typing package <empty> {
@scala.annotation.internal.SourceFile("Container.scala") class Container()
extends
Object {
super()
@scala.annotation.internal.Child[
(Container.Color.Blue : (): Container.this.Color)
]() @scala.annotation.internal.Child[
(Container.Color.Green : (): Container.this.Color)
]() @scala.annotation.internal.Child[
(Container.Color.Red : (): Container.this.Color)
]() sealed abstract class Color($outer: Container, _$name: String,
_$ordinal: Int
) extends Enum, Enum {
super(Color.this._$name, Color.this._$ordinal)
def productIterator(): scala.collection.Iterator =
super[Product].productIterator()
def productPrefix(): String = super[Product].productPrefix()
def productElementName(n: Int): String =
super[Product].productElementName(n)
def productElementNames(): scala.collection.Iterator =
super[Product].productElementNames()
private val $outer: Container
val _$name: String
val _$ordinal: Int
@scala.annotation.static() <static> val Red: (): Container.this.Color =
Color.this.$outer.Color.Red
@scala.annotation.static() <static> val Green: (): Container.this.Color =
Color.this.$outer.Color.Green
@scala.annotation.static() <static> val Blue: (): Container.this.Color =
Color.this.$outer.Color.Blue
final def Container$Color$$$outer(): Container = Color.this.$outer
}
val Color$lzy1: Container.this.Color$ = new Container.this.Color$(this)
final lazy module def Color(): Container.this.Color$ = this.Color$lzy1
final module class Color$($outer: Container) extends Object,
java.io.Serializable
, scala.deriving.Mirror.Sum {
super()
def values(): Container.this.Color[] =
this.$values.values().toArray(
scala.reflect.ClassTag.apply(classOf[Container.this.Color])
).asInstanceOf[Container.this.Color[]]
private val $values: scala.runtime.EnumValues =
new scala.runtime.EnumValues()
def valueOf($name: String): Container.this.Color =
try
this.$values.fromName().apply($name).asInstanceOf[Container.this.Color
]
catch
{
case ex$ @ _:java.util.NoSuchElementException =>
throw
new IllegalArgumentException("key not found: ".concat($name))
}
private def $new(_$ordinal: Int, $name: String): Container.this.Color =
{
final class $anon($outer: Container.this.Color$) extends
Container.this.Color
, scala.runtime.EnumValue, scala.deriving.Mirror.Singleton {
super(this.$outer.Container$Color$$$$outer(), $name, _$ordinal)
override def canEqual(that: Object): Boolean =
super[EnumValue].canEqual(that)
override def productArity(): Int = super[EnumValue].productArity()
override def productPrefix(): String =
super[EnumValue].productPrefix()
override def productElement(n: Int): Object =
super[EnumValue].productElement(n)
override def productElementName(n: Int): String =
super[EnumValue].productElementName(n)
def fromProduct(p: Product): scala.deriving.Mirror.Singleton =
super[Singleton].fromProduct(p)
def $ordinal(): Int = _$ordinal
override def toString(): String = $name
this.$outer.$values.register(this)
private val $outer: Container.this.Color$
final def Container$Color$_$$anon$$$outer(): Container.this.Color$
=
$outer
def fromProduct(p: Product): Object = this.fromProduct(p)
}
new
Container.this.Color with scala.runtime.EnumValue with
scala.deriving.Mirror.Singleton
{...}
(this):Container.this.Color
}
private val Red: Container.this.Color = this.$new(0, "Red")
case def Red(): Container.this.Color = this.Red
private val Green: Container.this.Color = this.$new(1, "Green")
case def Green(): Container.this.Color = this.Green
private val Blue: Container.this.Color = this.$new(2, "Blue")
case def Blue(): Container.this.Color = this.Blue
def ordinal(x$0: Container.this.Color): Int = x$0.ordinal()
private val $outer: Container
final def Container$Color$$$$outer(): Container = Container.Color.$outer
def ordinal(x: Object): Int =
this.ordinal(x.asInstanceOf[Container.this.Color])
}
}
} of class class dotty.tools.dotc.ast.Trees$PackageDef # 2188
*** error while checking Container.scala after phase capturedVars ***
exception occurred while compiling Container.scala
java.lang.AssertionError: assertion failed: non member selection of getter Red in object Color from Container.this.Color.type in Color.this.$outer.Color.Red while compiling Container.scala
Exception in thread "main" java.lang.AssertionError: assertion failed: non member selection of getter Red in object Color from Container.this.Color.type in Color.this.$outer.Color.Red
at dotty.DottyPredef$.assertFail(DottyPredef.scala:17)
at dotty.tools.dotc.transform.FirstTransform.checkPostCondition(FirstTransform.scala:69)
at dotty.tools.dotc.transform.TreeChecker.dotty$tools$dotc$transform$TreeChecker$Checker$$_$typedUnadapted$$anonfun$1(TreeChecker.scala:350)
at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
at scala.collection.immutable.List.foreach(List.scala:333)
at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:350)
at dotty.tools.dotc.typer.Typer.op$1(Typer.scala:2553)
at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2554)
at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2557)
at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317)
at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2671)
at dotty.tools.dotc.typer.Typer.typedValDef(Typer.scala:1900)
at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2397)
at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2483)
at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122)
at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333)
at dotty.tools.dotc.typer.Typer.op$1(Typer.scala:2553)
at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2554)
at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2557)
at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317)
at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2579)
at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2627)
at dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:516)
at dotty.tools.dotc.typer.Typer.typedClassDef(Typer.scala:2081)
at dotty.tools.dotc.transform.TreeChecker$Checker.typedClassDef(TreeChecker.scala:448)
at dotty.tools.dotc.typer.Typer.typedTypeOrClassDef$2(Typer.scala:2411)
at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2415)
at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2483)
at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122)
at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333)
at dotty.tools.dotc.typer.Typer.op$1(Typer.scala:2553)
at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2554)
at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2557)
at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317)
at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2579)
at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2627)
at dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:516)
at dotty.tools.dotc.typer.Typer.typedClassDef(Typer.scala:2081)
at dotty.tools.dotc.transform.TreeChecker$Checker.typedClassDef(TreeChecker.scala:448)
at dotty.tools.dotc.typer.Typer.typedTypeOrClassDef$2(Typer.scala:2411)
at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2415)
at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2483)
at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122)
at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333)
at dotty.tools.dotc.typer.Typer.op$1(Typer.scala:2553)
at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2554)
at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2557)
at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317)
at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2579)
at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2627)
at dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:516)
at dotty.tools.dotc.typer.Typer.typedPackageDef(Typer.scala:2207)
at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2455)
at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2484)
at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122)
at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333)
at dotty.tools.dotc.typer.Typer.op$1(Typer.scala:2553)
at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2554)
at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2557)
at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317)
at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2671)
at dotty.tools.dotc.transform.TreeChecker.check(TreeChecker.scala:151)
at dotty.tools.dotc.transform.TreeChecker.run(TreeChecker.scala:120)
at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:295)
at scala.collection.immutable.List.map(List.scala:246)
at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:296)
at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:181)
at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
at dotty.tools.dotc.Run.runPhases$5(Run.scala:191)
at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:199)
at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:64)
at dotty.tools.dotc.Run.compileUnits(Run.scala:206)
at dotty.tools.dotc.Run.compileSources(Run.scala:143)
at dotty.tools.dotc.Run.compile(Run.scala:125)
at dotty.tools.dotc.Driver.doCompile(Driver.scala:38)
at dotty.tools.dotc.Driver.process(Driver.scala:195)
at dotty.tools.dotc.Driver.process(Driver.scala:164)
at dotty.tools.dotc.Driver.process(Driver.scala:176)
at dotty.tools.dotc.Driver.main(Driver.scala:203)
at dotty.tools.dotc.Main.main(Main.scala)