Java:解析java源代码,解压缩方法

时间:2010-02-05 09:08:09

标签: java parsing

我希望解析java源代码文件,并提取方法源代码。

我需要一个像这样的方法:

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

有没有一种简单的方法来实现这一目标,一个帮助我构建方法的库等等?

6 个答案:

答案 0 :(得分:55)

http://javaparser.github.io/javaparser/

下载java解析器

你必须写一些代码。这段代码将调用解析器......它将返回一个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;

注意:SEDInputStream是输入流的子类。如果需要,可以使用FileInputStream。


您必须创建访问者。您的访问者很容易,因为您只对方法感兴趣:

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

要调用访问者,请执行以下操作:

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

答案 1 :(得分:6)

QDOX是一个更轻量级的解析器,它只解析到方法级别,即方法体不被解析为语句。它会为您提供或多或少的要求,即使您将导航模型以找到正确的名称,因为它不会按名称索引类和方法。

答案 2 :(得分:3)

我认为您可以使用ANTLR解析器生成器。

它非常易于使用,ANTLR网站有很多用Java编写的例子。

它还带有一个用于日食的插件。

答案 3 :(得分:3)

您可以使用解析器生成器之一构建解析器:

  1. ANTLR
  2. JavaCC
  3. SableCC
  4. 此外,您可以使用(或研究它如何工作)现成的东西。有Java Tree Builder使用JavaCC,RefactorIt使用ANTLR。

答案 4 :(得分:2)

您可以在JavaDoc中使用自定义doclet吗?

Doclet.com可能会提供更多信息。

答案 5 :(得分:2)

JavaCC是Java的“编译器编译器”(解析器生成器)。它有许多语法文件,包括Java 1.5的文件。