@@ -17,12 +17,14 @@ import config.Printers.cyclicErrors
1717
1818class TypeError (msg : String ) extends Exception (msg) {
1919 def this () = this (" " )
20- def toMessage (implicit ctx : Context ): Message = super .getMessage
20+ final def toMessage (implicit ctx : Context ): Message =
21+ produceMessage(using ctx.addMode(Mode .Printing ))
22+ def produceMessage (using Context ): Message = super .getMessage
2123 override def getMessage : String = super .getMessage
2224}
2325
2426class MalformedType (pre : Type , denot : Denotation , absMembers : Set [Name ]) extends TypeError {
25- override def toMessage (implicit ctx : Context ): Message =
27+ override def produceMessage (implicit ctx : Context ): Message =
2628 i " malformed type: $pre is not a legal prefix for $denot because it contains abstract type member ${if (absMembers.size == 1 ) " " else " s" } ${absMembers.mkString(" , " )}"
2729}
2830
@@ -33,7 +35,7 @@ class MissingType(pre: Type, name: Name) extends TypeError {
3335 case _ => " "
3436 }
3537
36- override def toMessage (implicit ctx : Context ): Message = {
38+ override def produceMessage (implicit ctx : Context ): Message = {
3739 if (ctx.debug) printStackTrace()
3840 i """ cannot resolve reference to type $pre. $name
3941 |the classfile defining the type might be missing from the classpath ${otherReason(pre)}"""
@@ -67,7 +69,7 @@ class RecursionOverflow(val op: String, details: => String, val previous: Throwa
6769 (rs.map(_.explanation): List [String ]).mkString(" \n " , " \n | " , " " )
6870 }
6971
70- override def toMessage (implicit ctx : Context ): Message = {
72+ override def produceMessage (implicit ctx : Context ): Message = {
7173 val mostCommon = recursions.groupBy(_.op).toList.maxBy(_._2.map(_.weight).sum)._2.reverse
7274 s """ Recursion limit exceeded.
7375 |Maybe there is an illegal cyclic reference?
@@ -109,7 +111,7 @@ object handleRecursive {
109111class CyclicReference private (val denot : SymDenotation ) extends TypeError {
110112 var inImplicitSearch : Boolean = false
111113
112- override def toMessage (implicit ctx : Context ): Message = {
114+ override def produceMessage (implicit ctx : Context ): Message = {
113115 val cycleSym = denot.symbol
114116
115117 // cycleSym.flags would try completing denot and would fail, but here we can use flagsUNSAFE to detect flags
@@ -182,7 +184,7 @@ class MergeError(val sym1: Symbol, val sym2: Symbol, val tp1: Type, val tp2: Typ
182184 s " \n as members of $owner"
183185 }
184186
185- override def toMessage (implicit ctx : Context ): Message = {
187+ override def produceMessage (implicit ctx : Context ): Message = {
186188 if (ctx.debug) printStackTrace()
187189 i """ cannot merge
188190 | ${showSymbol(sym1)} of type ${showType(tp1)} and
0 commit comments