2012-02-21 69 views
1

我正在使用Eclipse源代碼編輯器中的選擇。我定義了一個鍵綁定,使我在當前的插入位置獲得「文本」。我設法當前插入符號位置解析到IJavaElement獲取封閉的IJavaElement

private void processEditorSelection(IEditorPart part, ITextSelection selection) { 
      IEditorInput editorInput = ((IEditorPart) part).getEditorInput(); 
      final ITypeRoot root = (ITypeRoot) JavaUI.getEditorInputJavaElement(editorInput); 
      if (root != null) { 
       int offset = (selection).getOffset(); 
       IJavaElement[] codeSelect = root.codeSelect(offset, 0); 
       if (codeSelect.length > 0) { 
        //codeSelect[0...n] are my resolved elements at the current caret pos. 
     } 

我沒有設法弄清楚卻又是,如何解決封閉類型。例如:

public void do() { 
     System.out.println("it"); 
} 

如果光標在System.out的,我獲得系統調用出來的JavaElement,但我在封閉的方法實際上感興趣。有誰知道如何問Eclipse的封閉類型?像我編制的單位或方法是什麼?

感謝答案

回答

2

你正在尋找做這樣的事情:

ITypeRoot root = (ITypeRoot) JavaUI.getEditorInputJavaElement(editorInput); 
IJavaElement elt = root.getElementAt(caretPosition); 

這將找到包覆件,這可能是一個IFieldIMethodICompilationUnit。要獲得封閉類型,請調用此方法:

IType type = (IType) elt.getAncestor(IJavaElement.TYPE); 

如果沒有封閉類型,則此方法返回null。

+0

thx幫助! – user867204 2012-02-22 08:48:29