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

159 lines
6.5 KiB
C#

using System.Collections.Generic;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax;
using Microsoft.CodeAnalysis.PooledObjects;
using Microsoft.CodeAnalysis.Syntax.InternalSyntax;
using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.CSharp;
internal sealed class CSharpSyntaxHelper : AbstractSyntaxHelper
{
public static readonly ISyntaxHelper Instance = (ISyntaxHelper)(object)new CSharpSyntaxHelper();
public override bool IsCaseSensitive => true;
protected override int AttributeListKind => 8847;
private CSharpSyntaxHelper()
{
}
public override bool IsValidIdentifier(string name)
{
return SyntaxFacts.IsValidIdentifier(name);
}
public override bool IsAnyNamespaceBlock(SyntaxNode node)
{
return node is Microsoft.CodeAnalysis.CSharp.Syntax.BaseNamespaceDeclarationSyntax;
}
public override bool IsAttribute(SyntaxNode node)
{
return node is Microsoft.CodeAnalysis.CSharp.Syntax.AttributeSyntax;
}
public override SyntaxNode GetNameOfAttribute(SyntaxNode node)
{
return (SyntaxNode)(object)((Microsoft.CodeAnalysis.CSharp.Syntax.AttributeSyntax)(object)node).Name;
}
public override bool IsAttributeList(SyntaxNode node)
{
return node is Microsoft.CodeAnalysis.CSharp.Syntax.AttributeListSyntax;
}
public override void AddAttributeTargets(SyntaxNode node, ArrayBuilder<SyntaxNode> targets)
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
CSharpSyntaxNode parent = ((Microsoft.CodeAnalysis.CSharp.Syntax.AttributeListSyntax)(object)node).Parent;
if (parent is Microsoft.CodeAnalysis.CSharp.Syntax.FieldDeclarationSyntax fieldDeclarationSyntax)
{
targets.AddRange((IEnumerable<SyntaxNode>)(object)fieldDeclarationSyntax.Declaration.Variables);
}
else if (parent is Microsoft.CodeAnalysis.CSharp.Syntax.EventFieldDeclarationSyntax eventFieldDeclarationSyntax)
{
targets.AddRange((IEnumerable<SyntaxNode>)(object)eventFieldDeclarationSyntax.Declaration.Variables);
}
else
{
targets.Add((SyntaxNode)(object)parent);
}
}
public override SeparatedSyntaxList<SyntaxNode> GetAttributesOfAttributeList(SyntaxNode node)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
return SeparatedSyntaxList<Microsoft.CodeAnalysis.CSharp.Syntax.AttributeSyntax>.op_Implicit(((Microsoft.CodeAnalysis.CSharp.Syntax.AttributeListSyntax)(object)node).Attributes);
}
public override bool IsLambdaExpression(SyntaxNode node)
{
return node is Microsoft.CodeAnalysis.CSharp.Syntax.LambdaExpressionSyntax;
}
public override string GetUnqualifiedIdentifierOfName(SyntaxNode node)
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
SyntaxToken identifier = ((Microsoft.CodeAnalysis.CSharp.Syntax.NameSyntax)(object)node).GetUnqualifiedName().Identifier;
return ((SyntaxToken)(ref identifier)).ValueText;
}
public override void AddAliases(GreenNode node, ArrayBuilder<(string aliasName, string symbolName)> aliases, bool global)
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
if (node is Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.CompilationUnitSyntax compilationUnitSyntax)
{
AddAliases(compilationUnitSyntax.Usings, aliases, global);
return;
}
if (node is Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.BaseNamespaceDeclarationSyntax baseNamespaceDeclarationSyntax)
{
AddAliases(baseNamespaceDeclarationSyntax.Usings, aliases, global);
return;
}
throw ExceptionUtilities.UnexpectedValue((object)node.KindText);
}
private static void AddAliases(SyntaxList<Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.UsingDirectiveSyntax> usings, ArrayBuilder<(string aliasName, string symbolName)> aliases, bool global)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
Enumerator<Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.UsingDirectiveSyntax> enumerator = usings.GetEnumerator();
while (enumerator.MoveNext())
{
Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.UsingDirectiveSyntax current = enumerator.Current;
if (current.Alias != null && global == (current.GlobalKeyword != null) && current.NamespaceOrType is Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.NameSyntax name)
{
string valueText = current.Alias.Name.Identifier.ValueText;
string valueText2 = GetUnqualifiedName(name).Identifier.ValueText;
aliases.Add((valueText, valueText2));
}
}
}
private static Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SimpleNameSyntax GetUnqualifiedName(Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.NameSyntax name)
{
if (!(name is Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.AliasQualifiedNameSyntax aliasQualifiedNameSyntax))
{
if (!(name is Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.QualifiedNameSyntax qualifiedNameSyntax))
{
if (name is Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SimpleNameSyntax result)
{
return result;
}
throw ExceptionUtilities.UnexpectedValue((object)((GreenNode)name).KindText);
}
return qualifiedNameSyntax.Right;
}
return aliasQualifiedNameSyntax.Name;
}
public override void AddAliases(CompilationOptions compilation, ArrayBuilder<(string aliasName, string symbolName)> aliases)
{
}
public override bool ContainsGlobalAliases(SyntaxNode root)
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
Enumerator<Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.UsingDirectiveSyntax> enumerator = ((Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.CompilationUnitSyntax)(object)root.Green).Usings.GetEnumerator();
while (enumerator.MoveNext())
{
Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.UsingDirectiveSyntax current = enumerator.Current;
if (current.GlobalKeyword != null && current.Alias != null)
{
return true;
}
}
return false;
}
}