IntelliJ Structural Search для поиска классов, которые реализуют A, но не B - PullRequest
5 голосов
/ 06 июня 2011

Я пытаюсь использовать функцию структурного поиска IntelliJ 10.5 для поиска классов, которые реализуют интерфейс, A , но не реализуют другой интерфейс, B .

Сначала выполняя поиск классов, которые реализуют A , а затем ограничивая область поиска «предыдущими результатами поиска», легко сократить это до простого поиска классов, которые не реализуют B , что концептуально довольно просто.К сожалению, мне пока не удалось его осуществить.

Если я ищу

class $clazz$ implements $B$ {}

, а затем отмечаю 'инвертировать условие' в текстовых ограничениях для переменной B, кажется,найти «все классы, которые реализуют что-то отличное от B », даже если они также реализуют B .Я также пытался пометить 'инвертировать условие' в переменной 'полное совпадение', и ее эффект не сразу очевиден, но определенно не то, что я ищу.

Случайно, кто-то еще спросил похожий вопрос на форумах IntelliJ, но не получил любви.Помоги мне, stackoverflow!

1 Ответ

3 голосов
/ 12 июля 2011

Чтобы найти классы, которые реализуют InterfaceA, но не реализуют InterfaceB, я сделал следующее:

  1. Поиск> Поиск по структуре
  2. Нажмите Скопируйте существующий шаблон
  3. Выберите разработчиков интерфейса (в иерархии) и нажмите OK
  4. Нажмите Изменить переменные
  5. Выберите Интерфейс в списке Переменные
  6. Введите Интерфейс в Текст / регулярное выражение и нажмите OK
  7. Нажмите Найти
  8. Поиск> Поиск по структуре
  9. Нажмите Редактировать переменные
  10. Выбрать Интерфейс в списке Переменные
  11. Введите ИнтерфейсB в Текст / регулярное выражение , 0 в Минимальное количество и 0 в Максимальное количество и нажмите OK
  12. Выберите Предыдущие результаты поиска в Scope выпадающий список
  13. Нажмите Найти

Примечание. У меня возникли проблемы при попытке использовать кнопку Редактировать запрос на шаге 8Я не исследовал / повторил попытку, но возвращение в меню и выбор Поиск> Поиск по структуре определенно сработало.

...