C# Roslyn-如何在DiagnosticanAnalyzer类中获取变量的所有引用?
我目前正试图与Roslyn一起定义代码修复。我有一个C# Roslyn-如何在DiagnosticanAnalyzer类中获取变量的所有引用?,c#,refactoring,roslyn,C#,Refactoring,Roslyn,我目前正试图与Roslyn一起定义代码修复。我有一个SyntaxNode变量 我想在我的DiagnosticAnalyzer类中查找该变量的所有引用。不幸的是,SymbolFinder.FindReferencesAsync方法需要一个Solution参数,如果我知道得很清楚,我无法从DiagnosticanAnalyzer类中获取当前解决方案 如何在DiagnosticanAnalyzer类中获取变量的所有引用?我实现了一个类似的分析器,算法如下(它在2000多行文档上运行约31ms,但几乎总
SyntaxNode
变量
我想在我的DiagnosticAnalyzer
类中查找该变量的所有引用。不幸的是,SymbolFinder.FindReferencesAsync
方法需要一个Solution
参数,如果我知道得很清楚,我无法从DiagnosticanAnalyzer
类中获取当前解决方案
如何在
DiagnosticanAnalyzer
类中获取变量的所有引用?我实现了一个类似的分析器,算法如下(它在2000多行文档上运行约31ms,但几乎总是在10ms以下)
SemanticModel.GetRoot()中的所有节点,并收集表达式和本地声明
IDisposable
,如果实现了,则存储在HashSet1
HashSet2
HashSet1
中但不在HashSet2
中的符号的第一个SyntaxReference
上报告诊断这很有效,但遗憾的是,我不知道是否有更有效/更清洁的方法。如果您愿意,我可以共享部分代码。当您说“variable”时,您是指使用
LocalDeclarationStatementSyntax
声明的局部变量吗?如果是,则其范围仅限于声明它的成员。搜索所有用法应该很容易。也就是说,你需要它们做什么?您确定不能使用context.SemanticModel.AnalyzeDataFlow(localDeclaration)
?我说的“variable”是指IdentifierNameSyntax。我试图为遗忘的处置创建一个代码修复程序。但是在下面的场景中,我需要dispose检查的引用:myIDisposable=new myIDisposable();var tmp=MyIDisable;tmp.Dispose()<代码>IdentifierNameSyntax只是一个名称。我的问题是这个名字指的是什么。只有局部变量?考虑到您的用例,我假设您只需要查看局部变量,而不是字段或参数。这意味着您可以搜索封闭的成员。Sonarint在一次性物品上有两个分析器。总的来说,这个话题很难。如何处理从方法返回的一次性局部变量。你如何处理字段?您如何处理传递给其他一次性设备的一次性设备。。。