我有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 –