Je recherche une bibliothèque Java qui me permet d'analyser un fichier source Java et qui me donne une représentation ast du code. P>
En réalité, je ne suis intéressé que par les définitions de la classe et de la méthode avec leurs annotations. Je n'ai pas besoin de l'AST du code de méthode. P>
J'utilise ces informations pour la génération de code. C'est pourquoi je ne peux pas compiler le fichier source d'abord pour obtenir les informations à partir du fichier de classe résultant. Le code ne compilerait pas sans erreur avant de générer des classes supplémentaires. P>
6 Réponses :
Java 6 prend en charge cela comme une partie natale du compilateur et a des API standard pour celui-ci ( javax.lang.model code>). Vous pouvez lire sur elle ici . Il est conçu spécifiquement pour votre cas d'utilisation (c'est-à-dire une génération de code à partir d'annotations et de source). P>
Oui, ça a l'air bien. Pouvez-vous me donner un indice Quelle classe est responsable de la lecture du fichier source?
Vous créez un "plugin" compilateur que vous spécifiez à Javac sur la ligne de commande. Je pense que l'interface que vous implémenter est javax.annotation.processing.processor code>
javax.lang.model est basé sur ce qui est requis pour traiter les annotations, plutôt que d'être un arbre de syntaxe abstraite pour toute la langue. Donc, il a des forfaits, des cours, des méthodes, des champs, des paramètres et des variables, mais pas des expressions ou des déclarations.
C'est dommage. J'ai vraiment besoin d'appeler l'analyseur de mon cadre de génération.
Ce que cela vous permet de faire est de construire votre cadre de génération de code dans Javac lui-même i>. @Pete: Je suis bien sûr conscient de cela, la question spécifie que les organes de méthodes sont pas i> requis.
Ma génération de code est composée de différents modèles (non seulement des fichiers Java) que je parle individuellement et que je les placez dans un grand référentiel utilisé par un moteur de modèle Freemarker pour générer beaucoup de code. Mais oui, j'y penserai si je peux mettre tout cela dans Javac.
Je pense Netbeans Javaparser pourrait être quelque chose que vous intéresserez. P>
Ok, maintenant j'ai construit un pot de ceci. Comment puis-je l'utiliser pour créer un fichier AST à partir d'un fichier source Java?
antlr ( http://www.antlr.org/ ) a un analyseur pour la langue Java et il suporte également des asts.
Essayez p> dans le * .g Fichier (je n'ai pas essayé personnellement); p> p>
Ok, j'ai compilé le java.g mais je ne sais toujours pas comment l'utiliser pour obtenir une AST. Avez-vous un exemple?
Tout ce que je peux offrir à ce stade (j'apprends toujours) est le suivant: options {sortie = ast; } code> dans le fichier * .g
J'ai trouvé le projet Javaparser , qui analyse un seul fichier Java et retourne un puits formé ast. p>
@Tangens a écrit sur Javaparser mais a référencé un projet maintenant obsolète. P>
Il y a eu une fourchette en 2011 qui est toujours activement entretenue et également analyser Java 1.7 et 1,8. P>
Vous pouvez le trouver là-bas: https://github.com/javaparser/javaparser p >
Disclaimer: Je contribue à ce projet. P>