Найти ссылки на метод с параметрами - PullRequest
0 голосов
/ 03 мая 2018

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();
}
...