2010-03-28 5 views
7

J'ai un ensemble de fichiers source Java 5 avec des tags Doclet, des commentaires et des annotations de style ancien. Et sur cette base je voudrais écrire un générateur pour un autre ensemble de classes Java.Structures de génération de code source Java

Quelle est la meilleure façon de faire cela? Et y a-t-il de bonnes bibliothèques autonomes pour l'analyse/génération de code en Java? Toute expérience partagée dans ce domaine est appréciée.

Ainsi, jusqu'à présent, j'ai trouvé ces:

  • JaxME's Java Source Reflection - semble bon, mais il ne semble pas soutenir les annotations. En outre, il n'avait pas de version depuis 2006.

  • Annogen - utilise le générateur Doclet de JDK, qui a quelques bugs sous 1.5 JDK. En outre, il n'a eu aucune libération pendant une longue période.

  • Javaparser - semble bon aussi et assez récent, mais ne prend en charge que le modèle Visiteur pour une seule classe, c'est-à-dire aucun mécanisme de requête comme dans les 2 paquets ci-dessus.

Répondre

1

Les projets NetBeans IDE et Eclipse JDT ont une logique d'analyse/de génération de code Java considérable. Je ne sais pas quelles sont leurs dépendances (ie, pouvez-vous les utiliser comme librairies autonomes), mais à part ça, je regarderais bien ces deux: il est peu probable qu'il y ait une bibliothèque d'analyse de code Java sous un développement plus intensif et plus à jour.

Mise à jour:

PMD pourrait intéresser aussi bien:

scanne PMD code source Java et recherche les problèmes potentiels comme:

* Possible bugs - empty try/catch/finally/switch statements 
* Dead code - unused local variables, parameters and private methods 
* Suboptimal code - wasteful String/StringBuffer usage 
* Overcomplicated expressions - unnecessary if statements, for loops that could be while loops 
* Duplicate code - copied/pasted code means copied/pasted bugs 

De plus, cette entrée blog discute de divers outils d'analyse de code statique.

+0

Eclipse a JET (Java Emmiter Templates), mais cela ne fonctionne pas en dehors d'Eclipse (http://wiki.eclipse.org/JET_FAQ_How_do_I_run_a_JET_transformation_from_Java%3F). –

+0

J'ai mis à jour ma réponse avec quelques nouveaux articles. –

+0

J'ai essayé de jouer un peu avec PMD, mais son API est un peu trop complexe. Je vais continuer à expérimenter et vous poster mes résultats. –

4

Si vous avez seulement besoin de générer du code Java syntaxiquement correct, vérifiez le Codemodel.

+0

Codemodel est juste un générateur de code, et il n'a pas d'outil pour analyser le code java. Bien que +1 pour le lien :). –

+0

Oui, ce n'est qu'un générateur de code, je tiens à le souligner encore une fois.Très belle API à mon goût. – lexicore

+0

Exactement ce que je veux. – Mike

3

J'ai fini par utiliser PMD. exemple de code peut être vu ci-dessous:

final Java15Parser parser = new Java15Parser(); 
    final FileInputStream stream = new FileInputStream("VehicleServiceType.java"); 

    final Object c = parser.parse(new InputStreamReader(stream)); 

    final XPath xpath = new BaseXPath("//TypeDeclaration/Annotation/NormalAnnotation[Name/@Image = 'WebService']", 
     new DocumentNavigator()); 

    for (final Iterator iter = xpath.selectNodes(c).iterator(); iter.hasNext();) { 
     final Object obj = iter.next(); 
     // Do code generation based on annotations... 
    } 
+0

Merci pour les commentaires, c'est bien de savoir que vous pouvez traverser une définition de classe en utilisant XPath! –

Questions connexes