2010-02-05 6 views
45

Je souhaite analyser les fichiers de code source Java et extraire le code source des méthodes.Java: analyser le code source java, extraire les méthodes

je besoin d'une méthode comme ceci:

/** Returns a map with key = method name ; value = method source code */ 
Map<String,String> getMethods(File javaFile); 

est-il un moyen simple d'y parvenir, une bibliothèque pour me aider à construire ma méthode, etc.?

+0

[toraster] (https://github.com/forge/roaster) offre une API fluide pour travailler avec du code Java. – koppor

Répondre

53

Télécharger l'analyseur java de http://javaparser.github.io/javaparser/

Vous devez écrire un code. Ce code invoquera l'analyseur ... il vous renvoie un CompilationUnit:

  InputStream in = null; 
      CompilationUnit cu = null; 
      try 
      { 
        in = new SEDInputStream(filename); 
        cu = JavaParser.parse(in); 
      } 
      catch(ParseException x) 
      { 
       // handle parse exceptions here. 
      } 
      finally 
      { 
        in.close(); 
      } 
      return cu; 

Note: SEDInputStream est une sous-classe de flux d'entrée. Vous pouvez utiliser un FileInputStream si vous le souhaitez.


Vous devez créer un visiteur. Votre visiteur sera facile parce que vous êtes seulement intéressé par les méthodes:

public class MethodVisitor extends VoidVisitorAdapter 
    { 
     public void visit(MethodDeclaration n, Object arg) 
     { 
      // extract method information here. 
      // put in to hashmap 
     } 
    } 

Pour appeler le visiteur, faites ceci:

MethodVisitor visitor = new MethodVisitor(); 
    visitor.visit(cu, null); 
+2

Bonne réponse. Appréciez l'effort. Merci. – glmxndr

+3

Grande réponse est géniale. Merci, ça aide encore les gens;) – dantuch

+2

Le projet n'est plus maintenu. Consultez http://code.google.com/p/javaparser/issues/detail?id=9#c32 pour accéder à la page https://github.com/matozoid/javaparser – jedierikb

2

Pourriez-vous utiliser un doclet personnalisé avec JavaDoc?

Doclet.com peut fournir plus d'informations.

2

JavaCC est un "compilateur-compilateur" (générateur d'analyseur) pour Java. Il y a beaucoup de fichiers de grammaire, y compris un pour Java 1.5.

3

Je pense que vous pouvez utiliser ANTLR générateur d'analyseur.

Il est très facile à utiliser et ANTLR site a beaucoup d'exemples écrits en Java.

De plus, il est livré avec un plug-in pour eclipse.

+0

Pouvez-vous s'il vous plaît m'adresser à un exemple spécifique sur la façon d'extraire des méthodes en utilisant ANTLR? Je suis capable de faire l'analyse syntaxique du code java en récupérant des jetons uniques (par exemple 'public', 'static', 'void' ...) mais il me manque l'étape suivante. –

3

Vous pouvez construire votre analyseur avec l'un des générateurs d'analyseur:

  1. ANTLR
  2. JavaCC
  3. SableCC

, vous pouvez également utiliser (ou étudier comment cela fonctionne) quelque chose de prêt -fabriqué. Il y a Java Tree Builder qui utilise JavaCC et RefactorIt qui utilise ANTLR.

6

QDOX est un analyseur plus léger, qui ne parse que jusqu'au niveau de la méthode, c'est-à-dire que le corps de la méthode n'est pas analysé dans les instructions. Il vous donne plus ou moins, ce que vous demandez, même si vous auriez navigué le modèle pour trouver le bon nom, car il n'indexe pas les classes et les méthodes par nom.

+0

Simple et facile à utiliser. – ozhan

+0

Plus facile à utiliser, et disponible sur les dépôts Maven. – javydreamercsw

+0

Et même avec une meilleure licence (Apache 2) – elCapitano

Questions connexes