Совсем недавно вышла IntelliJ IDEA 2024.3 – последний мажорный релиз IDE в этом году. И одним из самых важных нововведений этой версии стала улучшенная панель Structure. 

Команда Spring АйО перевела статью Siva Katamreddy (Developer Advocate в JetBrains), в которой Siva рассказывает, как улучшенная панель помогает решать задачи, и делится историей создания этой функциональности.


Разработчики часто тратят больше времени на чтение уже существующего кода, чем на написание нового. Чтобы понять существующую кодовую базу они должны разбираться в том, как настроены различные фреймворки и библиотеки, а также как между собой взаимодействуют разные компоненты системы.

Разрабатывая JetBrains AI Assistant, мы обогащали подсказки контекстом, извлеченным из зависимостей проекта и связей между различными файлами. Этот контекст оказался полезным для лучшего понимания проекта как для искусственного интеллекта, так и для живых разработчиков.

В этой статье вы узнаете:

  • Как наши исследования и разработки AI Assistant привели к переосмыслению панели Structure.

  • Как использовать новый вид Logical в панели Structure для исследования и понимания существующей кодовой базы.

  • Как выполнять действия, связанные с контекстом, прямо из панели Structure.

Предпосылки

Результаты генерации или объяснения кода AI ассистентами иногда могут разочаровывать. Причиной плохой генерации может быть нехватка информации, которой разработчик обладает,  AI ассистент – нет. Ведь проект – это не только код. Проект – это сложное взаимодействие компонентов, явных и неявных, на которые в том числе может очень сильно влиять используемый фреймворк. И чтобы AI ассистент давал правильные ответы на ваши запросы, ему нужно понимать эти связи.

Для получения лучших результатов от AI Assistant необходимо предоставить ему весь этот контекст. Он также будет полезен и самим разработчикам. В IntelliJ IDEA основным инструментом для навигации по коду является панель Project. Она показывает структуру проекта на уровне папок и файлов, но не показывает связи между компонентами кода. Разработчикам приходится самим искать такие связи и обращаться к документации по фреймворкам.

Инструменты IntelliJ IDEA обладают значительными знаниями о проекте. Чтобы добавить поддержку языка или фреймворка, мы, как разработчики, изучаем, как работает технология “под капотом”. Например, если открыть файл проекта на Spring Boot, можно увидеть компоненты, такие как бины, точки инжекции и API эндпоинты.

Недавно мы разработали внутренний API для реализации domain context providers – кода, который собирает информацию о структуре проекта, используемом стеке технологий и так далее. Сначала мы улучшили контекст для AI Assistant, добавив в его подсказки информацию из domain providers. Результаты были хорошие!

На следующем шаге мы решили использовать эту информацию, чтобы показывать структуру кода с точки зрения фреймворков. В IntelliJ IDEA панель Structure отображает структуру выбранного файла. Мы решили улучшить эту панель и добавить тип отображения Logical, который иллюстрирует структуру файла с точки зрения фреймворка. Другими словами, теперь можно увидеть, как выбранный код (например, файл или класс) связан с другими частями приложения. Этот контекст иногда важнее самого кода, так как помогает понять, как работает приложение.

Редизайн панели Structure

Давайте посмотрим на Spring Boot приложение, чтобы узнать, как обновлённая панель Structure позволяет лучше его  понять, за счёт отображения логической структуры компонентов.

Основной класс любого Spring Boot приложения – класс с аннотацией @SpringBootApplication. Физическая структура такого класса простая:

@SpringBootApplication
public class BlogApplication {

   public static void main(String[] args) {
       SpringApplication.run(BlogApplication.class, args);
   }

}

Магия Spring Boot скрыта в конфигурациях бинов – классах, которые создают необходимые сервисы и помещают их в Spring контекст. Теперь мы можем видеть это!

Domain context providers знают, какие конфигурации сканируются и какие бины создаются. Вся эта информация отображается в панели Structure.

Давайте посмотрим, как панель Structure отражает логическое представление REST-контроллера.

Панель Structure отображает заинжектированные бины в узле Autowires и API эндпоинты, определенные в классе контроллера. При нажатии на любой из эндпоинтов вы будете перенаправлены на соответствующий метод в редакторе. Также можно нажать на значок API на полях редактора, чтобы обратиться к этому эндпоинту через HTTP-клиент.

Spring Framework позволяет работать с событиями через ApplicationEventPublisher. Если выбранный бин публикует события через ApplicationEventPublisher, эти данные отображаются в узле Publishers.

Точно так же, если бин обрабатывает события с помощью @EventListener, информация о слушателях отображается в узле Listeners.

Посмотрим другой пример: JPA-сущности.

Окно Structure также предоставляет логическое представление JPA-сущностей, показывая контекст, такой как маппинги, связь с другими сущностями, Spring Data JPA репозитории, связанные с сущностью, DTO и проекции:

Если выбрать узел Entity, можно увидеть значок DDL, с помощью которого можно сгенерировать SQL-скрипт для создания таблицы.

Аналогично IntelliJ IDEA предоставляет логическое представление для других компонентов Spring, таких как MVC контроллеры, сервисы, репозитории и классы конфигураций.

Комментарий от редакции Spring АйО

Стоит отметить, что всё что показано в текущей статье доступно только в IntelliJ IDEA Ultimate. На данный момент нет легального способа скачать и использовать IntelliJ IDEA Ultimate на территории Российской Федерации и Республики Беларусь.

Однако концепция "смотри на проект в контексте используемых технологий" нам очень хорошо знакома благодаря Amplicode. Недавно мы рассматривали альтернативы Ultimate в части поддержки Spring и просто не могли не провести параллель между тем, что видели совсем недавно.

Панель Amplicode Explorer, аналогично обновлённой панели Structure в IntelliJ IDEA Ultimate, позволяет увидеть, что из себя представляет проект с точки зрения элементов фреймворка и подключенных библиотек:

А кроме отображения доступных в проекте эндпоинтов, также есть возможность взглянуть на элементы связанные с Kafka, Docker и Kubernetes:

Заключение

Приложение состоит из множества частей: код, зависимости, файлы относящиеся к система сборки и скрипты развертывания. Для полного понимания архитектуры и функциональности приложения важно понимать связи между этими компонентами.

Благодаря domain context providers, можно показать структуру кода с другой точки зрения, раскрывая скрытые связи компонентов. Такой подход позволяет как улучшить ответы AI Assistant, так и дать разработчикам лучшее понимание их кода.

Обновленная панель Structure с Logical представлением позволяет увидеть структуру приложения и перейти к связанным компонентам. Действия, связанные с выбранным компонентом, позволяют легко выполнять задачи прямо из панели Structure.

На данный момент IDE предоставляет обновленное окно Structure для Jakarta EE и Spring. Мы планируем расширить поддержку на другие технологии, такие как фреймворки, инструменты сборки и Docker файлы.

Ознакомиться с документацией по Logical представлению панели Structure можно тут.

Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.

Ждем всех, присоединяйтесь!

Комментарии (0)