Roslyn Get Method Declaration from InvocationExpression

僤鯓⒐⒋嵵緔 提交于 2019-11-29 12:13:41

If you need the declaration of the method that you are calling, you can get that as follows.

In the first step, you find out what method it is that is being called:

var methodSymbol = context
    .SemanticModel
    .GetSymbolInfo(invocation, context.CancellationToken)
    .Symbol as IMethodSymbol;

Remember that there are various reasons why the methodSymbol may be null (e.g. you were invoking a delegate, not a method), so test for that.

Then you can find the declaring syntax references, and take the first one:

var syntaxReference = methodSymbol
    .DeclaringSyntaxReferences
    .FirstOrDefault();

This can be null as well, e.g. when you were calling a method from another assembly, so test for that.

Finally:

var declaration = syntaxReference.GetSyntax(context.CancellationToken);

That gives you the syntax. Should you need a semantic model for that declaration, you can get that using

var semanticModel = context.Compilation.GetSemanticModel(declaration.SyntaxTree);
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!