Найдите использование ITypeElement или IDeclaredElement с Resharper SDK - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь создать пользовательскую навигацию для плагина с помощью плагина Resharper SDK.Мне удалось получить IDeclaredElement или ITypeElement, когда я стою на своем типе и выполняю

var referenceName = dataContext.GetSelectedTreeNode<IReferenceName>();
var declaration = referenceName?.Reference.Resolve()?.DeclaredElement as ITypeElement;
if (declaration != null)
{
    //TODO: Find all usages here and check if my type is used as single argument to a method (Visitor pattern)
}

Документы SDK действительно редки, и я ничего не могу найти по этому вопросу.Спасибо

1 Ответ

0 голосов
/ 28 марта 2019

После некоторых проб и ошибок я нашел рабочее решение.IFinder.FindAllReferences

var foundMethods = declaration
    .GetPsiServices()
    .Finder
    .FindAllReferences(declaration)
    .Select(r => ((r.GetTreeNode().Parent as IUserTypeUsage)?
        .Parent as IRegularParameterDeclaration)?
        .Parent as IFormalParameterList)
    .Where(list => list != null && list.ParameterDeclarations.Count == 1)
    .Select(m => m.Parent as IMethodDeclaration)
    .Where(m => m != null)
    .ToList();

Полный код здесь

...