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?
感谢您的帮助
如果我没理解错的话,你知道如何从 MethodDeclarationSyntax
到 Method3
到 IMethodSymbol
到 Method2
和从 MethodDeclarationSyntax
到 Method2
到 Method1
,但你不知道如何从 IMethodSymbol
for Method2
到 MethodDeclarationSyntax
再到 Method2
.
为此,您可以使用 DeclaringSyntaxReferences
:
var method2Syntax = symbol.DeclaringSyntaxReferences.Single().GetSyntax();
我正在努力学习如何使用 Roslyn,但我一直遇到障碍,需要花很多心思才能弄清楚如何绕过。目前,专注于试验以了解可能性。
void Method1(){}
void Method2()
{
Method1();
}
void Method3()
{
Method2();
}
如果我想检查 Method2 是否调用了 Method1,这很容易,因为我只需要查看它的语法树。据我了解,如果我正在查看 Method3 并且我想找到 Method2,我应该使用语义树,因为 Method2 可能位于不同的 file/namespace/etc.
我的问题是,如果我只有 Method2 的 IMethodSymbol,有什么办法可以查明 Method2 是否调用了 Method1?
感谢您的帮助
如果我没理解错的话,你知道如何从 MethodDeclarationSyntax
到 Method3
到 IMethodSymbol
到 Method2
和从 MethodDeclarationSyntax
到 Method2
到 Method1
,但你不知道如何从 IMethodSymbol
for Method2
到 MethodDeclarationSyntax
再到 Method2
.
为此,您可以使用 DeclaringSyntaxReferences
:
var method2Syntax = symbol.DeclaringSyntaxReferences.Single().GetSyntax();