@@ -13,15 +13,16 @@ import scala.collection.mutable
13
13
14
14
object Errors :
15
15
sealed trait Error {
16
- def source : Tree
17
16
def trace : Seq [Tree ]
18
17
def show (using Context ): String
19
18
19
+ def pos (using Context ): SourcePosition = trace.last.sourcePos
20
+
20
21
def issue (using Context ): Unit =
21
- report.warning(show + stacktrace, source.srcPos )
22
+ report.warning(show + stacktrace, this .pos )
22
23
23
- private def isTraceInformative : Boolean =
24
- trace.size > 1 || trace.size == 1 && trace.head.ne(source )
24
+ private def isTraceInformative ( using Context ) : Boolean =
25
+ trace.size > 1 || trace.size == 1 && trace.head.sourcePos. ne(pos )
25
26
26
27
def stacktrace (using Context ): String = if ! isTraceInformative then " " else " Calling trace:\n " + {
27
28
var lastLineNum = - 1
@@ -77,35 +78,34 @@ object Errors:
77
78
def show (using Context ): String =
78
79
" Access non-initialized " + field.show + " ."
79
80
80
- override def issue (using Context ): Unit =
81
- report.warning(show + stacktrace, field.srcPos)
81
+ override def pos (using Context ): SourcePosition = field.sourcePos
82
82
}
83
83
84
84
/** Promote a value under initialization to fully-initialized */
85
- case class PromoteError (msg : String , source : Tree , trace : Seq [Tree ]) extends Error {
85
+ case class PromoteError (msg : String , trace : Seq [Tree ]) extends Error {
86
86
def show (using Context ): String = msg
87
87
}
88
88
89
- case class AccessCold (field : Symbol , source : Tree , trace : Seq [Tree ]) extends Error {
89
+ case class AccessCold (field : Symbol , trace : Seq [Tree ]) extends Error {
90
90
def show (using Context ): String =
91
- " Access field " + source.show + " on a value with an unknown initialization status."
91
+ " Access field on a value with an unknown initialization status."
92
92
}
93
93
94
- case class CallCold (meth : Symbol , source : Tree , trace : Seq [Tree ]) extends Error {
94
+ case class CallCold (meth : Symbol , trace : Seq [Tree ]) extends Error {
95
95
def show (using Context ): String =
96
- " Call method " + source.show + " on a value with an unknown initialization" + " ."
96
+ " Call method on a value with an unknown initialization" + " ."
97
97
}
98
98
99
- case class CallUnknown (meth : Symbol , source : Tree , trace : Seq [Tree ]) extends Error {
99
+ case class CallUnknown (meth : Symbol , trace : Seq [Tree ]) extends Error {
100
100
def show (using Context ): String =
101
101
val prefix = if meth.is(Flags .Method ) then " Calling the external method " else " Accessing the external field"
102
102
prefix + meth.show + " may cause initialization errors" + " ."
103
103
}
104
104
105
105
/** Promote a value under initialization to fully-initialized */
106
- case class UnsafePromotion (msg : String , source : Tree , trace : Seq [Tree ], error : Error ) extends Error {
106
+ case class UnsafePromotion (msg : String , trace : Seq [Tree ], error : Error ) extends Error {
107
107
override def issue (using Context ): Unit =
108
- report.warning(show, source.srcPos )
108
+ report.warning(show, this .pos )
109
109
110
110
def show (using Context ): String = {
111
111
var index = 0
0 commit comments