71 lines
1.3 KiB
C#
71 lines
1.3 KiB
C#
using System.Threading;
|
|
using AspClassic.Scripting.Utils;
|
|
|
|
namespace AspClassic.Scripting;
|
|
|
|
public class ErrorCounter : ErrorSink
|
|
{
|
|
private readonly ErrorSink _sink;
|
|
|
|
private int _fatalErrorCount;
|
|
|
|
private int _errorCount;
|
|
|
|
private int _warningCount;
|
|
|
|
public int FatalErrorCount => _fatalErrorCount;
|
|
|
|
public int ErrorCount => _errorCount;
|
|
|
|
public int WarningCount => _warningCount;
|
|
|
|
public bool AnyError
|
|
{
|
|
get
|
|
{
|
|
if (_errorCount <= 0)
|
|
{
|
|
return _fatalErrorCount > 0;
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public ErrorCounter()
|
|
: this(ErrorSink.Null)
|
|
{
|
|
}
|
|
|
|
public ErrorCounter(ErrorSink sink)
|
|
{
|
|
ContractUtils.RequiresNotNull(sink, "sink");
|
|
_sink = sink;
|
|
}
|
|
|
|
protected virtual void CountError(Severity severity)
|
|
{
|
|
switch (severity)
|
|
{
|
|
case Severity.FatalError:
|
|
Interlocked.Increment(ref _fatalErrorCount);
|
|
break;
|
|
case Severity.Error:
|
|
Interlocked.Increment(ref _errorCount);
|
|
break;
|
|
case Severity.Warning:
|
|
Interlocked.Increment(ref _warningCount);
|
|
break;
|
|
}
|
|
}
|
|
|
|
public void ClearCounters()
|
|
{
|
|
_warningCount = (_errorCount = (_fatalErrorCount = 0));
|
|
}
|
|
|
|
public override void Add(SourceUnit source, string message, SourceSpan span, int errorCode, Severity severity)
|
|
{
|
|
CountError(severity);
|
|
_sink.Add(source, message, span, errorCode, severity);
|
|
}
|
|
}
|