@@ -92,8 +92,8 @@ abstract class Reporter extends interfaces.ReporterResult {
92
92
93
93
private def isIncompleteChecking = incompleteHandler ne defaultIncompleteHandler
94
94
95
- protected var _errorCount = 0
96
- protected var _warningCount = 0
95
+ private var _errorCount = 0
96
+ private var _warningCount = 0
97
97
98
98
/** The number of errors reported by this reporter (ignoring outer reporters) */
99
99
def errorCount : Int = _errorCount
@@ -154,7 +154,20 @@ abstract class Reporter extends interfaces.ReporterResult {
154
154
val key = w.enablingOption.name
155
155
addUnreported(key, 1 )
156
156
case _ =>
157
- if ! isHidden(dia) then // avoid isHidden test for summarized warnings so that message is not forced
157
+ val hide = if ! errorsReported && dia.isInstanceOf [Error ] then
158
+ // We bump up errorCount so errorsReported is true while executing isHidden.
159
+ // We use errorsReported as a predicate for broken code.
160
+ // So now any code `isHidden` runs won't cause, for instance,
161
+ // assertion errors and thus compiler crashes.
162
+ // This normally amounts to forcing the message, which might run more code
163
+ // to generate useful hints for the user.
164
+ try
165
+ _errorCount += 1
166
+ isHidden(dia)
167
+ finally
168
+ _errorCount -= 1 // decrease rather than set back to `oldErrorCount` so we only ever decrease by 1
169
+ else isHidden(dia)
170
+ if ! hide then // avoid isHidden test for summarized warnings so that message is not forced
158
171
markReported(dia)
159
172
withMode(Mode .Printing )(doReport(dia))
160
173
dia match {
0 commit comments