使用 Resharper SDK 查找 ITypeElement 或 IDeclaredElement 的用法
Posted
技术标签:
【中文标题】使用 Resharper SDK 查找 ITypeElement 或 IDeclaredElement 的用法【英文标题】:Find usages of ITypeElement, or IDeclaredElement with Resharper SDK 【发布时间】:2019-03-26 08:50:19 【问题描述】:我正在尝试使用 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】:经过反复试验,我找到了一个可行的解决方案。 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();
完整代码here
【讨论】:
以上是关于使用 Resharper SDK 查找 ITypeElement 或 IDeclaredElement 的用法的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Resharper SDK 从 IClrDeclaredElement 获取 IDeclaredType
如何在 ReSharper 插件中创建一个代表封闭泛型类型的“ITypeElement”?
如何使用 ReSharper SDK 创建 [CustomAttribute(typeof(GenericType<,>))]?