小编men*_*eng的帖子

Roslyn:在父代或祖先SyntaxNode中检索Symbol

我正在编写Roslyn分析器,以在特定类的某个方法中使用某个库方法时引发诊断,但是我无法在父级或祖先语法节点中检索该符号。

例如,

class C
{
    void M()
    {
        MyLibrary.SomeMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是分析代码SyntaxNodeSyntaxKind.InvocationExpression

private void AnalyzeNode(SyntaxNodeAnalysisContext context)
{
    var invocationExpression = context.Node as InvocationExpressionSyntax;
    var methodSymbol = context.SemanticModel.GetSymbolInfo(invocationExpression).Symbol as IMethodSymbol;
    if (methodSymbol == null) { return; }
    // check if it is the library method I am interested in. No problems here
    if (!methodSymbol.Name.Equals("SomeMethod") || 
        !methodSymbol.ContainingSymbol.ToString().Equals("MyNamespace.MyLibrary"))
    { return; }


    // this retrieves outer method "M".
    var outerMethodSyntax = invocationExpression.FirstAncestorOrSelf<MethodDeclarationSyntax>();
    if (outerMethodSyntax == null) { return; }

    // symbol.Symbol …
Run Code Online (Sandbox Code Playgroud)

c# roslyn roslyn-code-analysis

6
推荐指数
1
解决办法
1011
查看次数

标签 统计

c# ×1

roslyn ×1

roslyn-code-analysis ×1