2010-02-05 16 views
45

Desidero analizzare i file di codice sorgente java ed estrarre il codice sorgente dei metodi.Java: codice sorgente parse java, metodi di estrazione

avrei bisogno di un metodo come questo:

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

C'è un modo semplice per raggiungere questo obiettivo, una libreria per aiutarmi a costruire il mio metodo, ecc?

+0

[roaster] (https://github.com/forge/roaster) offre un'API fluente per lavorare con il codice Java. – koppor

risposta

53

Scarica il parser Java da http://javaparser.github.io/javaparser/

Dovrete scrivere del codice. Questo codice richiamerà il parser ... tornerà 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; 

Nota: SEDInputStream è una sottoclasse di flusso di input. È possibile utilizzare un FileInputStream se lo si desidera.


Dovrai creare un visitatore. Il visitatore sarà facile perché sei solo interessato a metodi:

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

per richiamare il visitatore, fare questo:

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

Ottima risposta. Apprezzo lo sforzo. Grazie. – glmxndr

+3

La grande risposta è grande. Grazie, aiuta le persone anche oggi;) – dantuch

+2

Il progetto non viene più gestito. Controlla http://code.google.com/p/javaparser/issues/detail?id=9#c32 che ti indirizza a https://github.com/matozoid/javaparser – jedierikb

2

È possibile utilizzare un doclet personalizzato con JavaDoc?

Doclet.com può fornire ulteriori informazioni.

2

JavaCC è un "compilatore-compilatore" (generatore di parser) per Java. Esistono molti file di grammatica, incluso uno per Java 1.5.

3

Penso che sia possibile utilizzare il generatore di parser ANTLR.

È molto facile da usare e il sito ANTLR ha molti esempi scritti in Java.

Inoltre viene fornito con un plug-in per eclissi.

+0

Puoi per favore aggiungermi ad alcuni esempi specifici su come estrarre metodi usando ANTLR? Sono in grado di eseguire il parsing del codice java recuperando singoli token (ad esempio "public", "static", "void" ...) ma poi mi manca il passaggio successivo. –

3

È possibile costruire il parser con uno dei generatori di parser:

  1. ANTLR
  2. JavaCC
  3. SableCC

Inoltre, è possibile utilizzare (o studiare come funziona) qualcosa di pronto -fatto. Esistono Java Tree Builder che utilizza JavaCC e RefactorIt che utilizza ANTLR.

6

QDOX è un parser più leggero, che non analizza solo fino al livello del metodo, cioè il corpo del metodo non viene analizzato in istruzioni. Ti dà più o meno, quello che chiedi, anche se avresti dovuto navigare nel modello per trovare il nome giusto, dato che non indicizza classi e metodi per nome.

+0

Semplice e facile da usare. – ozhan

+0

Più facile da usare e disponibile sui repository Maven. – javydreamercsw

+0

E anche con licenze migliori (Apache 2) – elCapitano

Problemi correlati