Roslyn - 查明被调用的方法是否调用了方法

Roslyn - Find out if called method calls method

我正在努力学习如何使用 Roslyn,但我一直遇到障碍,需要花很多心思才能弄清楚如何绕过。目前,专注于试验以了解可能性。

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

如果我想检查 Method2 是否调用了 Method1,这很容易,因为我只需要查看它的语法树。据我了解,如果我正在查看 Method3 并且我想找到 Method2,我应该使用语义树,因为 Method2 可能位于不同的 file/namespace/etc.

我的问题是,如果我只有 Method2 的 IMethodSymbol,有什么办法可以查明 Method2 是否调用了 Method1?

感谢您的帮助

如果我没理解错的话,你知道如何从 MethodDeclarationSyntaxMethod3IMethodSymbolMethod2 和从 MethodDeclarationSyntaxMethod2Method1,但你不知道如何从 IMethodSymbol for Method2MethodDeclarationSyntax 再到 Method2.

为此,您可以使用 DeclaringSyntaxReferences:

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