获取IJavaElement

时间:2012-02-21 11:01:16

标签: methods eclipse-plugin swt jface

我正在使用Eclipse源代码编辑器中的选择。我定义了一个键绑定,它让我在当前的插入位置获得“文本”。我设法将当前的插入位置解析为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,但我实际上对封闭方法感兴趣。有谁知道如何向E​​clipse询问封闭类型?就像编辑单元或方法一样,我当前的carret位置是否包含在内?

感谢您的回答

1 个答案:

答案 0 :(得分:2)

你正在寻找这样的事情:

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

这将找到封闭元素,可以是IFieldIMethodICompilationUnit。要获得封闭类型,请调用:

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

如果没有封闭类型,则此方法返回null。