Custom Annotation Preprocessor

.collapse">Зміст

Створюємо новий library проект, у якому описуємо свою інструкцію. Клас з інструкцією виглядає приблизно так:

@Retention говорить про те, що наша інструкція буде присутня тільки у вихідному коді і відкинута компілятором (а до цього моменту ми її обробимо).

Створюємо безпосередньо наш обробник інструкцій. Він є класом, що розширює AbstractProcessor. Йому ми говоримо, що він оброблятиме всі анотації і вказуємо підтримувану версію вихідних файлів таким чином:

Далі перевизначаємо метод process, у якому прописуємо логіку генерації нового класу. Мій метод виглядає так:

На цьому етапі можна включити фантазію і писати, що душі завгодно (ну чи що потрібно =). Після того, як ви закінчили з обробником анотацій та описали всі свої кастомні анотації, із цього проекту потрібно згенерувати jar файл. У Idea 12 це досить просто:Project Settings -> Artifacts -> Add -> Jar -> From modules…Далі робимоBuild -> Rebuild Projectі знаходить наш згенерований файл jar в Output директорії проекту.

Створюємо тестовий проект, у якому використовуватимемо наші кастомні анотації. До проекту підключаємо згенерований на минулому етапі jar файл і радіємо, що наші інструкції тепер нам доступні. У будь-якому класі прописуємо нашу інструкцію, наприклад так:

Пам'ятайте, що ми вказали нашій інструкції @Target(ElementType.METHOD) , а це означає, що ми можемо прописати її тільки перед методом.

Тепер скажемо Idea використовувати наш обробник анотацій та магія почне працювати! Для цього йдемо вSettingsу розділCompiler - > Annotation Processors. Ставимо галочкуEnable annotation processing, у поліProcessor pathвказуємо шлях до нашого згенерованого jar файлу. Також у вікніProcessor FQ nameвводимо повну назву класу, який відповідає за обробку. У нашому випадку це CustomProcessor. Заповнене вікно має виглядати приблизно так.

custom

РобимоBuild -> Rebuild projectі насолоджуємося результатами. У дереві проекту повинна з'явитися папка, в якій будуть лежати нові файли. Ось що вийшло у мене: