2010-02-05 16 views
45

Ich möchte Java-Quellcodedateien analysieren und den Methodenquellcode extrahieren.Java: Java-Quellcode analysieren, Methoden extrahieren

ich eine Methode, wie diese benötigen würde:

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

Gibt es eine einfache Möglichkeit, dies zu erreichen, ist eine Bibliothek, mir zu helfen, meine Methode zu bauen usw.?

+0

[Röster] (https://github.com/forge/roaster) bietet eine fließende API für die Arbeit mit Java-Code. – koppor

Antwort

53

Laden Sie die Java-Parser von http://javaparser.github.io/javaparser/

Sie werden einen Code schreiben. Dieser Code wird der Parser aufrufen ... es wird Ihnen ein Compilation zurück:

  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; 

Hinweis: SEDInputStream ist eine Unterklasse von Eingangsstrom. Sie können einen FileInputStream verwenden, wenn Sie möchten.


Sie müssen einen Besucher erstellen. Ihr Besucher wird leicht sein, weil Sie nur daran interessiert sind in Methoden:

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

den Besucher aufzurufen, dies zu tun:

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

Große Antwort. Schätze die Mühe. Vielen Dank. – glmxndr

+3

Große Antwort ist großartig. Danke, es hilft den Leuten auch heute noch;) – dantuch

+2

Das Projekt wird nicht mehr gepflegt. Überprüfen Sie http://code.google.com/p/javaparser/issues/detail?id=9#c32, das Sie zu https://github.com/matozoid/javaparser führt. – jedierikb

2

Können Sie ein benutzerdefiniertes Doclet mit JavaDoc verwenden?

Doclet.com kann weitere Informationen liefern.

2

JavaCC ist ein "Compiler-Compiler" (Parser-Generator) für Java. Es gibt viele Grammatikdateien, darunter eine für Java 1.5.

3

Ich denke, Sie können ANTLR Parser-Generator verwenden.

Es ist sehr einfach zu bedienen und ANTLR Website hat viele Beispiele in Java geschrieben.

Auch kommt es mit einem Plug-in für Eclipse.

+0

Kannst du mir bitte ein spezifisches Beispiel darüber geben, wie man Methoden mit ANTLR extrahiert? Ich bin in der Lage, das Parsen von Java-Code zum Abrufen einzelner Tokens (z. B. 'öffentlich', 'statisch', 'leer' ...) machen, aber dann fehlt mir der nächste Schritt. –

3

Sie können Ihren Parser mit einem Parser-Generatoren bauen:

  1. ANTLR
  2. JavaCC
  3. SableCC

Sie können aber auch (oder untersuchen, wie es funktioniert) nutzen, um etwas bereit -gemacht. Es gibt Java Tree Builder, die JavaCC und RefactorIt verwendet, die ANTLR verwendet.

6

QDOX ist ein leichter Parser, die nur nicht analysieren bis auf Methodenebene, dh der Methodenkörper wird nicht in Anweisungen zerlegt. Es gibt Ihnen mehr oder weniger, wonach Sie fragen, obwohl Sie durch das Modell navigieren müssen, um den richtigen Namen zu finden, da es Klassen und Methoden nicht nach Namen indexiert.

+0

Einfach und einfach zu bedienen. – ozhan

+0

Einfacher zu verwenden und auf Maven-Repositories verfügbar. – javydreamercsw

+0

Und sogar mit besserer Lizenzierung (Apache 2) – elCapitano