Как определить все классы, реализующие определенный интерфейс, которые НЕ расширяют какой-либо базовый класс?

У меня есть какой-то интерфейс Action, и большинство классов, реализующих этот интерфейс, являются производными от некоторой базы AbstractAction. Но я предполагаю, что есть некоторые классы, которые реализуют этот интерфейс, но не расширяют этот базовый класс.

Есть ли способ использовать IntelliJ для идентификации таких классов? (в идеале: использовать версию сообщества)

Редактировать: это не дубликат Как показать всех родителей и подклассы класса в IntelliJ IDEA?, так как я пытаюсь объединить такое условие, как «реализует X и НЕ расширяет Y».

Сэр, я не думаю, что эта опция доступна в версии сообщества Intellij, я не знаю об окончательной версии.

Sambit 19.06.2019 11:23

Есть комментарии минусовщиков?

GhostCat 19.06.2019 11:23

Я думаю, что ни одна IDE, такая как Eclipse и Idea, не предоставляет эту функцию. Я думаю, что такая функция должна быть добавлена ​​в IDE для большего анализа.

Sambit 19.06.2019 11:35

Могу я спросить, каков ваш вариант использования? Может быть, вы можете использовать конфигурацию checkstyle, чтобы предупредить, если класс реализует X и не расширяет Y?

sfiss 19.06.2019 11:46

@sfiss Я хочу добавить пользовательский метод toString() для всех действий. Я помещу его в базовый класс, но наверняка он также должен войти в любой другой класс, реализующий интерфейс, но не наследующий от базового класса.

GhostCat 19.06.2019 12:15

Кстати: есть этот невероятно мощный Live Plugin github.com/dkandalov/live-плагин, который может прокачать IDEA, например. таким образом, чтобы написать поиск в Groovy и использовать окно инструмента «Найти» для отображения результатов. Так что только небо - предел в поиске вещей ;)

Jens Nerche 20.06.2019 08:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
6
194
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Работает только в Окончательная версия Intellij IDEA:
Единственное, что мне приходит в голову, чтобы решить вашу проблему напрямую с помощью Intellij IDEA, — это сгенерировать диаграмма классов uml вашего интерфейса Action.

Это позволяет визуально искать шаблоны иерархии.

Вот диаграмма для JTextComponent в качестве примера:

Другой подход — использование правильного инструмента для работы

помощник — это инструмент, который анализирует ваш Java-код и его отношения и сохраняет его в базе данных neo4j. Это позволяет вам описать вашу проблему как запрос графа с шифровать.

Самый простой способ начать — это

Пример: Запрос для поиска всех классов, реализующих aInteface, будет выглядеть так:

MATCH (i:Interface {name:"aIntefaces"}  )<-[:IMPLEMENTS]- (c) RETURN i,c

Запрос к вашей проблеме будет выглядеть так:

MATCH 
   (i:Interface {name:'Action'}  )<-[:IMPLEMENTS|EXTENDS*1..10]- (class), 
   (abstractAction:Class {name:'AbstractAction'}) 
   where not (class)-->(abstractAction)   
RETURN class

Служба поддержки JetBrains посоветовала мне изучить «структурный поиск/замену», но пока мне нравится идея использования jQasssistant.

GhostCat 19.06.2019 14:10

В случае, если вы хотите получить еще один акцепт сегодня... возможно, оформите заказ stackoverflow.com/questions/56667478/… ;-)

GhostCat 19.06.2019 14:19

Другие вопросы по теме