我有3個類以下。使用Java解析器從Java文件解析屬性
public class A {
B b;
}
public class B {
C c;
public C getC() {
A a;
return c;
}
}
public class C {
}
我想使用具有以下信息Java解析器解析類:
- 類名
- 方法名
- 屬性名稱
我有3個類以下。使用Java解析器從Java文件解析屬性
public class A {
B b;
}
public class B {
C c;
public C getC() {
A a;
return c;
}
}
public class C {
}
我想使用具有以下信息Java解析器解析類:
我建議你從開始GitHub上提供的JavaParser的最新版本:https://github.com/javaparser/javaparser
您可以輕鬆創建使用Maven和包括依賴JavaParser類中的一個項目:
<dependency>
<groupId>com.github.javaparser</groupId>
<artifactId>javaparser-core</artifactId>
<version>2.2.1</version>
</dependency>
然後解析文件是很容易的:
File sourceFile = new File("path/to/my/file.java");
CompilationUnit compilationUnit = JavaParser.parse(sourceFile);
JavaParser類返回抽象語法的根節點它是一個CompilationUnit並表示文件的所有內容。您只需導航此樹並提取信息。
例如從CompilationUnit你可以使用該方法getTypes這將返回TypeDeclaration列表頂部的類型(而不是內部類)。 TypeDeclaration可以是類,接口或枚舉。 TypeDeclaration的getName方法可以用來獲取聲明類型的名稱。然後,您可以請求類型聲明的成員並查找內部類,方法或字段。
其他兩種方式來瀏覽樹是: *使用方法getChildrenNodes它可在每個節點上(CompilationUnit,TypeDeclaration,方法的聲明,聲明等)
要使用訪問者模式利用遊客 *在JavaParser中檢查包visitor:已經有幾個抽象訪問者可以擴展。一旦你創建了你的訪問者,你可以使用compilationUnit.accept(myVisitor, <extra arg>);
來調用它,它將爬取整棵樹。
如果你想使用getChildrenNodes相反,你可以沿着這些路線做一些事情:
void processNode(Node node) {
if (node instanceof TypeDeclaration) {
// do something with this type declaration
} else if (node instanceof MethodDeclaration) {
// do something with this method declaration
} else if (node instanceof FieldDeclaration) {
// do something with this field declaration
}
for (Node child : node.getChildrenNodes()){
processNode(child);
}
}
...
CompilationUnit cu = JavaParser.parse(sourceFile);
processNode(node);
...
希望它可以幫助,如果您有特定於其他了JavaParser問題隨意open an issue或加入JavaParser chat。
聲明:我是JavaParser項目的貢獻者
感謝您的回答。 對於我上面的代碼,我仍然無法解析字段名稱。 你能幫我嗎? –
那麼,嗯,這樣做。此外,將是什麼分析器實現? – fge
我想使用Java Parser(Japa Parser)。 來源鏈接: https://code.google.com/p/javaparser/wiki/UsingThisParser –