Помощь при написании кода
Jmix Studio предоставляет автодополнение и инспекцию кода, выделение ошибок и быстрое исправление, а также удобный рефакторинг кода и широкие возможности навигации.
Давайте рассмотрим, как выглядят основные инструменты для помощи при написании кода.
Инспекция кода
Jmix Studio автоматически обнаруживает и предлагает исправить типичные ошибки программирования в проекте перед его компиляцией.
В зависимости от уровня критичности Studio по-разному выделяет код, содержащий проблему.

Для некоторых инспекций Jmix Studio предлагает использовать быстрые исправления.
Быстрые исправления
Если при инспекции в коде обнаружена ошибка, в редакторе можно быстро внести исправление. Наведите курсор на выделенный фрагмент кода и нажмите Alt+Enter
.

Другой способ — наведите курсор на выделенный фрагмент кода и щелкните значок /
. После этого вы сможете просмотреть доступные intention-действия.

Маркеры строк
Маркер строки — это значок на полосе слева окна редактора. Например, маркеры строк могут служить точками навигации для связанного кода:

Используя маркер строки, можно редактировать фетч-план в дескрипторе XML:

Навигация
Например, вы можете перейти к внедренному компоненту или локализованному сообщению в пакете сообщений. Удерживая Ctrl
, щелкните левой кнопкой мыши по id компонента или ключу сообщения.

Рефакторинг
Вы можете легко и безопасно вносить изменения. В приведенном ниже примере мы изменим имя кнопки.

Используя рефакторинг, вы можете переименовывать или удалять перечисления и классы сущностей, компоненты и экраны.
Область применения помощи при написании кода
Рассмотрим основные части проекта и различные случаи использования инструмента помощи при написании кода.
-
Перечисления и сущности
- Инспекции
-
-
Сущность с таким же именем таблицы уникальна в хранилище данных.
-
Проверка наличия аннотации @InstanceName.
-
Обнаружение некорректного использования фетч-типа
LAZY
для полей datatype и@OneToOne
,@OneToMany
,@ManyToMany
и@ManyToOne
с фетч-типомEAGER
. -
Проверка наличия аннотаций JPA для каждого поля сущности.
-
Проверка того, что классы и атрибуты сущностей и перечислений имеют локализованные сообщения.
-
Проверка того, что атрибуты персистентного перечисления объявлены в соответствии с правилами Jmix — с использованием типа идентификатора.
-
Проверка наличия дубликатов аннотации
@Version
. -
Проверка наличия встраиваемых атрибутов, не отмеченных аннотацией
@Embedded
. -
Проверка наличия атрибута первичного ключа сущности.
-
- Быстрые исправления и intention-действия
-
-
Генерация имени экземпляра.
-
Добавление атрибута сущности с помощью дизайнера.
-
Добавление атрибута сущности в таблицы, формы и сетки.
-
Изменение разрешений атрибутов сущности для различных ресурсных ролей.
-
Изменение разрешений сущности для разных ресурсных ролей.
-
-
XML-дескрипторы
- Инспекции
-
-
Проверка имен свойств и путей в компонентах
dataGrid
и других компонентах. -
Проверка атрибутов
dataContainer
иitemsContainer
. Они должны ссылаться на существующий контейнер данных в текущем экране или на один из экранов, который включает текущий в качестве фрейма. -
Проверка следующих аспектов дескрипторов окон Jmix:
-
Атрибут
expand
; -
Уникальность
id
.
-
-
Сообщение о случаях, когда атрибут сущности используется компонентом UI в XML-дескрипторе, но не включен в фетч-план.
-
Проверка ошибок, когда в компоновке XML имеется более одного корневого компонента.
-
Поиск конфликтующих значений атрибутов
width
,height
, иexpand
в XML-дескрипторе. -
Проверка атрибута
hierarchyProperty
. Он должен быть того же типа, что и сущность в контейнере данных.
-
-
Фетч-планы
-
Проверка того, что для
fetchPlan
установлен атрибутclass
. -
Поиск свойств, объявленных дважды внутри одного и того же тега
fetchPlan
. -
Проверка, существует ли фетч-план с текущим именем в конфигурации другого фетч-плана.
-
Проверка, содержит ли свойство
fetchPlan
внутренние свойства или атрибутfetchPlan
. Тогда свойство должно указывать на сущность. -
Поиск ненужных свойств, которые можно опустить, поскольку они уже включены в фетч-план.
-
-
Контроллеры
- Инспекции
-
-
Проверка, ссылается ли на каждый сеттер только один установленный метод.
-
Инспекция компонентов, действий и компонентов данных, которые инжектируются в контроллер экрана. Сообщение, если инжектированные поля имеют неправильный тип.
-
Инспекция компонентов, инжектированных в контроллер экрана. Сообщение, если инжектированное поле не имеет стандартного типа, например,
DataGrid
вместоDataGrid<MyEntity>
. Обеспечивает быстрое исправление. -
Проверка, правильно ли реализован слушатель событий. Возможные сообщения:
-
Слушатель событий должен располагаться только внутри контроллера экрана.
-
Слушатель событий должен иметь возвращаемый тип
void
. -
Слушатель событий должен иметь один аргумент с типом, расширяющим
java.util.EventObject
. -
Не удалось найти указанный компонент UI.
-
-
Проверка установленных делегатов. Возможные сообщения:
-
Делегат может быть установлен только внутри контроллера экрана.
-
Не удалось найти точку установки для делегата.
-
Точка установки должна быть методом с возвращаемым типом
void
и одним параметром типаFunctionalInterface
. -
Не удалось найти указанный компонент UI.
-
-
Подсветка подозрительных назначений полям, которые, возможно, инжектируются контейнером.
-
Проверка, что компоненты UI созданы с использованием
ComponentsFactory.createComponent()
.
-
- Быстрые исправления и intention-действия
-
-
Изменения разрешений экрана для разных ресурсных ролей.
-
Создание XML-дескриптора для контроллера экрана.
-
Переход к пункту меню из контроллера.
-
-
Логирование
- Инспекции
-
-
Проверка, используется ли логгер
org.slf4j.Logger
вместоSystem.out.println()
,System.err.println()
иjava.lang.ThrowableprintStackTrace()
. -
Подсветка выражений логирования, при которых теряется stack trace исключения.
-
-
Меню
- Инспекции
-
-
Проверка, нет ли в меню повторяющихся элементов.
-
-
Безопасность
- Инспекции
-
-
Проверка повторяющихся полей кода в ресурсных ролях.
-
Проверка повторяющегося поля имени в ресурсных ролях.
-
Проверка наличия экрана в проекте.
-
Проверка политики атрибутов сущности в ресурсных ролях.
-
-
Бины и службы
- Инспекции
-
-
Проверка того, что бин службы является правильным компонентом фреймворка Jmix.
-