我正在使用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位置是否包含在内?
感谢您的回答
答案 0 :(得分:2)
你正在寻找这样的事情:
ITypeRoot root = (ITypeRoot) JavaUI.getEditorInputJavaElement(editorInput);
IJavaElement elt = root.getElementAt(caretPosition);
这将找到封闭元素,可以是IField
,IMethod
或ICompilationUnit
。要获得封闭类型,请调用:
IType type = (IType) elt.getAncestor(IJavaElement.TYPE);
如果没有封闭类型,则此方法返回null。