【发布时间】:2017-01-05 16:02:43
【问题描述】:
所以我正在使用 Eclipse 的 JDT API 并尝试构建一个小型应用程序。但是,我在从访问的节点中提取数据时遇到了困难,因为我只能打印它们。
例如,我希望能够将 getSuperclassType() 的值返回或添加到 List 或 HashMap。然而,由于新的 ASTVisitor 是一个内部类,Java 不允许我在没有 final 关键字的情况下声明一个在 ASTVisitor 内部使用的对象。
private static void get(String src) {
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setSource(src.toCharArray());
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setResolveBindings(true);
parser.setBindingsRecovery(true);
final CompilationUnit cu = (CompilationUnit) parser.createAST(null);
cu.accept(new ASTVisitor() {
Set names = new HashSet();
public boolean visit(TypeDeclaration typeDecNode) {
if(!typeDecNode.isInterface()) {
System.out.println(typeDecNode.getName().toString());
System.out.println(typeDecNode.getSuperclassType());
System.out.println(typeDecNode.superInterfaceTypes().toString());
return true;
}
...
是否可以通过这样的一段代码将每个访问节点的所需数据存储到数据结构中?或者也许是另一种在不使用访问者模式的情况下从 AST 遍历节点的方法?
【问题讨论】:
标签: java abstract-syntax-tree eclipse-jdt visitor-pattern