为什么打印节点的父节点返回父节点+子节点?
问题描述:
给定一个开始位置,我可以通过将它传递给org.eclipse.jdt.core.dom.NodeFinder
类来找到一个节点。为什么打印节点的父节点返回父节点+子节点?
NodeFinder node = new NodeFinder(root, m.getSourceStart(), m.getSourceEnd() - m.getSourceStart() + 1);
ASTNode n = node.getCoveredNode();
让我们假设这个节点有父,并得到该节点的父n.getParent();
没有人知道为什么它打印出的父节点和节点?
例如我们知道foo()
在bar.foo()
的出发点,所以如果我做System.Out.Println(n.getParent().toString());
它打印bar.foo()
。它不应该只打印bar
?
在此先感谢您的洞察力。
答
您所看到的行为是预期的。
在这个例子中:
foo.bar
bar
是SimpleName
及其父是QualifiedName
同时包含foo
和bar
。因此,父节点将包含多个AST节点,并在其上调用toString
将打印出此节点的所有子节点。
好的谢谢。那么是否有方法可以自己访问限定名称? – fabricemarcelin 2012-02-21 20:45:14
限定名称是“foo.bar”。我想你只有在获得“酒吧”时才会访问“foo”。答案是肯定的。如果您以“bar”开头,则需要获取其父母,该父母的类型为QualifiedName。然后你需要调用“getQualifier()”。您需要递归调用此函数来处理“foo.bar.baz.bop”的情况。 – 2012-02-21 23:22:00
谢谢你的洞察力。 getQualifier非常有用: ASTNode n = node.getCoveredNode()。getParent();如果(n是表达式的实例)表达式exp =(表达式)n; if(exp instanceof MethodInvocation)MethodInvocation m =(MethodInvocation)exp; System.out.println(Signature.getQualifier(m.toString())); }} – fabricemarcelin 2012-02-22 08:51:31