2010-02-05 25 views
45

Deseo analizar los archivos de código fuente de Java y extraer el código fuente de los métodos.Java: código fuente de parse java, extraiga los métodos

que iba a necesitar un método como este:

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

¿Hay una manera sencilla de lograr esto, una biblioteca para ayudar a construir mi método, etc.?

+0

[tostador] (https://github.com/forge/roaster) ofrece una API fluida para trabajar con código Java. – koppor

Respuesta

53

Descargar el analizador de Java desde http://javaparser.github.io/javaparser/

Vas a tener que escribir código. Este código se invoca el programa de análisis ... se le devolverá 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 es una subclase de flujo de entrada. Puede usar un FileInputStream si lo desea.


Usted tendrá que crear un visitante. Su visitante será fácil, ya que sólo está interesado en los métodos:

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

para invocar a los visitantes, hacer esto:

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

Gran respuesta. Aprecia el esfuerzo. Gracias. – glmxndr

+3

La gran respuesta es genial. Gracias, ayuda a las personas incluso hoy;) – dantuch

+2

El proyecto ya no se mantiene. Compruebe http://code.google.com/p/javaparser/issues/detail?id=9#c32 que lo lleve a https://github.com/matozoid/javaparser – jedierikb

2

¿Podría usar un doclet personalizado con JavaDoc?

Doclet.com puede proporcionar más información.

2

JavaCC es un "compilador-compilador" (generador de analizadores) para Java. Existen muchos archivos de gramática, incluido uno para Java 1.5.

3

Creo que puede usar ANTLR generador de analizador.

Es muy fácil de usar y el sitio ANTLR tiene muchos ejemplos escritos en Java.

También viene con un plug-in para eclipse.

+0

¿Puede por favor agregarme algún ejemplo específico sobre cómo extraer métodos usando ANTLR? Puedo hacer que el análisis del código Java recupere tokens individuales (por ejemplo, "público", "estático", "vacío" ...) pero me falta el siguiente paso. –

3

Usted puede construir su analizador con uno de los generadores de analizadores sintácticos:

  1. ANTLR
  2. JavaCC
  3. SableCC

Además, se puede utilizar (o estudiar cómo funciona) algo listo -hecho. Hay Java Tree Builder que usa JavaCC y RefactorIt que usa ANTLR.

6

QDOX es un programa de análisis más ligero, que no sólo se analiza hasta el nivel del método, es decir, el cuerpo del método no se analiza en las declaraciones. Te proporciona más o menos lo que pides, aunque deberías navegar por el modelo para encontrar el nombre correcto, ya que no indexa clases y métodos por nombre.

+0

Simple y fácil de usar. – ozhan

+0

Más fácil de usar y disponible en los repositorios de Maven. – javydreamercsw

+0

E incluso con mejores licencias (Apache 2) – elCapitano

Cuestiones relacionadas