我希望解析java源代碼文件,並提取方法源代碼。Java:解析java源代碼,提取方法
我需要一個像這樣的方法:
/** Returns a map with key = method name ; value = method source code */
Map<String,String> getMethods(File javaFile);
有沒有一種簡單的方法來實現這一目標,一個庫,幫助我建立我的方法,等等?
我希望解析java源代碼文件,並提取方法源代碼。Java:解析java源代碼,提取方法
我需要一個像這樣的方法:
/** Returns a map with key = method name ; value = method source code */
Map<String,String> getMethods(File javaFile);
有沒有一種簡單的方法來實現這一目標,一個庫,幫助我建立我的方法,等等?
從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);
你可以在JavaDoc中使用自定義doclet嗎?
Doclet.com可能會提供更多信息。
JavaCC是Java的「編譯器 - 編譯器」(解析器生成器)。有很多語法文件,其中包括Java 1.5。
你可以用解析器生成的一個建立自己的解析器:
此外,您還可以使用(或學習它是如何工作的)東西準備-製作。有使用JavaCC的Java Tree Builder和使用ANTLR的RefactorIt。
QDOX是一個更輕量級的解析器,這不只是解析直到方法級別,即方法體不被解析爲語句。即使您要瀏覽模型以找到正確的名稱,它也會或多或少地給出您要求的內容,因爲它不會按名稱對類和方法編制索引。
簡單易用。 – ozhan 2012-03-12 15:12:36
更易於使用,並在Maven存儲庫上提供。 – javydreamercsw 2012-11-28 23:27:05
甚至更好的授權(Apache 2) – elCapitano 2014-02-08 12:42:15
[roaster](https://github.com/forge/roaster)提供了一個流暢的API來處理Java代碼。 – koppor 2017-05-02 16:02:03