Помощь при написании кода
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-дескрипторы
- Инспекции
 - 
- 
Проверка имен свойств и путей в компонентах
table,form, и других компонентах. - 
Проверка атрибутов
dataContainerииoptionsContainer. Они должны ссылаться на существующий контейнер данных в текущем окне или на одно из окон, которое включает текущее в качестве фрейма. - 
Проверка колонок в строке с указанным количеством колонок в
gridLayout. - 
Проверка следующих аспектов дескрипторов окон Jmix:
- 
Атрибут
expand; - 
Уникальность
id. 
 - 
 - 
Проверка того, что атрибут
trackSelectionне задан для действия с атрибутомtype. - 
Сообщение о случаях, когда атрибут сущности используется компонентом UI в XML-дескрипторе, но не включен в фетч-план.
 - 
Проверка ошибок, когда в компоновке XML имеется более одного корневого компонента.
 - 
Поиск конфликтующих значений атрибутов
width,height, иexpandв XML-дескрипторе. - 
Проверка следующих аспектов
form:- 
Дублирующиеся поля.
 - 
Поля из
column. 
 - 
 - 
Проверка атрибута
hierarchyProperty. Он должен быть того же типа, что и сущность в контейнере данных. 
 - 
 
 - 
Фетч-планы
- 
Проверка того, что для
fetchPlanустановлен атрибутclass. - 
Поиск свойств, объявленных дважды внутри одного и того же тега
fetchPlan. - 
Проверка, существует ли фетч-план с текущим именем в конфигурации другого фетч-плана.
 - 
Проверка, содержит ли свойство
fetchPlanвнутренние свойства или атрибутfetchPlan. Тогда свойство должно указывать на сущность. - 
Поиск ненужных свойств, которые можно опустить, поскольку они уже включены в фетч-план.
 
 - 
 - 
Контроллеры
- Инспекции
 - 
- 
Проверка, ссылается ли на каждый сеттер только один установленный метод.
 - 
Инспекция компонентов, действий и компонентов данных, которые инжектируются в контроллер экрана. Сообщение, если инжектированные поля имеют неправильный тип.
 - 
Инспекция компонентов, инжектированных в контроллер экрана. Сообщение, если инжектированное поле не имеет стандартного типа, например,
TableвместоTable<MyEntity>. Обеспечивает быстрое исправление. - 
Проверка, правильно ли реализован слушатель событий. Возможные сообщения:
- 
Слушатель событий должен располагаться только внутри контроллера экрана.
 - 
Слушатель событий должен иметь возвращаемый тип
void. - 
Слушатель событий должен иметь один аргумент с типом, расширяющим
java.util.EventObject. - 
Не удалось найти указанный компонент UI.
 
 - 
 - 
Проверка установленных делегатов. Возможные сообщения:
- 
Делегат может быть установлен только внутри контроллера экрана.
 - 
Не удалось найти точку установки для делегата.
 - 
Точка установки должна быть методом с возвращаемым типом
voidи одним параметром типаFunctionalInterface. - 
Не удалось найти указанный компонент UI.
 
 - 
 - 
Подсветка подозрительных назначений полям, которые, возможно, инжектируются контейнером.
 - 
Проверка, что компоненты GUI созданы с использованием
ComponentsFactory.createComponent(). 
 - 
 - Быстрые исправления и intention-действия
 - 
- 
Изменения разрешений экрана для разных ресурсных ролей.
 - 
Создание XML-дескриптора для контроллера экрана.
 - 
Переход к пункту меню из контроллера.
 
 - 
 
 - 
Логирование
- Инспекции
 - 
- 
Проверка, используется ли логгер
org.slf4j.LoggerвместоSystem.out.println(),System.err.println()иjava.lang.ThrowableprintStackTrace(). - 
Подсветка выражений логирования, при которых теряется stack trace исключения.
 
 - 
 
 - 
Меню
- Инспекции
 - 
- 
Проверка, нет ли в меню повторяющихся элементов.
 
 - 
 
 - 
Безопасность
- Инспекции
 - 
- 
Проверка повторяющихся полей кода в ресурсных ролях.
 - 
Проверка повторяющегося поля имени в ресурсных ролях.
 - 
Проверка наличия экрана в проекте.
 - 
Проверка политики атрибутов сущности в ресурсных ролях.
 
 - 
 
 - 
Бины и службы
- Инспекции
 - 
- 
Проверка того, что бин службы является правильным компонентом фреймворка Jmix.
 
 -