使用Roslyn查找属性“invocations”

时间:2014-02-17 23:19:14

标签: c# properties roslyn

我正在尝试构建C#方法和属性的调用图。这实质上意味着我在项目中搜索MethodDeclarationSyntaxPropertyDeclarationSyntax个节点。然后,我通过以下方式查找方法调用来构建这些节点之间的连接:

SyntaxNode node = ...; //Some syntax node
var methodInvocations = node.DescendantNodesAndSelf().OfType<InvocationExpressionSyntax>();
//Process these method invocations

是否有类似的方法或推荐的方法来查找所有属性“调用”?我相信C#编译器会在编译时将属性分解为Getter和Setter函数。

使用Roslyn检测属性使用的最佳方法是什么?

1 个答案:

答案 0 :(得分:6)

Roslyn模型遵循source而不是IL,因此不会表示对get和set方法的单独调用。

为此,您需要找到所有MemberAccessExpressionIdentifierNameSyntax个节点,并调用GetSymbolInfo以查看它们是否引用该属性。

或者,您应该考虑提升级别以使用工作区模型并改为调用FindReferences API。