blob: c1f240a239406444d81f8df9fbc0d680e9a301a7 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
package dotty.tools
package dotc
package reporting
import scala.collection.mutable
import util.{SourcePosition, SourceFile}
import Reporter.Diagnostic
import core.Contexts.Context
/**
* This trait implements `isHidden` so that multiple messages per position
* are suppressed, unless they are of increasing severity.
*/
trait UniqueMessagePositions extends Reporter {
private val positions = new mutable.HashMap[(SourceFile, Int), Int]
/** Logs a position and returns true if it was already logged.
* @note Two positions are considered identical for logging if they have the same point.
*/
override def isHidden(d: Diagnostic)(implicit ctx: Context): Boolean =
super.isHidden(d) || {
d.pos.exists && {
positions get (ctx.source, d.pos.point) match {
case Some(level) if level >= d.level => true
case _ => positions((ctx.source, d.pos.point)) = d.level; false
}
}
}
}
|