У меня есть какой-то интерфейс Action
, и большинство классов, реализующих этот интерфейс, являются производными от некоторой базы AbstractAction
. Но я предполагаю, что есть некоторые классы, которые реализуют этот интерфейс, но не расширяют этот базовый класс.
Есть ли способ использовать IntelliJ для идентификации таких классов? (в идеале: использовать версию сообщества)
Редактировать: это не дубликат Как показать всех родителей и подклассы класса в IntelliJ IDEA?, так как я пытаюсь объединить такое условие, как «реализует X и НЕ расширяет Y».
Есть комментарии минусовщиков?
Я думаю, что ни одна IDE, такая как Eclipse и Idea, не предоставляет эту функцию. Я думаю, что такая функция должна быть добавлена в IDE для большего анализа.
Могу я спросить, каков ваш вариант использования? Может быть, вы можете использовать конфигурацию checkstyle, чтобы предупредить, если класс реализует X и не расширяет Y?
@sfiss Я хочу добавить пользовательский метод toString() для всех действий. Я помещу его в базовый класс, но наверняка он также должен войти в любой другой класс, реализующий интерфейс, но не наследующий от базового класса.
Кстати: есть этот невероятно мощный Live Plugin github.com/dkandalov/live-плагин, который может прокачать IDEA, например. таким образом, чтобы написать поиск в Groovy и использовать окно инструмента «Найти» для отображения результатов. Так что только небо - предел в поиске вещей ;)
Работает только в Окончательная версия Intellij IDEA:
Единственное, что мне приходит в голову, чтобы решить вашу проблему напрямую с помощью Intellij IDEA, — это сгенерировать диаграмма классов uml вашего интерфейса Action
.
Это позволяет визуально искать шаблоны иерархии.
Вот диаграмма для JTextComponent
в качестве примера:
Другой подход — использование правильного инструмента для работы
помощник — это инструмент, который анализирует ваш Java-код и его отношения и сохраняет его в базе данных neo4j. Это позволяет вам описать вашу проблему как запрос графа с шифровать.
Самый простой способ начать — это
./bin/jqassistant.sh scan -f your_application.jar
, тогда./bin/jqassistant.sh server
Пример:
Запрос для поиска всех классов, реализующих 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.
В случае, если вы хотите получить еще один акцепт сегодня... возможно, оформите заказ stackoverflow.com/questions/56667478/… ;-)
Сэр, я не думаю, что эта опция доступна в версии сообщества Intellij, я не знаю об окончательной версии.