2012-06-21 1 views
3

FieldDeclaration (유형 : ASTNode)을 IField (유형 : JavaElement)으로 변환하는 방법은 무엇입니까? MethodDeclaration 노드와 마찬가지로 Node.resolveBinding()과 마찬가지로 FieldDeclaration ASTNode에서 바인딩을 가져올 수 있습니까?FieldDeclaration to IField - FieldDeclaration에서 IBinding 가져 오기

Need : 공개 상수를 갖는 클래스의 FieldDeclaration 노드를 방문하고 프로젝트의 해당 필드에 대한 참조를 검색하려고합니다. 나는 JDT의 SearchEngine을 사용하고있다. 내 questions 중 하나에 주석으로이 요청했지만, 같은 대한 대답을하지 않았다

SearchPattern.createPattern(iField, IJavaSearchConstants.REFERENCES); 

다음과 같이이를 위해 내가 검색 패턴을 만들려고합니다. 별도의 질문으로 게시하십시오.

미리 답변 해 주셔서 감사합니다.


답장에 대한 답변은 디팍의 대답입니다.

나는 그것이 아이 필드의 경우와 같은 결과를 반환하는 대신 아이 필드의 검색 패턴을 만들려면이 IJavaElement을 전달하고 경우

List<VariableDeclarationFragment> fragments = node.fragments(); 
VariableDeclarationFragment fragment = fragments.get(0); 
IJavaElement fieldElement = fragment.resolveBinding().getJavaElement(); 

을 다음과 같이 내가 JavaElement를 검색 할 수 있습니다 당신의 접근 방식을 사용.

답변

4

평소와 마찬가지로 ASTView 플러그인이 여러분의 친구입니다! :-) ASTView에서는 VariableDeclarationFragment에 대해 바인딩을 사용할 수 있지만 FieldDeclaration에는 사용할 수 없음을 알 수 있습니다.

FieldDeclaration 바인딩 얻기

  • FieldDeclaration의 '조각'을 얻을 => 지금 VariableDeclarationFragment의 무리 노드가
  • 전화 VariableDeclarationFragment # resolveBinding() (이 방법은 VariableDeclaration에서 상속됩니다)
+0

귀하의 답변에 대한 질문으로 질문을 업데이트했습니다. 회신 해주십시오. –

+0

디버깅 목적으로 'fieldElement'에 instanceof 확인을 수행하면 올바른 'IField'여야합니다. –

+0

그냥 확인하고 예, 그것은 IField의 인스턴스입니다. 고마워. –