0

我正在尝试使用 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 文档非常稀少,我没有找到任何关于该主题的内容。谢谢

4

1 回答 1

0

经过反复试验,我找到了一个可行的解决方案。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();

完整代码在这里

于 2019-03-28T08:22:36.523 回答