Comment lombok travail?

j'ai rencontré lombok aujourd'hui.

Je suis très anxieux de savoir comment il fonctionne.

Java Geek Article donne quelques indices, mais il n'est pas parfaitement clair pour moi:

Java 6 supprime apt et rend javacable Gérer les annotations, rationaliser le processus pour obtenir un plus simple seule l'étape de calcul. C'est le chemin emprunté par Lombok.

peut - être Qu'avec Java 6 le processus de compilation sera: javac -> apt -> lombok apt processus -> lire les fichiers de classe et d'ajouter des méthodes set/get à l'aide de ASM ?

Pourriez-vous me montrer plus de détails sur le mécanisme?

103
demandé sur Matthias Braun 2011-05-24 11:41:16

4 réponses

Lombok code effectivement contre L'API interne, comme Sean Patrick Floyd l'a dit. Toutefois, comme lombok est seulement impliqué dans la phase de compilation, son allégation trompeuse à Lombok ne fonctionnera sur une VM sun. Il ne sera compilé que sur le javac de CJE ou sun. Cependant, la grande majorité des VM, s'ils expédient un compilateur, sont l'un de ces deux. Par exemple, la VM Apple est livrée avec sun javac stock, et en tant que tel, lombok fonctionne très bien sur macs. En va de même pour l' soylatte VM, par exemple.

alors que pour javac nous devons vraiment nous en tenir à leurs mises à jour, en partie à cause de beaucoup de travail en cours sur leur compilateur en ce moment, nous avons dû faire juste un ajustement mineur à notre support eclipse sur de nombreuses versions d'eclipse. Donc, même si nous codons contre L'API interne, ce sont des bits relativement stables.

si ce que fait lombok pouvait être fait sans recourir à L'API interne, nous aurions fait quelque chose d'autre, mais il impossible, nous avons donc recours à L'utilisation interne de L'API.

NB: je suis l'un des développeurs principaux de lombok, donc, je suis probablement un peu partial :p

109
répondu rzwitserloot 2011-05-24 23:04:51

it uses JSR 269 Pluggable Annotation Processing API disponible en Java 6.

notez que lombok.jar contient un fichier nommé /META-INF/services/javax.annotation.processing.Processor . Lorsque javac voit ce fichier dans une compilation classpath, il exécute des processeurs d'annotation définis lors de la compilation.

57
répondu axtavt 2011-05-24 09:36:44
41
répondu uuidcode 2016-02-17 17:27:53

dans addendum à la réponse d'axtavt: Lombok utilise beaucoup plus que L'api JSR 269 expose. Lombok Code contre a) les API internes javac et b) les API internes eclipse (dans un processeur séparé). JSR 269 ne vous permet pas de modifier le code source existant, mais lorsque vous lancez un Element sur le noeud AST sous-jacent, vous pouvez modifier le AST (ce que fait project Lombok).

donc Lombok est un énorme hack qui ne fera que compiler sur une VM Sun (afaik). C'est un super logiciel, mais il est aussi détesté par beaucoup pour être un piratage non standard.

35
répondu Sean Patrick Floyd 2012-03-13 17:36:11