在 Eclipse JDT Java 解析器中,是否可以在不使用访问者的情况下逐个节点遍历 AST?
In Eclipse JDT Java parser, is it possible to traverse the AST node by node without the using of visitors?
通过 Eclipse JDT API 访问节点信息的标准方法是使用访问者模式。例如:
unit.accept(new MyVisitorAdapter<Object>() {
@Override public void visit(MethodCallExpr node, Object arg) {
System.out.println("found method call: " + node.toString());
}
}, null);
在这种情况下,要访问节点,我需要指定我感兴趣的节点类型(MethodCallExpr
对于这种情况)。但是,要继续以通用方式访问节点信息,我应该覆盖所有 visit()
方法,可能枚举 Eclipse JDT API 中可用的每种节点。在 here.
中找到了完整的示例。
在这种情况下,虽然不完全在代码覆盖率的同一个域中,但我想控制 Eclipse JDT Java 解析器完成的遍历。我想遍历 AST 节点,可能会经过所有这些节点,选择我想要的,但不限于一种类型,如上面的代码所示。可能吗?是否有通过 Eclipse JDT 执行此操作的标准方法 API?
如果您不关心节点类型,请覆盖 ASTVisitor.preVisit(ASTNode)
、ASTVisitor.preVisit2(ASTNode)
、ASTVisitor.postVisit(ASTNode)
。
通过 Eclipse JDT API 访问节点信息的标准方法是使用访问者模式。例如:
unit.accept(new MyVisitorAdapter<Object>() {
@Override public void visit(MethodCallExpr node, Object arg) {
System.out.println("found method call: " + node.toString());
}
}, null);
在这种情况下,要访问节点,我需要指定我感兴趣的节点类型(MethodCallExpr
对于这种情况)。但是,要继续以通用方式访问节点信息,我应该覆盖所有 visit()
方法,可能枚举 Eclipse JDT API 中可用的每种节点。在 here.
在这种情况下,虽然不完全在代码覆盖率的同一个域中,但我想控制 Eclipse JDT Java 解析器完成的遍历。我想遍历 AST 节点,可能会经过所有这些节点,选择我想要的,但不限于一种类型,如上面的代码所示。可能吗?是否有通过 Eclipse JDT 执行此操作的标准方法 API?
如果您不关心节点类型,请覆盖 ASTVisitor.preVisit(ASTNode)
、ASTVisitor.preVisit2(ASTNode)
、ASTVisitor.postVisit(ASTNode)
。