Roslyn - 找出是否调用方法调用方法

时间:2017-04-08 08:39:18

标签: c# roslyn

我正在努力学习如何使用罗斯林,并且我不断遇到一些障碍,这些障碍需要花费很多心思来弄清楚如何绕过。目前,专注于试验以了解什么是可能的。

void Method1(){}
void Method2()
{
    Method1();
}
void Method3()
{
    Method2();
}

如果我想检查Method2是否调用Method1,这很简单,因为我只看它的语法树。据我所知,如果我正在查看Method3但我想找到Method2,我应该使用语义树,因为Method2可能在不同的文件/名称空间/等中。

我的问题是,如果我只有Method2的IMethodSymbol,有没有办法找出Method2是否调用Method1?

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您知道如何从MethodDeclarationSyntax Method3IMethodSymbol获取Method2MethodDeclarationSyntax获取Method2 } Method1,但您不知道如何从IMethodSymbol获取Method2MethodDeclarationSyntaxMethod2

为此,您可以使用DeclaringSyntaxReferences

var method2Syntax = symbol.DeclaringSyntaxReferences.Single().GetSyntax();