men*_*eng 6 c# roslyn roslyn-code-analysis
我正在编写Roslyn分析器,以在特定类的某个方法中使用某个库方法时引发诊断,但是我无法在父级或祖先语法节点中检索该符号。
例如,
class C
{
void M()
{
MyLibrary.SomeMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
这是分析代码SyntaxNode的SyntaxKind.InvocationExpression
private void AnalyzeNode(SyntaxNodeAnalysisContext context)
{
var invocationExpression = context.Node as InvocationExpressionSyntax;
var methodSymbol = context.SemanticModel.GetSymbolInfo(invocationExpression).Symbol as IMethodSymbol;
if (methodSymbol == null) { return; }
// check if it is the library method I am interested in. No problems here
if (!methodSymbol.Name.Equals("SomeMethod") ||
!methodSymbol.ContainingSymbol.ToString().Equals("MyNamespace.MyLibrary"))
{ return; }
// this retrieves outer method "M".
var outerMethodSyntax = invocationExpression.FirstAncestorOrSelf<MethodDeclarationSyntax>();
if (outerMethodSyntax == null) { return; }
// symbol.Symbol is always null here
var symbol = context.SemanticModel.GetSymbolInfo(outerMethodSyntax);
...
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,是否有可能SymbolInfo从一个祖先那里获取信息SyntaxNode。
我的方法是正确的还是应该尝试其他方法?
| 归档时间: |
|
| 查看次数: |
1011 次 |
| 最近记录: |