В статье о генерации геттеров и сеттеров я упоминал о конфигурационном файле project lombok. Настало время рассмотреть его подробнее.
Конфигурационный файл project lombok имеет фиксированное имя lombok.config и не привязан к какому-либо заранее оговорённому расположению. Действие lombok.config распространяется на каталог, в котором он расположен и подкаталоги этого каталога. Одновременно в разных каталогах и подкаталогах может располагаться любое количество этих файлов, настройки которых объединяются для каждого конкретного каталога.
При объединении настроек действует два правила — если какой-либо lombok.config, находящийся в текущем каталоге или выше текущего каталога задаёт какую либо опцию, это значение будет использовано при генерации кода. Если разные значения одной и той же настройки задают несколько файлов lombok.config, находящихся в текущем каталоге или выше текущего каталога, будет использовано значение из ближайшего (по иерархии каталогов) к компилируемому файлу.
Опция config.stopBubbling = true запрещают поиск lombok.config в вышестоящих каталогах. Ключевое слово clear перед наименованием опции сбрасывает все изменения от вышестоящих lombok.config и устанавливает для опции значение по умолчанию.
Глобальные опции
Три с половиной опции, которые влияют на поведение всего lombok:
- lombok.addGeneratedAnnotation = false запрещает добавление аннотации @Generated к сгенерированным методам.
- lombok.extern.findbugs.addSuppressFBWarnings = true добавляет аннотацию @SuppressFBWarnings к сгенерированным методам, чтобы FindBugs не пытался их проверять. Установка этой опции в true требует наличия библиотек FindBugs.
- lombok.experimental.flagUsage = [warning|error] не совсем глобальная опция. Установка этой опции в warning или error приводит к генерации предупреждений или ошибок при использовании экспериментальных аннотаций.
- config.stopBubbling уже описана выше.
- lombok.val.flagUsage
- lombok.nonNull.flagUsage
- lombok.cleanup.flagUsage
- lombok.setter.flagUsage
- lombok.getter.flagUsag
- lombok.toString.flagUsage
- lombok.equalsAndHashCode.flagUsage
- lombok.anyConstructor.flagUsage, lombok.allArgsConstructor.flagUsage, lombok.requiredArgsConstructor.flagUsage, lombok.noArgsConstructor.flagUsage
- lombok.data.flagUsage
- lombok.builder.flagUsage
- lombok.value.flagUsage
- lombok.sneakyThrows.flagUsage
- lombok.synchronized.flagUsage
- lombok.getter.lazy.flagUsage
- lombok.log.apacheCommons.flagUsage, lombok.log.javaUtilLogging.flagUsage, lombok.log.log4j.flagUsage, lombok.log.log4j2.flagUsage, lombok.log.slf4j.flagUsage, lombok.log.xslf4j.flagUsage
Опции настройки аннотаций
Помимо глобальных опций у некоторых аннотаций есть собственные настройки.
@NonNull
- lombok.nonNull.exceptionType = NullPointerException (по умолчанию)
- lombok.nonNull.exceptionType = IllegalArgumentException
Указывает, какое исключение выбрасывать при попытке записать null в @NonNull поле.
@Getter/@Setter
- lombok.accessors.chain = true
Генерирует сеттеры, которые возвращают this вместо void, тем самым позволяя вызывать их цепочкой.
- lombok.accessors.fluent = true
Изменяет имена геттеров и сеттеров, отказывая от стандартных префиксов get и set. Имена методов будут совпадать с именами полей.
- lombok.accessors.prefix += префикс
Эта опция принимает список параметров, то есть можно повторять её несколько раз и каждый раз новый префикс будет добавлен в список. Удалить какой-либо префикс можно использую нотацию lombok.accessors.prefix -= префикс.
Использование списка префиксов довольно туманно: lombok будет удалять префиксы присутствующие в списке из имён полей при генерации соответствующих методов. Например, при налииие в классе поля mField и опции lombok.accessors.prefix += m, будут сгенерированны методы getField() и setField().
- lombok.getter.noIsPrefix = true
Переключает префикс имени геттера для boolean переменных с Is на get.
- lombok.toString.includeFieldNames = false
Запрещает вывод названий переменных в сгенерированном toString() методе.
- lombok.toString.doNotUseGetters = true
Запрещает методу toString() пользоваться геттерами, для доступа к данным, и требует прямого доступа к значениям полей.
- lombok.equalsAndHashCode.doNotUseGetters = true
Запрещает методам equals() и hashCode() пользоваться геттерами, для доступа к данным, и требует прямого доступа к значениям полей.
- lombok.anyConstructor.suppressConstructorProperties = true
Запрещает добавление к сгенерированным конструкторам аннотации @ConstructorProperties.
- lombok.singular.useGuava = true
Разрешает использование Immutable из guava, вместо Collections.unmodifiable для @Singular коллекций. Включение этой опции требует наличия guava в classpath.
- lombok.singular.auto = false
Выключает автоматическую генерацию имён методов для добавления одной записи к @Singular коллекции.
- lombok.log.fieldName = идентификатор
Устанавливает имя переменной по умолчанию для логгера.
- lombok.log.fieldIsStatic = false
Делает объект логгера не статическим.