Files
codeql/csharp/extractor/Semmle.Extraction/Message.cs
2021-02-16 09:13:12 +01:00

55 lines
1.9 KiB
C#

using Microsoft.CodeAnalysis;
using Semmle.Util.Logging;
using System;
using System.Linq;
using System.Text;
namespace Semmle.Extraction
{
/// <summary>
/// Encapsulates information for a log message.
/// </summary>
public class Message
{
public Severity Severity { get; }
public string Text { get; }
public string? StackTrace { get; }
public string? EntityText { get; }
public Entities.Location? Location { get; }
public Message(string text, string? entityText, Entities.Location? location, string? stackTrace = null, Severity severity = Severity.Error)
{
Severity = severity;
Text = text;
StackTrace = stackTrace;
EntityText = entityText;
Location = location;
}
public static Message Create(Context cx, string text, ISymbol symbol, string? stackTrace = null, Severity severity = Severity.Error)
{
return new Message(text, symbol.ToString(), cx.CreateLocation(symbol.Locations.FirstOrDefault()), stackTrace, severity);
}
public static Message Create(Context cx, string text, SyntaxNode node, string? stackTrace = null, Severity severity = Severity.Error)
{
return new Message(text, node.ToString(), cx.CreateLocation(node.GetLocation()), stackTrace, severity);
}
public override string ToString() => Text;
public string ToLogString()
{
var sb = new StringBuilder();
sb.Append(Text);
if (!string.IsNullOrEmpty(EntityText))
sb.Append(" in ").Append(EntityText);
if (!(Location is null) && !(Location.Symbol is null))
sb.Append(" at ").Append(Location.Symbol.GetLineSpan());
if (!string.IsNullOrEmpty(StackTrace))
sb.Append(" ").Append(StackTrace);
return sb.ToString();
}
}
}