【发布时间】:2018-07-03 21:47:15
【问题描述】:
通过 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 执行此操作的标准方法?
【问题讨论】:
-
为什么没有访客?
-
其实用visitor模式是没有问题的,如果API有我想要的visitor,但好像不是这样...所以我想通过节点提取一些信息,而不依赖于节点类型。
-
您应该描述您的实际问题(“API 中没有合适的访问者”)并发布您迄今为止尝试过的代码。访问者是遍历 AST 的常用方式。
-
我的问题与我发布的this another question 有关。但是您应该记住,访问者只是探索 AST 中信息的选项之一(默认)。我只是想知道是否有人通过 Eclipse API 尝试了另一种标准解决方案,或者在我尝试重新发明轮子之前有一个很好的技巧来手动完成。
-
这是一个不起眼的建议。停止理论并发布一些代码。例如,您编译的 Java 代码、您如何使用 Eclipse JDT API 以及您实际想要提取哪些信息。
标签: java parsing abstract-syntax-tree eclipse-jdt tree-traversal