Files
2026-08-27 10:56:38 -06:00

127 lines
6.1 KiB
C#

using System.Collections.Immutable;
using System.Threading;
using Microsoft.CodeAnalysis.PooledObjects;
using Microsoft.CodeAnalysis.Syntax;
using Microsoft.CodeAnalysis.Text;
using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.CSharp.Syntax;
internal class CSharpPragmaWarningStateMap : AbstractWarningStateMap<PragmaWarningState>
{
public CSharpPragmaWarningStateMap(SyntaxTree syntaxTree)
: base(syntaxTree)
{
}
protected override WarningStateMapEntry<PragmaWarningState>[] CreateWarningStateMapEntries(SyntaxTree syntaxTree)
{
ArrayBuilder<DirectiveTriviaSyntax> instance = ArrayBuilder<DirectiveTriviaSyntax>.GetInstance();
GetAllPragmaWarningDirectives(syntaxTree, instance);
WarningStateMapEntry<PragmaWarningState>[] result = CreatePragmaWarningStateEntries(instance);
instance.Free();
return result;
}
private static void GetAllPragmaWarningDirectives(SyntaxTree syntaxTree, ArrayBuilder<DirectiveTriviaSyntax> directiveList)
{
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
foreach (DirectiveTriviaSyntax directive in syntaxTree.GetRoot(default(CancellationToken)).GetDirectives())
{
if (!directive.IsActive || directive.Kind() != SyntaxKind.PragmaWarningDirectiveTrivia)
{
continue;
}
PragmaWarningDirectiveTriviaSyntax pragmaWarningDirectiveTriviaSyntax = (PragmaWarningDirectiveTriviaSyntax)directive;
SyntaxToken val = pragmaWarningDirectiveTriviaSyntax.DisableOrRestoreKeyword;
if (!((SyntaxToken)(ref val)).IsMissing)
{
val = pragmaWarningDirectiveTriviaSyntax.WarningKeyword;
if (!((SyntaxToken)(ref val)).IsMissing)
{
directiveList.Add((DirectiveTriviaSyntax)pragmaWarningDirectiveTriviaSyntax);
}
}
}
}
private static WarningStateMapEntry<PragmaWarningState>[] CreatePragmaWarningStateEntries(ArrayBuilder<DirectiveTriviaSyntax> directiveList)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_015b: Unknown result type (might be due to invalid IL or missing references)
//IL_0160: Unknown result type (might be due to invalid IL or missing references)
//IL_0177: Unknown result type (might be due to invalid IL or missing references)
//IL_017c: Unknown result type (might be due to invalid IL or missing references)
//IL_0192: Unknown result type (might be due to invalid IL or missing references)
//IL_0194: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_012d: Unknown result type (might be due to invalid IL or missing references)
//IL_0132: Unknown result type (might be due to invalid IL or missing references)
WarningStateMapEntry<PragmaWarningState>[] array = new WarningStateMapEntry<PragmaWarningState>[directiveList.Count + 1];
int num = 0;
ImmutableDictionary<string, PragmaWarningState> immutableDictionary = ImmutableDictionary.Create<string, PragmaWarningState>();
PragmaWarningState pragmaWarningState = PragmaWarningState.Default;
WarningStateMapEntry<PragmaWarningState> val = default(WarningStateMapEntry<PragmaWarningState>);
val._002Ector(0, PragmaWarningState.Default, immutableDictionary);
array[num] = val;
while (num < directiveList.Count)
{
DirectiveTriviaSyntax directiveTriviaSyntax = directiveList[num];
PragmaWarningDirectiveTriviaSyntax pragmaWarningDirectiveTriviaSyntax = (PragmaWarningDirectiveTriviaSyntax)directiveTriviaSyntax;
SyntaxKind syntaxKind = pragmaWarningDirectiveTriviaSyntax.DisableOrRestoreKeyword.Kind();
PragmaWarningState pragmaWarningState2 = syntaxKind switch
{
SyntaxKind.DisableKeyword => PragmaWarningState.Disabled,
SyntaxKind.RestoreKeyword => PragmaWarningState.Default,
SyntaxKind.EnableKeyword => PragmaWarningState.Enabled,
_ => throw ExceptionUtilities.UnexpectedValue((object)syntaxKind),
};
if (pragmaWarningDirectiveTriviaSyntax.ErrorCodes.Count == 0)
{
pragmaWarningState = pragmaWarningState2;
immutableDictionary = ImmutableDictionary.Create<string, PragmaWarningState>();
}
else
{
for (int i = 0; i < pragmaWarningDirectiveTriviaSyntax.ErrorCodes.Count; i++)
{
ExpressionSyntax expressionSyntax = pragmaWarningDirectiveTriviaSyntax.ErrorCodes[i];
if (!((SyntaxNode)expressionSyntax).IsMissing && !((SyntaxNode)expressionSyntax).ContainsDiagnostics)
{
string text = string.Empty;
if (expressionSyntax.Kind() == SyntaxKind.NumericLiteralExpression)
{
SyntaxToken token = ((LiteralExpressionSyntax)expressionSyntax).Token;
text = ((CommonMessageProvider)MessageProvider.Instance).GetIdForErrorCode((int)((SyntaxToken)(ref token)).Value);
}
else if (expressionSyntax.Kind() == SyntaxKind.IdentifierName)
{
SyntaxToken identifier = ((IdentifierNameSyntax)expressionSyntax).Identifier;
text = ((SyntaxToken)(ref identifier)).ValueText;
}
if (!string.IsNullOrWhiteSpace(text))
{
immutableDictionary = immutableDictionary.SetItem(text, pragmaWarningState2);
}
}
}
}
TextSpan sourceSpan = ((SyntaxNode)directiveTriviaSyntax).Location.SourceSpan;
val._002Ector(((TextSpan)(ref sourceSpan)).End, pragmaWarningState, immutableDictionary);
num++;
array[num] = val;
}
return array;
}
}