我正在编程AST访客(eclipse JDT)。
EnumDeclaration
节点包含以下结构属性:
JAVADOC
,MODIFIERS
,NAME
,SUPER_INTERFACE_TYPES
,ENUM_CONSTANTS
和BODY_DECLARATIONS
。
当我访问EnumDeclaration
(例如SimpleName
节点)的子节点时,是否可以知道我正在访问哪些节点列表?是否有可能区分?
我想以不同的方式处理节点,具体取决于我是在ENUM_CONSTANTS
还是BODY_DECLARATIONS
中找到它。
答案 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常量。
马库斯