@@ -12,24 +12,27 @@ trait UniqueMessagePositions extends Reporter {
1212
1313 private val positions = new mutable.HashMap [(SourceFile , Integer ), Diagnostic ]
1414
15+ extension (dia1 : Diagnostic )
16+ private def hides (dia2 : Diagnostic )(using Context ): Boolean =
17+ if dia2.msg.showAlways then dia1.msg.getClass == dia2.msg.getClass
18+ else dia1.level >= dia2.level
19+
1520 /** Logs a position and returns true if it was already logged.
1621 * @note Two positions are considered identical for logging if they have the same point.
1722 */
1823 override def isHidden (dia : Diagnostic )(using Context ): Boolean =
19- extension (dia1 : Diagnostic ) def hides (dia2 : Diagnostic ): Boolean =
20- if dia2.msg.showAlways then dia1.msg.getClass == dia2.msg.getClass
21- else dia1.level >= dia2.level
22- super .isHidden(dia) || {
24+ super .isHidden(dia)
25+ ||
2326 dia.pos.exists
2427 && ! ctx.settings.YshowSuppressedErrors .value
25- && {
26- var shouldHide = false
27- for (pos <- dia.pos.start to dia.pos.end)
28- positions get (ctx.source, pos) match {
29- case Some (dia1) if dia1.hides( dia) => shouldHide = true
30- case _ => positions((ctx.source, pos)) = dia
31- }
32- shouldHide
33- }
34- }
28+ && (dia.pos.start to dia.pos.end).exists(pos =>
29+ positions.get((ctx.source, pos)).exists(_.hides(dia)))
30+
31+ override def markReported ( dia : Diagnostic )( using Context ) : Unit =
32+ if dia.pos.exists then
33+ for (pos <- dia. pos.start to dia.pos.end)
34+ positions.get(ctx.source, pos) match
35+ case Some (dia1) if dia1.hides(dia) =>
36+ case _ => positions((ctx.source, pos)) = dia
37+ super .markReported(dia)
3538}
0 commit comments