Roslyn - мне нужно найти ссылки на метод, и у меня есть код ниже для него.
Но проблема в том, когда у меня есть два метода с одинаковым именем.
например.
Метод 1:
public string GetName(string id)
{
}
public string GetName()
{
}
Здесь у меня есть два метода с одинаковым именем «GetName», мой код находит первый метод (FirstOrDefault также является причиной), но есть ли способ найти ссылку на метод вместе со списком аргументов?
Код:
public static async Task<List<ReferenceLocation>> FindMethodReferences(string solutionPath, string methodName)//*Here methodName is "GetName"*
{
var msWorkspace = MSBuildWorkspace.Create();
ISymbol methodSymbol = null;
bool found = false;
var solution = await msWorkspace.OpenSolutionAsync(solutionPath);
foreach (var project in solution.Projects)
{
foreach (var document in project.Documents)
{
var model = await document.GetSemanticModelAsync();
var methodInvocation = await document.GetSyntaxRootAsync();
InvocationExpressionSyntax node = null;
try
{
***//Is there any condition I should add here to find the method references with arg list***
node = methodInvocation.DescendantNodes()
.OfType<InvocationExpressionSyntax>().FirstOrDefault(x => ((MemberAccessExpressionSyntax)x.Expression).Name.ToString() == methodName);
if (node == null)
continue;
}
catch
{
continue;
}
methodSymbol = model.GetSymbolInfo(node).Symbol;
found = true;
break;
}
if (found) break;
}
return SymbolFinder.FindReferencesAsync(methodSymbol, solution).Result.SelectMany(item => item.Locations).ToList();
}