Я использую SDK ReSharper 8 и хочу найти все наследования определенного общего интерфейса, где общий тип - это особый тип. У меня есть asked a more general question который получил большую часть пути, но я только в состоянии найти любую реализацию ICommandHandler<T>
и не один реализации, я хочу, ICommandHandler<TestCommand>
Как создать «ITypeElement» с представлением закрытого родового типа в плагине ReSharper?
это код у меня есть:
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();
}
}
если I tooltip commandHandlerType после этой строки:
var commandHandlerType = TypeFactory.CreateType (genericTypeElement, theType);
Я вижу, что тип правильно указано:
Но тогда, когда я получаю ITypeElement
от этого типа, чтобы пройти в мой поиск, используя эту строку
var handlerTypeelement = commandHandlerType.GetTypeElement();
Я, кажется, потеряли тип:
И поэтому мой поиск находит все реализации ICommandHandler<T>
.
Так что мой вопрос: как мне создать ITypeElement
, который представляет закрытый тип, который я хочу найти?
Или, альтернативно: как я могу найти возвращаемую коллекцию наследователей для типа, который имеет класс, с которого я начал, в качестве параметра типового типа?
Как я уже создал общий тип ранее, я мог бы просто использовать метод GetAllSuperTypes() ', а затем проверить каждый возвращаемый тип, чтобы узнать, был ли это общий тип, который мне интересен, и если бы это было тогда, я мог бы перейти к Это. Так что теперь мне нужно, чтобы все это работало. Просто нужно сделать типы команд/обработчиков доступными для чтения из конфигурации, а затем он должен быть достаточно гибким, чтобы в целом был полезен. –
Спасибо за помощь. Очень признателен. –
ОК, поэтому [другой блокиратор] (http://stackoverflow.com/questions/31168095/how-do-i-get-a-window-context-so-i-can-create-navigationoptions-in-a-resharper -p), если вы можете подтолкнуть меня в правильном направлении, пожалуйста ... –