在AST访问者中,我如何知道我正在访问哪个节点的属性?

时间:2010-12-11 19:04:00

标签: java eclipse eclipse-jdt abstract-syntax-tree

我正在编程AST访客(eclipse JDT)。

EnumDeclaration节点包含以下结构属性:

JAVADOCMODIFIERSNAMESUPER_INTERFACE_TYPESENUM_CONSTANTSBODY_DECLARATIONS

当我访问EnumDeclaration(例如SimpleName节点)的子节点时,是否可以知道我正在访问哪些节点列表?是否有可能区分?

我想以不同的方式处理节点,具体取决于我是在ENUM_CONSTANTS还是BODY_DECLARATIONS中找到它。

3 个答案:

答案 0 :(得分:2)

我找到了解决方案。显式访问列表中的节点(WITH accept(),而不是visit())。类似的东西(用于访问超级界面):

List<Type> superInterfaces = enumDecNode.superInterfaceTypes();
for( Type superInterface: superInterfaces)
    superInterface.accept( this);

请注意,无法使用:

    this.visit( superInterface);

因为Type是一个伞形抽象类,不存在visit( Type node)实现。

这也会强制访问其父级时访问superInterfaces列表中的节点的子节点。问题解决了。

另外,如果您已经通过这些列表处理了节点的所有子节点,则可以通过返回false来禁止访问者重新访问其子节点。

答案 1 :(得分:1)

您的节点应该调用相应的方法。

MODIFIERS -> visitModifiers 
NAME -> visitNAME

等等

答案 2 :(得分:0)

另一种替代解决方案(感谢Markus Keller @ eclipse JDT论坛):

  

使用“node.getLocationInParent()== EnumDeclaration.NAME_PROPERTY”或   其他* _PROPERTY常量。

     

马库斯

相关问题