Closed as not planned
Closed as not planned
Description
Compiler version
Last good release: 3.6.0-RC1-bin-20240719-af933c4-NIGHTLY
First bad release: 3.6.0-RC1-bin-20240723-46ff151-NIGHTLY
Bisect points to 2facda0
Minimized code
// Test.scala
import scala.deriving.Mirror
import scala.compiletime.*
import scala.reflect.ClassTag
import scala.annotation.implicitNotFound
trait TSType[T]
object TSType extends DefaultTSTypes with TSTypeMacros
trait TSNamedType[T] extends TSType[T]
trait DefaultTSTypes extends JavaTSTypes
trait JavaTSTypes {
implicit def javaEnumTSType[E <: java.lang.Enum[E]: ClassTag]: TSNamedType[E] = ???
}
object DefaultTSTypes extends DefaultTSTypes
trait TSTypeMacros {
inline given [T: Mirror.Of]: TSType[T] = derived[T]
inline def derived[T](using m: Mirror.Of[T]): TSType[T] = {
val elemInstances = summonAll[m.MirroredElemTypes]
???
}
private inline def summonAll[T <: Tuple]: List[TSType[_]] = {
inline erasedValue[T] match {
case _: EmptyTuple => Nil
case _: (t *: ts) => summonInline[TSType[t]] :: summonAll[ts]
}
}
}
@main def Test = summon[TSType[JavaEnum]]
// JavaEnum.java
public enum JavaEnum { ABC, DEF, GHI }
Output
[error] -- [E172] Type Error: /Users/wmazur/projects/community-build3/repo/src/main/scala/com/scalatsi/TSType.scala:34:41
[error] 34 |@main def Test = summon[TSType[JavaEnum]]
[error] | ^
[error] |No given instance of type TSType[(JavaEnum.ABC : JavaEnum)] was found.
[error] |I found:
[error] |
[error] | TSType.given_TSType_T[(JavaEnum.ABC : JavaEnum)](
[error] | JavaEnum.$asInstanceOf[
[error] |
[error] | scala.deriving.Mirror.Sum{
[error] | type MirroredMonoType = (JavaEnum.ABC : JavaEnum);
[error] | type MirroredType = (JavaEnum.ABC : JavaEnum);
[error] | type MirroredLabel = ("JavaEnum" : String);
[error] | type MirroredElemTypes = ((JavaEnum.ABC : JavaEnum),
[error] | (JavaEnum.DEF : JavaEnum), (JavaEnum.GHI : JavaEnum));
[error] | type MirroredElemLabels = (("ABC" : String), ("DEF" : String),
[error] | ("GHI" : String))
[error] | }
[error] |
[error] | ]
[error] | )
[error] |
[error] |But given instance given_TSType_T in trait TSTypeMacros does not match type TSType[(JavaEnum.ABC : JavaEnum)].
[error] |----------------------------------------------------------------------------
[error] |Inline stack trace
[error] |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[error] |This location contains code that was inlined from TSType.scala:29
[error] 29 | case _: (t *: ts) => summonInline[TSType[t]] :: summonAll[ts]
[error] | ^^^^^^^^^^^^^^^^^^^^^^^
[error] |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[error] |This location contains code that was inlined from TSType.scala:29
[error] 22 | val elemInstances = summonAll[m.MirroredElemTypes]
[error] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[error] |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[error] |This location contains code that was inlined from TSType.scala:29
[error] 20 | inline given [T: Mirror.Of]: TSType[T] = derived[T]
[error] | ^^^^^^^^^^
[error] ----------------------------------------------------------------------------
When replacing
inline given [T: Mirror.Of]: TSType[T] = derived[T]
to
inline given [T: Mirror.Of]: TSType[T] = ???
it fails with
rror] -- [E119] Type Error: /Users/wmazur/projects/community-build3/repo/src/test/scala/com/scalatsi/EnumTests.scala:7:38
[error] 7 | val x = implicitly[TSType[JavaEnum]]
[error] | ^
[error] | Java defined class JavaEnum is not a value
Expectation
Should choose dedicated javaEnumTSType
implicit and compile