Wpis z mikrobloga

@afe1: no niezbyt, lombok wychodzi za API, modyfikuje AST w runtime pomimo że to nie jest cześć API, nadpisując nawet fragmenty kompilatora refleksjami i agentami/manipulacją bytecode. Więc też działa tylko na wybranych kompilatorach. Jak np ktoś chce np łączyć języki to może być problem, czy zwyczajnie jebnie po aktualizacji kompialtora, nawet dla minor wersji.
A immutables zadziała ze wszystkim, bo używa tylko oficjalnego API
  • Odpowiedz
@GotoFinal: to nie w runtime, tylko podczas kompilacji lombok dorzuca swoj bytecode - metody, pola itp - i w wyniku tego powstaje normalny plik class ktory dziala wszedzie. Problem polega na tym ze to co widzisz kodzie jest inne niz wygenerowany bytecode w class. Immutables tworzy subclass danej klasy i tam dorzuca swoje rzeczy.

Mi sie wydaje ze to dziala na wszystkich kompilatorach bo jest to oficjalne api - https://docs.oracle.com/javase/8/docs/api/javax/annotation/processing/Processor.html

no
  • Odpowiedz
@afe1:

to nie w runtime, tylko podczas kompilacji l

No chodzi o runtime kompilacji, przecież cały czas piszę o API kompilatora :P

No i niestety pomijasz ważną rzecz: te api pozwala tylko wygenerować nowe klasy itd - ale nie możesz edytować AST obecnej klasy tak że dodajesz sobie getter i możesz go bezpośrednio używać z tej samej klasy. Jak dodasz metodę do istniejącej klasy to nie możesz jej użyć w tej
  • Odpowiedz
@GotoFinal: refleksji tam chyba nie uzywa, bo niby po co? - ma swoje api uzywane do zbudowania wlasnej wersji drzewka i jej modyfikacji - co jest niezgodne z jsr 269, bo annotation processing api nie pozwala na modyfikacje.

Jak wlasnie wyczytalem w groovy mozna modyfikowac AST wiec tam nie ma problemu.

Ten agent - jak komentarz glosi :) - to patch na eclipse, zeby drzewko ast przeslac do lomboka, jest
  • Odpowiedz
@afe1: wyszukaj w repo refleksji, znajdziesz masę pod javac.
i nie chodzi o to czy można, tylko o to czy dana biblioteka robiąca takie czarne magie wspiera dany kompilator. Są takie co działają jak eclipse co np działają tylko pod javac lub tylko pod eclipse i tylko na wybranym IDE działa to poprawnie.
No i chyba naturalne że patch aplikuje się przed wykonaniem tego kodu? :D Ale to dalej modyfikacja
  • Odpowiedz