Java: código fuente de parse java, métodos de extracción

Deseo analizar los archivos de código fuente de Java y extraer el código fuente de los métodos.

Necesitaría un método como este:

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

¿Hay una manera simple de lograr esto, una biblioteca que me ayude a construir mi método, etc.?

Descargue el analizador de Java de http://javaparser.github.io/javaparser/

Tendrás que escribir un código. Este código invocará al analizador … le devolverá una ComstacktionUnit:

  InputStream in = null; ComstacktionUnit 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.


Tendrás que crear un visitante. Su visitante será fácil porque solo le interesan 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 al visitante, haz esto:

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

QDOX es un analizador más ligero, que solo analiza el nivel del método, es decir, el cuerpo del método no se analiza en las sentencias. 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.

Creo que puedes usar el generador de analizadores ANTLR .

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

También viene con un complemento para eclipse.

Puede construir su analizador sintáctico con uno de los generadores de analizadores sintácticos:

  1. ANTLR
  2. JavaCC
  3. SableCC

Además, puede usar (o estudiar cómo funciona) algo preparado. Hay Java Tree Builder que usa JavaCC y RefactorIt que usa ANTLR.

¿Podría usar un doclet personalizado con JavaDoc?

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

JavaCC es un “comstackdor comstackdor” (generador de analizador) para Java. Existen muchos archivos de gramática, incluido uno para Java 1.5.