Anotačný procesor

Ciele

  1. Naučiť sa implementovať anotačný procesor.
  2. Naučiť sa používať mirrors API pre spracovanie anotácií.
  3. Naučiť sa generovať zdrojový kód počas kompilácie.

Postup

Krok 1: Príprava

Úloha 1.1

Vytvorte podprojekt processor podľa špecifikácie zadania 2.

Poznámka

Nezabudnite pridať závislosť na projekt processor do example:

dependencies {
    annotationProcessor(project(":processor"))
    ...

Krok 2: Implementácia anotačného procesora

Úloha 2.1

Implementujte anotačný procesor, ktorý bude generovať SQL príkazy pre vytvorenie tabuliek pre všetky triedy označené anotáciou @Table.

Anotačný procesor musí implementovať rozhranie AbstractProcessor a byť označený anotáciou @SupportedAnnotationTypes("sk.tuke.meta.persistence.annotations.Table"). Plne kvalifikovaný názov triedy anotačného procesora musí byť uvedený v súbore META-INF/services/javax.annotation.processing.Processor v resources podprojektu processor.

Úloha 2.2

Implementujte v anotačnom procesore generovanie súboru s SQL príkazmi pre vytvorenie tabuliek pre každú triedu označenú anotáciou @Table. Generované súbory nech sú ukladané do adresára persistence v adresári s *.class súbormi spracovávaného projektu (napríklad example).

Správne vytvorenie súborov zabezpečíte pomocou metódy Filer.createResource(StandardLocation.CLASS_OUTPUT, ...).

Úloha 2.3

Implementujte generovanie Java triedy s zoznamom tried označených anotáciou @Table.

Vďaka tejto triede budete môcť načítať všetky SQL súbory pri volaní createTables() bez argumentov.

Krok 3: Načítanie SQL príkazov

Úloha 3.1

Upravte triedu ReflectivePersistenceManager tak, aby načítala SQL príkazy z generovaných súborov a vykonala v metóde createTables().

Pre načítavanie súborov z CLASSPATH môžete použiť metódu ClassLoader.getResourceAsStream().