我正在使用 ReSharper 8 sdk 并希望找到特定泛型接口的所有继承者,其中泛型类型是特定类型。我已经问了一个更一般的问题,它已经解决了大部分问题,但我只能找到任何实现,ICommandHandler<T>
而不是我想要的一个实现,ICommandHandler<TestCommand>
这是我的代码:
foreach (var psiModule in declaredElement.GetPsiServices().Modules.GetModules())
{
IDeclaredType genericType = TypeFactory.CreateTypeByCLRName("HandlerNavigationTest.ICommandHandler`1", psiModule, theClass.ResolveContext);
var genericTypeElement = genericType.GetTypeElement();
if (genericTypeElement != null)
{
var theType = TypeFactory.CreateType(originalTypeElement);
var commandHandlerType = TypeFactory.CreateType(genericTypeElement,theType);
var handlerTypeelement = commandHandlerType.GetTypeElement();
solution.GetPsiServices().Finder.FindInheritors(handlerTypeelement, searchDomainFactory.CreateSearchDomain(solution, true),
inheritorsConsumer, NullProgressIndicator.Instance);
var inheritedInstance= inheritorsConsumer.FoundElements.First();
var sourceFile = inheritedInstance.GetSourceFiles().First();
}
}
如果我在此行之后提示 commandHandlerType:
var commandHandlerType = TypeFactory.CreateType(genericTypeElement,theType);
我看到正确指定了类型:
但是当我ITypeElement
从这种类型中获取到使用这条线传递给我的搜索时
var handlerTypeelement = commandHandlerType.GetTypeElement();
我似乎失去了类型:
所以我的搜索找到了ICommandHandler<T>
.
所以我的问题是,如何创建ITypeElement
代表我要搜索的封闭泛型类型的?
或者:如何在返回的继承者集合中搜索以我开始的类作为泛型类型参数的类型?