为什么打印节点的父节点返回父节点+子节点?

问题描述:

给定一个开始位置,我可以通过将它传递给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 

barSimpleName及其父是QualifiedName同时包含foobar。因此,父节点将包含多个AST节点,并在其上调用toString将打印出此节点的所有子节点。

+0

好的谢谢。那么是否有方法可以自己访问限定名称? – fabricemarcelin 2012-02-21 20:45:14

+0

限定名称是“foo.bar”。我想你只有在获得“酒吧”时才会访问“foo”。答案是肯定的。如果您以“bar”开头,则需要获取其父母,该父母的类型为QualifiedName。然后你需要调用“getQualifier()”。您需要递归调用此函数来处理“foo.bar.baz.bop”的情况。 – 2012-02-21 23:22:00

+0

谢谢你的洞察力。 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