Создавайте аннотации на Ломбоке с помощью ByteBuddy

#java #lombok #gradle-plugin #byte-buddy

Вопрос:

Моя цель состоит в том, чтобы добавить некоторые аннотации Ломбока (например @AllArgsConstructor , @NoArgsConstructor и т. Д.) В класс во время сборки Gradle, Чтобы аннотации распознавались процессором аннотаций Ломбока и заставляли его генерировать код для соответствующих аннотаций.

Использование ByteBuddy и плагина ByteBuddy Gradle хорошо работает для добавления аннотаций RetentionPolicy.RUNTIME ; но добавление аннотаций Lombok с помощью того же механизма не приводит к сгенерированному коду, предположительно, потому byteBuddy , что задача Gradle выполняется после compileJava задачи, и поэтому Lombok уже завершил генерацию кода к моменту добавления аннотаций ByteBuddy.

Есть ли способ заставить ByteBuddy работать до Ломбока в цикле сборки Gradle? Является ли ByteBuddy неправильным инструментом для этой работы? Есть ли другой способ вставить аннотации Ломбока в исходные файлы во время сборки?

Комментарии:

1. Это неправильный инструмент. ByteBuddy и соответствующий плагин gradle используют скомпилированный байтовый код для внесения изменений, в то время как lombok нуждается в AST, который существует только во время компиляции. Я не знаю решения. Наверное, это сложно. Ломбок не очень хорошо взаимодействует с другими процессорами аннотаций, поэтому использование точки доступа также может быть проблематичным.

2. Как говорит @JanRieke, вам понадобится инструмент преобразования исходного кода, которых немного. Byte Buddy работает на уровне байтового кода и не может добавлять аннотации, которые видны преобразователям исходного кода, если вы не декомпилируете преобразованный байтовый код, что для меня звучит как неправильный подход.