web-dev-qa-db-fra.com

Java: parse Java code source, méthodes d'extraction

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

J'aurais besoin d'une méthode comme celle-ci:

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

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

47
glmxndr

Téléchargez l'analyseur Java depuis http://javaparser.github.io/javaparser/

Vous devrez écrire du code. Ce code invoquera l'analyseur ... il vous renverra une 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;

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


Vous devrez créer un visiteur. Votre visiteur sera facile car vous ne vous intéressez qu'aux méthodes:

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

Pour invoquer le visiteur, procédez comme suit:

  MethodVisitor visitor = new MethodVisitor();
  visitor.visit(cu, null);
56
arcticfox

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

6
Felix Leipold

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

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

Il est également livré avec un plug-in pour Eclipse.

3
Upul Bandara

Vous pouvez créer votre analyseur avec l'un des générateurs d'analyseurs:

  1. ANTLR
  2. JavaCC
  3. SableCC

En outre, vous pouvez utiliser (ou étudier comment cela fonctionne) quelque chose de prêt à l'emploi. Il y a Java Tree Builder qui utilise JavaCC et RefactorIt qui utilise ANTLR.

3
Rorick

Pourriez-vous utiliser un doclet personnalisé avec JavaDoc?

Doclet.com peut fournir plus d'informations.

2
Rich

JavaCC est un "compilateur-compilateur" (générateur d'analyseur) pour Java. Il existe de nombreux fichiers de grammaire, dont un pour Java 1.5.

2
unwind