【发布时间】:2018-04-26 21:47:23
【问题描述】:
通过以下代码,我可以获得方法的引用。现在我想得到这个方法的返回语句。我知道我应该使用 ReturnStatementSyntax。我是 Roslyn 的新手,所以不确定如何获取方法的返回语句。
public List<ReferencedSymbol> Find(string solutionPath, string methodName)
{
var msWorkspace = MSBuildWorkspace.Create();
var solution = msWorkspace.OpenSolutionAsync(solutionPath).Result;
InvocationExpressionSyntax node = null;
ISymbol symbol = null;
bool flag = false;
foreach (var project in solution.Projects)
{
foreach (var document in project.Documents)
{
var model = document.GetSemanticModelAsync().Result;
var methodInvocation = document.GetSyntaxRootAsync().Result;
node = methodInvocation.DescendantNodes().OfType<InvocationExpressionSyntax>()
.Where(x => ((MemberAccessExpressionSyntax)x.Expression).Name.ToString() == methodName)
.FirstOrDefault();
//I am not sure how should I get return statement for a method using ReturnStatementSyntax
var returnStatement = methodInvocation.DescendantNodes().OfType<ReturnStatementSyntax>().ToList();
if (node == null)
continue;
symbol = model.GetSymbolInfo(node).Symbol;
flag = true;
break;
}
if (flag) break;
}
return SymbolFinder.FindReferencesAsync(symbol, solution).Result.ToList();
}
【问题讨论】: