簡體   English   中英

Roslyn - 如何在DiagnosticAnalyzer類中獲取變量的所有引用?

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

我目前正在嘗試使用Roslyn定義代碼修復程序。 我有一個SyntaxNode變量。

我想在我的DiagnosticAnalyzer類中找到該變量的所有引用。 不幸的是, SymbolFinder.FindReferencesAsync方法需要一個Solution參數,如果我知道的話,我無法從DiagnosticAnalyzer類中獲取當前的解決方案。

如何在DiagnosticAnalyzer類中獲取變量的所有引用?

我實現了一個類似的分析器,算法如下(它在2000+行Document上運行~31ms,但幾乎總是在10ms以下)

  1. 遍歷SemanticModel.GetRoot()所有節點並收集Expressions和LocalDeclarations
  2. 獲取相應標識符的符號
  3. 檢查它是否實現了IDisposable ,如果存在,則存儲在HashSet1
  4. 通過調用迭代調用的方法是Dispose
  5. 從Invocation獲取符號,存儲在HashSet2
  6. 診斷報告的第一SyntaxReference是在符號HashSet1但不是在HashSet2

這很好用,但遺憾的是我不知道是否有更有效/更清潔的方法。 如果你願意,我可以分享部分代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM