@@ -17,12 +17,14 @@ import config.Printers.cyclicErrors
17
17
18
18
class TypeError (msg : String ) extends Exception (msg) {
19
19
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
21
23
override def getMessage : String = super .getMessage
22
24
}
23
25
24
26
class 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 =
26
28
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(" , " )}"
27
29
}
28
30
@@ -33,7 +35,7 @@ class MissingType(pre: Type, name: Name) extends TypeError {
33
35
case _ => " "
34
36
}
35
37
36
- override def toMessage (implicit ctx : Context ): Message = {
38
+ override def produceMessage (implicit ctx : Context ): Message = {
37
39
if (ctx.debug) printStackTrace()
38
40
i """ cannot resolve reference to type $pre. $name
39
41
|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
67
69
(rs.map(_.explanation): List [String ]).mkString(" \n " , " \n | " , " " )
68
70
}
69
71
70
- override def toMessage (implicit ctx : Context ): Message = {
72
+ override def produceMessage (implicit ctx : Context ): Message = {
71
73
val mostCommon = recursions.groupBy(_.op).toList.maxBy(_._2.map(_.weight).sum)._2.reverse
72
74
s """ Recursion limit exceeded.
73
75
|Maybe there is an illegal cyclic reference?
@@ -109,7 +111,7 @@ object handleRecursive {
109
111
class CyclicReference private (val denot : SymDenotation ) extends TypeError {
110
112
var inImplicitSearch : Boolean = false
111
113
112
- override def toMessage (implicit ctx : Context ): Message = {
114
+ override def produceMessage (implicit ctx : Context ): Message = {
113
115
val cycleSym = denot.symbol
114
116
115
117
// 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
182
184
s " \n as members of $owner"
183
185
}
184
186
185
- override def toMessage (implicit ctx : Context ): Message = {
187
+ override def produceMessage (implicit ctx : Context ): Message = {
186
188
if (ctx.debug) printStackTrace()
187
189
i """ cannot merge
188
190
| ${showSymbol(sym1)} of type ${showType(tp1)} and
0 commit comments