Получить имя метода ReferencedSymbol - PullRequest
0 голосов
/ 25 августа 2018

У меня есть ссылки из символа метода, но мне нужно получить имя метода, который вызывает символ метода. Любая идея, как я могу извлечь эту информацию из ссылочного объекта? Вот код:

var references = SymbolFinder.FindReferencesAsync(symbol, solution).Result;

if (references != null && references.Any())
{
    foreach (var reference in references)
    {
        foreach (var location in reference.Locations)
        {
            // Get name of the method of the reference 
        }
    }
}

1 Ответ

0 голосов
/ 25 августа 2018

Вам нужно получить SemanticModel для вашей ссылки, а затем вы должны получить самый внутренний вмещающий символ, который содержит вашу ссылку:

...
foreach (var location in reference.Locations)
{
    if (location.Document.TryGetSemanticModel(out var referenceSemanticModel))
    {
        var enclosingSymbol = referenceSemanticModel.GetEnclosingSymbol(location.Location.SourceSpan.Start);
        if (!(enclosingSymbol is null))
        {
            // NOTE: if your symbol are referenced by lambda then this name 
            // would be the innermost enclosing member which contains lambda,
            // so be careful
            var name = enclosingSymbol.Name;
        }
    }
}
...