Получить вложение IJavaElement - PullRequest
1 голос
/ 21 февраля 2012

Я работаю с выборками в редакторе исходного кода 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 системного вызова, но на самом деле меня интересует включающий метод. Кто-нибудь знает, как спросить Eclipse для типа вложения? Например, в какой единице или методе компиляции содержится мое текущее положение carret?

Спасибо за ответ

1 Ответ

2 голосов
/ 21 февраля 2012

Вы хотите сделать что-то вроде этого:

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

Это найдет включающий элемент, который может быть IField, IMethod или ICompilationUnit.Чтобы получить включающий тип, вызовите это:

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

Этот метод возвращает нуль, если нет включающего типа.

...