在EclipseJDTJava解析器中,是否可以在不使用访问者的情况下逐节点遍历AST?

在EclipseJDTJava解析器中,是否可以在不使用访问者的情况下逐节点遍历AST?,java,parsing,abstract-syntax-tree,eclipse-jdt,tree-traversal,Java,Parsing,Abstract Syntax Tree,Eclipse Jdt,Tree Traversal,通过EclipseJDTAPI访问节点信息的标准方法是使用访问者模式。例如: unit.accept(new MyVisitorAdapter<Object>() { @Override public void visit(MethodCallExpr node, Object arg) { System.out.println("found method call: " + node.toString()); } }, null); unit.accept(新的M

通过EclipseJDTAPI访问节点信息的标准方法是使用访问者模式。例如:

unit.accept(new MyVisitorAdapter<Object>() {
  @Override public void visit(MethodCallExpr node, Object arg) {
    System.out.println("found method call: " + node.toString());
  }
}, null);
unit.accept(新的MyVisitorAdapter(){
@覆盖公共无效访问(MethodCallExpr节点,对象参数){
System.out.println(“找到方法调用:”+node.toString());
}
},空);
在本例中,要访问节点,我需要指定我感兴趣的节点类型(
MethodCallExpr
)。但是,要继续以通用方式访问节点信息,我应该覆盖所有
visit()
方法,可能会枚举EclipseJDTAPI中可用的每种节点。一个完整的例子,它是在哪里做的发现


在本文中,尽管不完全在相同的代码覆盖范围内,但我希望能够控制EclipseJDTJava解析器完成的遍历。我希望遍历AST节点,可能经过所有节点,选择我想要的,但不限制为类型,如上面的代码所示。可能吗?通过Eclipse JDT API是否有一种标准的方法来实现这一点?

如果您不关心节点类型,请覆盖
ASTVisitor.preVisit(ASTNode)
ASTVisitor.preVisit2(ASTNode)
ASTVisitor.postVisitor(ASTNode)

为什么没有访问者?事实上,使用访问者模式没有问题,如果API有我想要的访问者,但似乎不是这样。。。因此,我想通过节点提取一些信息,而不依赖于节点类型。您应该描述您的实际问题(“API中没有合适的访问者”),并发布您迄今为止尝试过的代码。访问者是遍历AST的常用方式。我的问题与我发布的内容有关。但是您应该记住,访问者只是在AST中浏览信息的选项之一(默认设置)。我只是想知道,在我尝试重新发明这个轮子之前,是否有人尝试过通过EclipseAPI实现另一个标准解决方案,或者是否有好的技巧可以手工实现。停止理论化,发布一些代码。例如,您编译的Java代码,如何使用EclipseJDTAPI进行编译,以及您实际想要提取哪些信息。在运行一些测试之后,我可以使用ASTVisitor.preVisit(ASTNode)获得所需的内容。尽管它仍然使用visitor模型,但它确实会经过所有节点,并允许按照源代码文件中相同的行顺序访问信息。非常感谢Stephan!