0

시작 위치가 주어지면 노드를 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 만 인쇄하면 안됩니까?

미리 감사드립니다.

답변

0

표시되는 동작이 예상됩니다. 이 예에서

:

foo.bar 

barSimpleName 있고 부모가 foobar 모두 포함하는 QualifiedName이다. 따라서 부모 노드는 둘 이상의 AST 노드를 포함하고 그것에 toString을 호출하면이 노드의 모든 자식이 인쇄됩니다.

+0

감사합니다. 그렇다면 정규화 된 이름에 액세스하는 방법은 있습니까? – fabricemarcelin

+0

규정 된 이름은 "foo.bar"입니다. 나는 당신이 "술집"을 받으면 "foo"만 액세스 할 것을 요구한다고 생각합니다. 대답은 '예'입니다. "bar"로 시작하면 QualifiedName 유형의 부모를 가져와야합니다. 그런 다음 "getQualifier()"를 호출해야합니다. "foo.bar.baz.bop"의 대소 문자를 처리하기 위해 이것을 재귀 적으로 호출해야합니다. –

+0

통찰력을 가져 주셔서 감사합니다. getQualifier가 도움이되었습니다. ASTNode n = node.getCoveredNode(). getParent(); if (n instanceof Expression) { 표현식 exp = (표현식) n; if (exp instanceof MethodInvocation) { MethodInvocation m = (MethodInvocation) exp; System.out.println (Signature.getQualifier (m.toString())); }} – fabricemarcelin