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

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

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

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

1 Ответ

3 голосов
/ 19 июня 2019

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

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

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

enter image description here

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

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

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

Пример: запрос для поиска всех классов, реализующих 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...