我希望解析java源代码文件,并提取方法源代码。
我需要一个像这样的方法:
/** Returns a map with key = method name ; value = method source code */
Map<String,String> getMethods(File javaFile);
有没有一种简单的方法来实现这一目标,一个帮助我构建方法的库等等?
答案 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)
答案 3 :(得分:3)
您可以使用解析器生成器之一构建解析器:
此外,您可以使用(或研究它如何工作)现成的东西。有Java Tree Builder使用JavaCC,RefactorIt使用ANTLR。
答案 4 :(得分:2)
您可以在JavaDoc中使用自定义doclet吗?
Doclet.com可能会提供更多信息。
答案 5 :(得分:2)
JavaCC是Java的“编译器编译器”(解析器生成器)。它有许多语法文件,包括Java 1.5的文件。