Roslyn - 如何在 DiagnosticAnalyzer class 获取变量的所有引用?

Roslyn - How can I get all references of a variable at DiagnosticAnalyzer class?

我目前正在尝试使用 Roslyn 定义代码修复。我有一个 SyntaxNode 变量。

我想在我的 DiagnosticAnalyzer class 中找到该变量的所有引用。不幸的是 SymbolFinder.FindReferencesAsync 方法需要一个 Solution 参数,如果我很清楚,我无法从 DiagnosticAnalyzer class.

中获得当前解决方案

如何获取 DiagnosticAnalyzer class 处变量的所有引用?

我实现了一个类似的分析器,算法如下(在 2000 多行文档上 运行 约 31 毫秒,但几乎总是低于 10 毫秒)

  1. 遍历 SemanticModel.GetRoot() 中的所有节点并收集 Expressions 和 LocalDeclarations
  2. 获取对应Identifier的符号
  3. 检查它是否实现了 IDisposable,如果实现了就存储在 HashSet1
  4. 迭代调用的方法是 Dispose
  5. 从调用中获取符号,存储在HashSet2
  6. HashSet1 中但不在 HashSet2
  7. 中的符号的第一个 SyntaxReference 报告诊断

这很好用,但遗憾的是我不知道是否有更有效/更清洁的方法来做到这一点。如果你愿意,我可以分享部分代码。