使用Java解析器解析Java文件中的属性
我下面有三节课使用Java解析器解析Java文件中的属性,java,javaparser,Java,Javaparser,我下面有三节课 public class A { B b; } public class B { C c; public C getC() { A a; return c; } } public class C { } 我想使用java解析器解析这些类,该解析器包含以下信息: 类名 方法名 属性名称 我建议您从GitHub上最新版本的JavaParser开始: 您可以使用Maven轻松创建一个项目,其中包括依赖项Jav
public class A {
B b;
}
public class B {
C c;
public C getC() {
A a;
return c;
}
}
public class C {
}
我想使用java解析器解析这些类,该解析器包含以下信息:
- 类名
- 方法名
- 属性名称
<dependency>
<groupId>com.github.javaparser</groupId>
<artifactId>javaparser-core</artifactId>
<version>2.2.1</version>
</dependency>
JavaParser返回抽象语法树的根节点,该树是一个编译单元,表示文件的所有内容。您只需浏览此树并提取信息
例如,从CompilationUnit中,您可以使用返回列表的方法获取顶级类型(但不是内部类)。类型声明可以是类、接口或枚举。TypeDeclaration具有getName方法,您可以使用该方法获取已声明类型的名称。然后,您可以询问类型声明的成员并查找内部类、方法或字段
导航树的其他两种方法是:
*利用访客
*使用每个节点上可用的方法(编译单元、类型声明、方法声明、语句等)
要使用访问者模式,请检查JavaParser中的包:已经有几个抽象访问者需要扩展。一旦创建了访问者,就可以使用compilationUnit.accept(myVisitor,)调用它代码>,它将对整个树进行爬网
如果要改用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的问题,请随时加入
免责声明:我是JavaParser项目的贡献者好吧,那就去做吧。还有,那将是什么样的解析器实现呢?我想使用Java解析器(Japa解析器)。来源链接:谢谢你的回答。对于我上面的代码,我仍然无法解析字段名。你能帮帮我吗?
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);
...