私は ReSharper 8 SDK を使用しており、ジェネリック型が特定の型である特定のジェネリック インターフェイスのすべての継承者を検索したいと考えています。より一般的な質問をして、ほとんどの方法で解決しましたが、必要な実装ICommandHandler<T>
は 1 つではなく、任意の実装しか見つけることができません。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
検索したい閉じたジェネリック型を表す をどのように作成するのですか?
または、代わりに、返された継承のコレクションで、ジェネリック型パラメーターとして開始したクラスを持つ型を検索するにはどうすればよいですか?