我正在尝试构建C#方法和属性的调用图。这实质上意味着我在项目中搜索MethodDeclarationSyntax
和PropertyDeclarationSyntax
个节点。然后,我通过以下方式查找方法调用来构建这些节点之间的连接:
SyntaxNode node = ...; //Some syntax node
var methodInvocations = node.DescendantNodesAndSelf().OfType<InvocationExpressionSyntax>();
//Process these method invocations
是否有类似的方法或推荐的方法来查找所有属性“调用”?我相信C#编译器会在编译时将属性分解为Getter和Setter函数。
使用Roslyn检测属性使用的最佳方法是什么?
答案 0 :(得分:6)
Roslyn模型遵循source而不是IL,因此不会表示对get和set方法的单独调用。
为此,您需要找到所有MemberAccessExpression
和IdentifierNameSyntax
个节点,并调用GetSymbolInfo以查看它们是否引用该属性。
或者,您应该考虑提升级别以使用工作区模型并改为调用FindReferences
API。