Potrafię generować klasy od zera za pomocą adnotationprocessor, ale nie mogłem zmodyfikować klasy takiej jak lombok. Szukałem wygenerowanych klas przez lombok w androidowym studio, ale nic nie znalazłem. następnie sprawdziłem przegląd lombok poprzez ich stronę internetową, a także sprawdziłem to na forach, ale osiągnąłem cel bez niczego. Moje pytanie jest tak proste. W jaki sposób lombok ujednolica wygenerowany kod z minami, podczas gdy ja na przykład korzystam z @Setter. Jak mogę rozwinąć procesor taki jak?W jaki sposób Lombok generuje kod na istniejącej klasie?
Odpowiedz
Wygląda jak duplikat How does lombok work?, a ja oznaczę zamknięcie jako dupe, ale twoja nagroda zapobiega temu.
Krótko mówiąc, Lombok w rzeczywistości nie generuje kodu. Zamiast tego używa nieokreślonych i nieudokumentowanych wewnętrznych wywołań api implementacji, aby bezpośrednio zmodyfikować abstrakcyjne drzewo składni programu między odczytaniem kodu źródłowego a wygenerowaniem skompilowanego kodu bajtowego. Może się zepsuć bez ostrzeżenia lub powiadomienia o aktualizacji do nowej wersji kompilatora, ale obecnie nie ma innego sposobu.
Lombok generuje kod podczas fazy kompilacji. Oto samouczek dla tego http://hannesdorfmann.com/annotation-processing/annotationprocessing101.
Jeśli nie jesteś nowy w deklarowaniu własnych adnotacji, zdecydowanie zalecamy rozpoczęcie pracy z adnotacjami środowiska wykonawczego. Są one łatwiejsze do zrozumienia i debugowania, a Twój kod "działa" podczas fazy uruchamiania, którą już znasz. Krótki tutorial do tego: http://docs.oracle.com/javase/1.5.0/docs/guide/language/annotations.html
Również w "Jak mogę rozwinąć procesor taki jak?", Najprostszym sposobem będzie napisanie niestandardowej adnotacji Lombok. Zobacz np. https://binkley.blogspot.co.uk/2014/12/writing-your-own-lombok-annotation.html – Rich