Java:parsingjava源代码,提取方法

我希望parsingjava源代码文件,并提取方法源代码。

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

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

有一个简单的方法来实现这一点,一个图书馆来帮助我build立我的方法等?

http://javaparser.github.io/javaparser/下载javaparsing器;

你将不得不写一些代码。 这段代码将调用parsing器…它将返回一个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是inputstream的子类。 你可以使用FileInputStream。


你必须创build一个访问者。 你的访问者会很容易,因为你只对方法感兴趣:

  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); 

QDOX是一个更轻量级的parsing器,它只parsing到方法级别,即方法体不被parsing成语句。 它可以或多或less地给出你所要求的内容,尽pipe你可以通过浏览模型来find正确的名字,因为它不会通过名字来索引类和方法。

我想你可以使用ANTLRparsing器生成器。

这是非常容易使用和ANTLR网站有很多用Java编写的例子。

还有一个用于eclipse的插件。

您可以使用parsing器生成器来构buildparsing器:

  1. ANTLR
  2. 的JavaCC
  3. SableCC

此外,你可以使用(或研究它是如何工作的)一些现成的东西。 有使用JavaCC的Java树生成器和使用ANTLR的RefactorIt 。

你可以使用JavaDoc自定义doclet吗?

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

JavaCC是Java的“编译器 – 编译器”(parsing器生成器)。 有很多语法文件,其中包括Java 1.5。