Java: processar o código fonte java, métodos de extração

quero analisar os ficheiros de código fonte java, e extrair o código fonte dos métodos.

Eu precisaria de um método como este.
/** Returns a map with key = method name ; value = method source code */
Map<String,String> getMethods(File javaFile);

Existe uma maneira simples de conseguir isto, uma biblioteca para me ajudar a construir o meu método, etc. ?

Author: glmxndr, 2010-02-05

6 answers

Obtenha o processador java de http://javaparser.github.io/javaparser/

Vais ter de escrever um código. Este código irá invocar o analisador... vai devolver-te uma unidade de compilação:
            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: O SEDInputStream é uma subclasse de fluxo de entrada. Você pode usar um FileInputStream se quiser.


Vais ter de criar uma visita. Seu visitante será fácil porque você só está interessado em métodos:
  public class MethodVisitor extends VoidVisitorAdapter
  {
        public void visit(MethodDeclaration n, Object arg)
        {
             // extract method information here.
             // put in to hashmap
        }
  }

Para invocar o visitante, Faça isto:
  MethodVisitor visitor = new MethodVisitor();
  visitor.visit(cu, null);
 54
Author: arcticfox, 2015-05-29 01:18:20

QDOX é um analisador mais leve, que apenas analisa até o nível do método, ou seja, o corpo do método não está sendo processado em declarações. Ele lhe dá mais ou menos, o que você pede, mesmo que o que você teria navegado o modelo para encontrar o nome certo, como ele não indexa classes e métodos pelo nome.

 6
Author: Felix Leipold, 2017-06-01 08:13:42

Acho que podes usar o gerador de analisador sintético ANTLR.

É muito fácil de usar e o site do ANTLR tem muitos exemplos escritos em Java.

Também vem com um plug-in para o eclipse.
 3
Author: Upul Bandara, 2010-02-05 09:12:46

Podes construir o teu analisador com um dos geradores de analisadores:

  1. ANTLR
  2. JavaCC
  3. SableCC

Também pode usar (ou estudar como funciona) algo pronto. Existem Java Tree Builder que usa JavaCC e RefactorIt que usa o ANTLR.

 3
Author: Rorick, 2010-02-05 09:32:21

Pode usar uma doclet personalizada com o JavaDoc?

Doclet.com pode fornecer mais informações.

 2
Author: Rich, 2010-02-05 09:10:06

JavaCC é um" compilador-compilador " (gerador de parser) para Java. Há muitos arquivos de gramática para ele, incluindo um para Java 1.5.

 2
Author: unwind, 2010-02-05 09:10:28