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

447 lines
24 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.PooledObjects;
using Microsoft.CodeAnalysis.Text;
using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.CSharp;
internal class CSharpDeclarationComputer : DeclarationComputer
{
public static void ComputeDeclarationsInSpan(SemanticModel model, TextSpan span, bool getSymbol, ArrayBuilder<DeclarationInfo> builder, CancellationToken cancellationToken)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
ComputeDeclarations(model, null, model.SyntaxTree.GetRoot(cancellationToken), delegate(SyntaxNode node, int? level)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
TextSpan span2 = node.Span;
return !((TextSpan)(ref span2)).OverlapsWith(span) || InvalidLevel(level);
}, getSymbol, builder, null, cancellationToken);
}
public static void ComputeDeclarationsInNode(SemanticModel model, ISymbol associatedSymbol, SyntaxNode node, bool getSymbol, ArrayBuilder<DeclarationInfo> builder, CancellationToken cancellationToken, int? levelsToCompute = null)
{
ComputeDeclarations(model, associatedSymbol, node, (SyntaxNode n, int? level) => InvalidLevel(level), getSymbol, builder, levelsToCompute, cancellationToken);
}
private static bool InvalidLevel(int? level)
{
if (level.HasValue)
{
return level.Value <= 0;
}
return false;
}
private static int? DecrementLevel(int? level)
{
if (!level.HasValue)
{
return level;
}
return level - 1;
}
private static void ComputeDeclarations(SemanticModel model, ISymbol associatedSymbol, SyntaxNode node, Func<SyntaxNode, int?, bool> shouldSkip, bool getSymbol, ArrayBuilder<DeclarationInfo> builder, int? levelsToCompute, CancellationToken cancellationToken)
{
//IL_0618: Unknown result type (might be due to invalid IL or missing references)
//IL_0631: Unknown result type (might be due to invalid IL or missing references)
//IL_0318: Unknown result type (might be due to invalid IL or missing references)
//IL_0341: Unknown result type (might be due to invalid IL or missing references)
//IL_0410: Unknown result type (might be due to invalid IL or missing references)
//IL_0421: Unknown result type (might be due to invalid IL or missing references)
//IL_0426: Unknown result type (might be due to invalid IL or missing references)
//IL_042a: Unknown result type (might be due to invalid IL or missing references)
//IL_042f: 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)
//IL_0137: Unknown result type (might be due to invalid IL or missing references)
//IL_013b: Unknown result type (might be due to invalid IL or missing references)
//IL_0140: Unknown result type (might be due to invalid IL or missing references)
//IL_04b3: Unknown result type (might be due to invalid IL or missing references)
//IL_04b8: Unknown result type (might be due to invalid IL or missing references)
//IL_04bc: Unknown result type (might be due to invalid IL or missing references)
//IL_04c1: Unknown result type (might be due to invalid IL or missing references)
//IL_03e8: Unknown result type (might be due to invalid IL or missing references)
//IL_03fe: Unknown result type (might be due to invalid IL or missing references)
//IL_03b1: Unknown result type (might be due to invalid IL or missing references)
//IL_03b6: Unknown result type (might be due to invalid IL or missing references)
//IL_03ba: Unknown result type (might be due to invalid IL or missing references)
//IL_03bf: Unknown result type (might be due to invalid IL or missing references)
//IL_0558: Unknown result type (might be due to invalid IL or missing references)
//IL_055d: Unknown result type (might be due to invalid IL or missing references)
//IL_0561: Unknown result type (might be due to invalid IL or missing references)
//IL_0566: Unknown result type (might be due to invalid IL or missing references)
//IL_0246: Unknown result type (might be due to invalid IL or missing references)
//IL_024b: Unknown result type (might be due to invalid IL or missing references)
//IL_024f: Unknown result type (might be due to invalid IL or missing references)
//IL_0254: Unknown result type (might be due to invalid IL or missing references)
//IL_02b9: Unknown result type (might be due to invalid IL or missing references)
//IL_02be: Unknown result type (might be due to invalid IL or missing references)
//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
//IL_0356: Unknown result type (might be due to invalid IL or missing references)
//IL_038e: Unknown result type (might be due to invalid IL or missing references)
//IL_072b: Unknown result type (might be due to invalid IL or missing references)
//IL_0730: Unknown result type (might be due to invalid IL or missing references)
//IL_0734: Unknown result type (might be due to invalid IL or missing references)
//IL_0739: Unknown result type (might be due to invalid IL or missing references)
//IL_071e: Unknown result type (might be due to invalid IL or missing references)
//IL_045c: Unknown result type (might be due to invalid IL or missing references)
//IL_06ab: Unknown result type (might be due to invalid IL or missing references)
//IL_050a: Unknown result type (might be due to invalid IL or missing references)
//IL_0535: Unknown result type (might be due to invalid IL or missing references)
//IL_05bd: Unknown result type (might be due to invalid IL or missing references)
//IL_05de: Unknown result type (might be due to invalid IL or missing references)
//IL_0490: Unknown result type (might be due to invalid IL or missing references)
//IL_016d: Unknown result type (might be due to invalid IL or missing references)
//IL_0172: Unknown result type (might be due to invalid IL or missing references)
//IL_0175: Unknown result type (might be due to invalid IL or missing references)
//IL_0207: Unknown result type (might be due to invalid IL or missing references)
//IL_020c: Unknown result type (might be due to invalid IL or missing references)
//IL_06f0: Unknown result type (might be due to invalid IL or missing references)
//IL_027d: Unknown result type (might be due to invalid IL or missing references)
//IL_02a4: Unknown result type (might be due to invalid IL or missing references)
//IL_02f0: Unknown result type (might be due to invalid IL or missing references)
//IL_0306: Unknown result type (might be due to invalid IL or missing references)
//IL_0762: Unknown result type (might be due to invalid IL or missing references)
//IL_0767: Unknown result type (might be due to invalid IL or missing references)
//IL_0774: Unknown result type (might be due to invalid IL or missing references)
//IL_0789: Unknown result type (might be due to invalid IL or missing references)
//IL_0231: Unknown result type (might be due to invalid IL or missing references)
//IL_01c3: Unknown result type (might be due to invalid IL or missing references)
cancellationToken.ThrowIfCancellationRequested();
if (shouldSkip(node, levelsToCompute))
{
return;
}
int? levelsToCompute2 = DecrementLevel(levelsToCompute);
switch (node.Kind())
{
case SyntaxKind.NamespaceDeclaration:
case SyntaxKind.FileScopedNamespaceDeclaration:
{
BaseNamespaceDeclarationSyntax baseNamespaceDeclarationSyntax = (BaseNamespaceDeclarationSyntax)(object)node;
Enumerator<MemberDeclarationSyntax> enumerator = baseNamespaceDeclarationSyntax.Members.GetEnumerator();
while (enumerator.MoveNext())
{
MemberDeclarationSyntax current6 = enumerator.Current;
ComputeDeclarations(model, null, (SyntaxNode)(object)current6, shouldSkip, getSymbol, builder, levelsToCompute2, cancellationToken);
}
DeclarationInfo declarationInfo = DeclarationComputer.GetDeclarationInfo(model, node, getSymbol, cancellationToken);
builder.Add(declarationInfo);
NameSyntax nameSyntax = baseNamespaceDeclarationSyntax.Name;
ISymbol declaredSymbol = ((DeclarationInfo)(ref declarationInfo)).DeclaredSymbol;
INamespaceSymbol val = (INamespaceSymbol)(object)((declaredSymbol is INamespaceSymbol) ? declaredSymbol : null);
while (nameSyntax.Kind() == SyntaxKind.QualifiedName)
{
nameSyntax = ((QualifiedNameSyntax)nameSyntax).Left;
INamespaceSymbol val2 = (getSymbol ? ((val != null) ? ((ISymbol)val).ContainingNamespace : null) : null);
builder.Add(new DeclarationInfo((SyntaxNode)(object)nameSyntax, ImmutableArray<SyntaxNode>.Empty, (ISymbol)(object)val2));
val = val2;
}
break;
}
case SyntaxKind.ClassDeclaration:
case SyntaxKind.StructDeclaration:
case SyntaxKind.RecordDeclaration:
case SyntaxKind.RecordStructDeclaration:
if (associatedSymbol is IMethodSymbol)
{
TypeDeclarationSyntax obj = (TypeDeclarationSyntax)(object)node;
IEnumerable<SyntaxNode> enumerable = GetParameterListInitializersAndAttributes(obj.ParameterList);
if (obj.BaseList?.Types.FirstOrDefault() is PrimaryConstructorBaseTypeSyntax primaryConstructorBaseTypeSyntax)
{
enumerable = EnumerableExtensions.Concat<SyntaxNode>(enumerable, (SyntaxNode)(object)primaryConstructorBaseTypeSyntax);
}
builder.Add(DeclarationComputer.GetDeclarationInfo(node, associatedSymbol, enumerable));
break;
}
goto case SyntaxKind.InterfaceDeclaration;
case SyntaxKind.InterfaceDeclaration:
{
TypeDeclarationSyntax typeDeclarationSyntax = (TypeDeclarationSyntax)(object)node;
Enumerator<MemberDeclarationSyntax> enumerator = typeDeclarationSyntax.Members.GetEnumerator();
while (enumerator.MoveNext())
{
MemberDeclarationSyntax current5 = enumerator.Current;
ComputeDeclarations(model, null, (SyntaxNode)(object)current5, shouldSkip, getSymbol, builder, levelsToCompute2, cancellationToken);
}
IEnumerable<SyntaxNode> enumerable4 = GetAttributes(typeDeclarationSyntax.AttributeLists).Concat(GetTypeParameterListAttributes(typeDeclarationSyntax.TypeParameterList));
builder.Add(DeclarationComputer.GetDeclarationInfo(model, node, getSymbol, enumerable4, cancellationToken));
break;
}
case SyntaxKind.EnumDeclaration:
{
EnumDeclarationSyntax enumDeclarationSyntax = (EnumDeclarationSyntax)(object)node;
Enumerator<EnumMemberDeclarationSyntax> enumerator3 = enumDeclarationSyntax.Members.GetEnumerator();
while (enumerator3.MoveNext())
{
EnumMemberDeclarationSyntax current3 = enumerator3.Current;
ComputeDeclarations(model, null, (SyntaxNode)(object)current3, shouldSkip, getSymbol, builder, levelsToCompute2, cancellationToken);
}
IEnumerable<SyntaxNode> attributes3 = GetAttributes(enumDeclarationSyntax.AttributeLists);
builder.Add(DeclarationComputer.GetDeclarationInfo(model, node, getSymbol, attributes3, cancellationToken));
break;
}
case SyntaxKind.EnumMemberDeclaration:
{
EnumMemberDeclarationSyntax obj2 = (EnumMemberDeclarationSyntax)(object)node;
IEnumerable<SyntaxNode> enumerable2 = Enumerable.Concat(second: GetAttributes(obj2.AttributeLists), first: (IEnumerable<SyntaxNode>)SpecializedCollections.SingletonEnumerable<EqualsValueClauseSyntax>(obj2.EqualsValue));
builder.Add(DeclarationComputer.GetDeclarationInfo(model, node, getSymbol, enumerable2, cancellationToken));
break;
}
case SyntaxKind.DelegateDeclaration:
{
DelegateDeclarationSyntax delegateDeclarationSyntax = (DelegateDeclarationSyntax)(object)node;
IEnumerable<SyntaxNode> enumerable6 = GetAttributes(delegateDeclarationSyntax.AttributeLists).Concat(GetParameterListInitializersAndAttributes(delegateDeclarationSyntax.ParameterList)).Concat(GetTypeParameterListAttributes(delegateDeclarationSyntax.TypeParameterList));
builder.Add(DeclarationComputer.GetDeclarationInfo(model, node, getSymbol, enumerable6, cancellationToken));
break;
}
case SyntaxKind.EventDeclaration:
{
EventDeclarationSyntax eventDeclarationSyntax = (EventDeclarationSyntax)(object)node;
if (eventDeclarationSyntax.AccessorList != null)
{
Enumerator<AccessorDeclarationSyntax> enumerator2 = eventDeclarationSyntax.AccessorList.Accessors.GetEnumerator();
while (enumerator2.MoveNext())
{
AccessorDeclarationSyntax current8 = enumerator2.Current;
ComputeDeclarations(model, null, (SyntaxNode)(object)current8, shouldSkip, getSymbol, builder, levelsToCompute2, cancellationToken);
}
}
IEnumerable<SyntaxNode> attributes6 = GetAttributes(eventDeclarationSyntax.AttributeLists);
builder.Add(DeclarationComputer.GetDeclarationInfo(model, node, getSymbol, attributes6, cancellationToken));
break;
}
case SyntaxKind.FieldDeclaration:
case SyntaxKind.EventFieldDeclaration:
{
BaseFieldDeclarationSyntax obj3 = (BaseFieldDeclarationSyntax)(object)node;
IEnumerable<SyntaxNode> attributes4 = GetAttributes(obj3.AttributeLists);
Enumerator<VariableDeclaratorSyntax> enumerator4 = obj3.Declaration.Variables.GetEnumerator();
while (enumerator4.MoveNext())
{
VariableDeclaratorSyntax current4 = enumerator4.Current;
IEnumerable<SyntaxNode> enumerable3 = ((IEnumerable<SyntaxNode>)SpecializedCollections.SingletonEnumerable<EqualsValueClauseSyntax>(current4.Initializer)).Concat(attributes4);
builder.Add(DeclarationComputer.GetDeclarationInfo(model, (SyntaxNode)(object)current4, getSymbol, enumerable3, cancellationToken));
}
break;
}
case SyntaxKind.ArrowExpressionClause:
if (node.Parent is BasePropertyDeclarationSyntax declarationWithExpressionBody)
{
builder.Add(GetExpressionBodyDeclarationInfo(declarationWithExpressionBody, (ArrowExpressionClauseSyntax)(object)node, model, getSymbol, cancellationToken));
}
break;
case SyntaxKind.PropertyDeclaration:
{
PropertyDeclarationSyntax propertyDeclarationSyntax = (PropertyDeclarationSyntax)(object)node;
if (propertyDeclarationSyntax.AccessorList != null)
{
Enumerator<AccessorDeclarationSyntax> enumerator2 = propertyDeclarationSyntax.AccessorList.Accessors.GetEnumerator();
while (enumerator2.MoveNext())
{
AccessorDeclarationSyntax current7 = enumerator2.Current;
ComputeDeclarations(model, null, (SyntaxNode)(object)current7, shouldSkip, getSymbol, builder, levelsToCompute2, cancellationToken);
}
}
if (propertyDeclarationSyntax.ExpressionBody != null)
{
ComputeDeclarations(model, null, (SyntaxNode)(object)propertyDeclarationSyntax.ExpressionBody, shouldSkip, getSymbol, builder, levelsToCompute, cancellationToken);
}
IEnumerable<SyntaxNode> attributes5 = GetAttributes(propertyDeclarationSyntax.AttributeLists);
IEnumerable<SyntaxNode> enumerable5 = ((IEnumerable<SyntaxNode>)SpecializedCollections.SingletonEnumerable<EqualsValueClauseSyntax>(propertyDeclarationSyntax.Initializer)).Concat(attributes5);
builder.Add(DeclarationComputer.GetDeclarationInfo(model, node, getSymbol, enumerable5, cancellationToken));
break;
}
case SyntaxKind.IndexerDeclaration:
{
IndexerDeclarationSyntax indexerDeclarationSyntax = (IndexerDeclarationSyntax)(object)node;
if (indexerDeclarationSyntax.AccessorList != null)
{
Enumerator<AccessorDeclarationSyntax> enumerator2 = indexerDeclarationSyntax.AccessorList.Accessors.GetEnumerator();
while (enumerator2.MoveNext())
{
AccessorDeclarationSyntax current2 = enumerator2.Current;
ComputeDeclarations(model, null, (SyntaxNode)(object)current2, shouldSkip, getSymbol, builder, levelsToCompute2, cancellationToken);
}
}
if (indexerDeclarationSyntax.ExpressionBody != null)
{
ComputeDeclarations(model, null, (SyntaxNode)(object)indexerDeclarationSyntax.ExpressionBody, shouldSkip, getSymbol, builder, levelsToCompute, cancellationToken);
}
IEnumerable<SyntaxNode> parameterListInitializersAndAttributes = GetParameterListInitializersAndAttributes(indexerDeclarationSyntax.ParameterList);
IEnumerable<SyntaxNode> attributes2 = GetAttributes(indexerDeclarationSyntax.AttributeLists);
parameterListInitializersAndAttributes = parameterListInitializersAndAttributes.Concat(attributes2);
builder.Add(DeclarationComputer.GetDeclarationInfo(model, node, getSymbol, parameterListInitializersAndAttributes, cancellationToken));
break;
}
case SyntaxKind.GetAccessorDeclaration:
case SyntaxKind.SetAccessorDeclaration:
case SyntaxKind.AddAccessorDeclaration:
case SyntaxKind.RemoveAccessorDeclaration:
case SyntaxKind.InitAccessorDeclaration:
{
AccessorDeclarationSyntax accessorDeclarationSyntax = (AccessorDeclarationSyntax)(object)node;
ArrayBuilder<SyntaxNode> instance = ArrayBuilder<SyntaxNode>.GetInstance();
ArrayBuilderExtensions.AddIfNotNull<SyntaxNode>(instance, (SyntaxNode)(object)accessorDeclarationSyntax.Body);
ArrayBuilderExtensions.AddIfNotNull<SyntaxNode>(instance, (SyntaxNode)(object)accessorDeclarationSyntax.ExpressionBody);
instance.AddRange(GetAttributes(accessorDeclarationSyntax.AttributeLists));
builder.Add(DeclarationComputer.GetDeclarationInfo(model, node, getSymbol, (IEnumerable<SyntaxNode>)instance, cancellationToken));
instance.Free();
break;
}
case SyntaxKind.MethodDeclaration:
case SyntaxKind.OperatorDeclaration:
case SyntaxKind.ConversionOperatorDeclaration:
case SyntaxKind.ConstructorDeclaration:
case SyntaxKind.DestructorDeclaration:
{
BaseMethodDeclarationSyntax baseMethodDeclarationSyntax = (BaseMethodDeclarationSyntax)(object)node;
IEnumerable<SyntaxNode> parameterListInitializersAndAttributes2 = GetParameterListInitializersAndAttributes(baseMethodDeclarationSyntax.ParameterList);
parameterListInitializersAndAttributes2 = EnumerableExtensions.Concat<SyntaxNode>(parameterListInitializersAndAttributes2, (SyntaxNode)(object)baseMethodDeclarationSyntax.Body);
if (baseMethodDeclarationSyntax is ConstructorDeclarationSyntax { Initializer: not null } constructorDeclarationSyntax)
{
parameterListInitializersAndAttributes2 = EnumerableExtensions.Concat<SyntaxNode>(parameterListInitializersAndAttributes2, (SyntaxNode)(object)constructorDeclarationSyntax.Initializer);
}
ArrowExpressionClauseSyntax expressionBodySyntax = GetExpressionBodySyntax(baseMethodDeclarationSyntax);
if (expressionBodySyntax != null)
{
parameterListInitializersAndAttributes2 = EnumerableExtensions.Concat<SyntaxNode>(parameterListInitializersAndAttributes2, (SyntaxNode)(object)expressionBodySyntax);
}
parameterListInitializersAndAttributes2 = parameterListInitializersAndAttributes2.Concat(GetAttributes(baseMethodDeclarationSyntax.AttributeLists));
if (node is MethodDeclarationSyntax { TypeParameterList: not null } methodDeclarationSyntax)
{
parameterListInitializersAndAttributes2 = parameterListInitializersAndAttributes2.Concat(GetTypeParameterListAttributes(methodDeclarationSyntax.TypeParameterList));
}
builder.Add(DeclarationComputer.GetDeclarationInfo(model, node, getSymbol, parameterListInitializersAndAttributes2, cancellationToken));
break;
}
case SyntaxKind.CompilationUnit:
{
CompilationUnitSyntax compilationUnitSyntax = (CompilationUnitSyntax)(object)node;
if (associatedSymbol is IMethodSymbol)
{
builder.Add(DeclarationComputer.GetDeclarationInfo(model, node, getSymbol, (IEnumerable<SyntaxNode>)(object)new CompilationUnitSyntax[1] { compilationUnitSyntax }, cancellationToken));
break;
}
Enumerator<MemberDeclarationSyntax> enumerator = compilationUnitSyntax.Members.GetEnumerator();
while (enumerator.MoveNext())
{
MemberDeclarationSyntax current = enumerator.Current;
ComputeDeclarations(model, null, (SyntaxNode)(object)current, shouldSkip, getSymbol, builder, levelsToCompute2, cancellationToken);
}
if (compilationUnitSyntax.AttributeLists.Any())
{
IEnumerable<SyntaxNode> attributes = GetAttributes(compilationUnitSyntax.AttributeLists);
builder.Add(DeclarationComputer.GetDeclarationInfo(model, node, false, attributes, cancellationToken));
}
break;
}
}
}
private static IEnumerable<SyntaxNode> GetAttributes(SyntaxList<AttributeListSyntax> attributeLists)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
Enumerator<AttributeListSyntax> enumerator = attributeLists.GetEnumerator();
while (enumerator.MoveNext())
{
AttributeListSyntax current = enumerator.Current;
Enumerator<AttributeSyntax> enumerator2 = current.Attributes.GetEnumerator();
while (enumerator2.MoveNext())
{
yield return (SyntaxNode)(object)enumerator2.Current;
}
}
}
private static IEnumerable<SyntaxNode> GetParameterListInitializersAndAttributes(BaseParameterListSyntax parameterList)
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
if (parameterList == null)
{
return SpecializedCollections.EmptyEnumerable<SyntaxNode>();
}
return ((IEnumerable<ParameterSyntax>)(object)parameterList.Parameters).SelectMany((ParameterSyntax p) => GetParameterInitializersAndAttributes(p));
}
private static IEnumerable<SyntaxNode> GetParameterInitializersAndAttributes(ParameterSyntax parameter)
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
return ((IEnumerable<SyntaxNode>)SpecializedCollections.SingletonEnumerable<EqualsValueClauseSyntax>(parameter.Default)).Concat(GetAttributes(parameter.AttributeLists));
}
private static IEnumerable<SyntaxNode> GetTypeParameterListAttributes(TypeParameterListSyntax typeParameterList)
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
if (typeParameterList == null)
{
return SpecializedCollections.EmptyEnumerable<SyntaxNode>();
}
return ((IEnumerable<TypeParameterSyntax>)(object)typeParameterList.Parameters).SelectMany((TypeParameterSyntax p) => GetAttributes(p.AttributeLists));
}
private static DeclarationInfo GetExpressionBodyDeclarationInfo(BasePropertyDeclarationSyntax declarationWithExpressionBody, ArrowExpressionClauseSyntax expressionBody, SemanticModel model, bool getSymbol, CancellationToken cancellationToken)
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
object obj;
if (!getSymbol)
{
obj = null;
}
else
{
ISymbol? declaredSymbol = model.GetDeclaredSymbol(declarationWithExpressionBody, cancellationToken);
ISymbol? obj2 = ((declaredSymbol is IPropertySymbol) ? declaredSymbol : null);
obj = ((obj2 != null) ? ((IPropertySymbol)obj2).GetMethod : null);
}
IMethodSymbol val = (IMethodSymbol)obj;
return new DeclarationInfo((SyntaxNode)(object)expressionBody, ImmutableArray.Create<SyntaxNode>((SyntaxNode)(object)expressionBody), (ISymbol)(object)val);
}
internal static ArrowExpressionClauseSyntax GetExpressionBodySyntax(CSharpSyntaxNode node)
{
ArrowExpressionClauseSyntax result = null;
switch (node.Kind())
{
case SyntaxKind.ArrowExpressionClause:
result = (ArrowExpressionClauseSyntax)node;
break;
case SyntaxKind.MethodDeclaration:
result = ((MethodDeclarationSyntax)node).ExpressionBody;
break;
case SyntaxKind.OperatorDeclaration:
result = ((OperatorDeclarationSyntax)node).ExpressionBody;
break;
case SyntaxKind.ConversionOperatorDeclaration:
result = ((ConversionOperatorDeclarationSyntax)node).ExpressionBody;
break;
case SyntaxKind.PropertyDeclaration:
result = ((PropertyDeclarationSyntax)node).ExpressionBody;
break;
case SyntaxKind.IndexerDeclaration:
result = ((IndexerDeclarationSyntax)node).ExpressionBody;
break;
case SyntaxKind.ConstructorDeclaration:
result = ((ConstructorDeclarationSyntax)node).ExpressionBody;
break;
case SyntaxKind.DestructorDeclaration:
result = ((DestructorDeclarationSyntax)node).ExpressionBody;
break;
default:
ExceptionUtilities.UnexpectedValue((object)node.Kind());
break;
}
return result;
}
}