本文整理汇总了C#中MemberDeclarationSyntax.DescendantNodesAndSelf方法的典型用法代码示例。如果您正苦于以下问题:C# MemberDeclarationSyntax.DescendantNodesAndSelf方法的具体用法?C# MemberDeclarationSyntax.DescendantNodesAndSelf怎么用?C# MemberDeclarationSyntax.DescendantNodesAndSelf使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MemberDeclarationSyntax
的用法示例。
在下文中一共展示了MemberDeclarationSyntax.DescendantNodesAndSelf方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: IsAltered
bool IsAltered(SemanticModel model, MemberDeclarationSyntax member, ISymbol symbol, CancellationToken token, out bool wasUsed)
{
wasUsed = false;
foreach (var usage in member.DescendantNodesAndSelf().Where(n => n.IsKind(SyntaxKind.IdentifierName)).OfType<ExpressionSyntax>())
{
var info = model.GetSymbolInfo(usage).Symbol;
if (info == symbol)
wasUsed = true;
if (!usage.IsWrittenTo())
continue;
if (member.IsKind(SyntaxKind.ConstructorDeclaration) && !usage.Ancestors().Any(a => a.IsKind(SyntaxKind.AnonymousMethodExpression) || a.IsKind(SyntaxKind.SimpleLambdaExpression) || a.IsKind(SyntaxKind.ParenthesizedLambdaExpression)))
{
if (member.GetModifiers().Any(m => m.IsKind(SyntaxKind.StaticKeyword)) == info.IsStatic)
continue;
}
if (info == symbol)
return true;
}
return false;
}
示例2: IsAltered
bool IsAltered(SemanticModel model, MemberDeclarationSyntax member, ISymbol symbol, CancellationToken token, out bool wasUsed)
{
wasUsed = false;
foreach (var usage in member.DescendantNodesAndSelf().Where(n => n.IsKind(SyntaxKind.IdentifierName)).OfType<ExpressionSyntax>())
{
var info = model.GetSymbolInfo(usage).Symbol;
if (info == symbol)
wasUsed = true;
if (!usage.IsWrittenTo())
{
// Special case: If variable is of a value type, check if one of its members is altered.
var memberAccExpr = usage.Parent as MemberAccessExpressionSyntax;
if (symbol.GetReturnType().IsReferenceType
|| (memberAccExpr == null)
|| (info != symbol)
|| (memberAccExpr.Name == usage)
|| !memberAccExpr.IsWrittenTo())
continue;
}
if (member.IsKind(SyntaxKind.ConstructorDeclaration) && !usage.Ancestors().Any(a => a.IsKind(SyntaxKind.AnonymousMethodExpression) || a.IsKind(SyntaxKind.SimpleLambdaExpression) || a.IsKind(SyntaxKind.ParenthesizedLambdaExpression)))
{
if (member.GetModifiers().Any(m => m.IsKind(SyntaxKind.StaticKeyword)) == info.IsStatic)
continue;
}
if (info == symbol)
return true;
}
return false;
}