Конфигурирование lombok

configuration_silver_2В статье о генерации геттеров и сеттеров я упоминал о конфигурационном файле project . Настало время рассмотреть его подробнее.

Конфигурационный файл 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  уже описана выше.
flagUsage можно использовать и с каждым модулем lombok отдельно, вызывая предупреждение или ошибку при использовании этого модуля. Допустимы следующие варианты flagUsage:

  • 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 из , вместо Collections.unmodifiable для @Singular  коллекций. Включение этой опции требует наличия в classpath.

  • lombok.singular.auto = false

Выключает автоматическую генерацию имён методов для добавления одной записи к @Singular коллекции.

  • lombok.log.fieldName = идентификатор

Устанавливает имя переменной по умолчанию для логгера.

  • lombok.log.fieldIsStatic = false

Делает объект логгера не статическим.