java – 如何从活动的Eclipse编辑器中获取当前的方法?

前端之家收集整理的这篇文章主要介绍了java – 如何从活动的Eclipse编辑器中获取当前的方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用一个 Eclipse插件,这将帮助我编码.基本上是一个String片段的库.

当创建一个新的,我想给它一个类别ClassName.MethodName.X的ID.

编辑器很简单:

IWorkbenchPage page = PlatformUI.getWorkbench()
                        .getActiveWorkbenchWindow().getActivePage();
IEditorPart activeEditor = page.getActiveEditor();
if(activeEditor.getClass().getName().endsWith("CompilationUnitEditor")){
// do something
}

现在…有没有办法使用Eclipse jdt API来获取我的文本光标当前所在的方法名称

编辑:
好.在安德鲁的帮助下,这是我得到的:

IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IEditorPart activeEditor = page.getActiveEditor();

if(activeEditor instanceof JavaEditor) {
    ICompilationUnit root = (ICompilationUnit) EditorUtility.getEditorInputJavaElement(activeEditor,false);
    try {
        ITextSelection sel = (ITextSelection) ((JavaEditor) activeEditor)
            .getSelectionProvider().getSelection();
        int offset = sel.getOffset();
        IJavaElement element = root.getElementAt(offset);
        if(element.getElementType() == IJavaElement.METHOD){
            return element.getElementName());
        }
    } catch (JavaModelException e) {
        e.printStackTrace();
    }
}

工作不错虽然这是使用限制类的一个肮脏的解决方案.

解决方法

不确定是否要求在当前插入位置周围的方法,或者插入位置正在选择的方法.我会给你两个

一,周边方法

IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IEditorPart activeEditor = page.getActiveEditor();
if(activeEditor instanceof JavaEditor) {
    IJavaElement elt = ((JavaEditor) activeEditor).getElementAt(((TextSelection) activeEditor.getSelection()).getOffset(),true);
    if (elt.getElementType == IJavaElement.METHOD) {
        return (IMethod) elt;
    }
}
return null;

重要的方法是getElementAt和getSelection.

这里是如何找到当前由插入符号选择的方法

IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IEditorPart activeEditor = page.getActiveEditor();
if(activeEditor instanceof JavaEditor) {
    ITypeRoot root = EditorUtility.getEditorInputJavaElement(this,false);
    TextSelection sel = ((TextSelection) activeEditor.getSelection());
    IJavaElement elt = root.codeSelect(sel.getOffset(),sel.getLength();
    if (elt.getElementType == IJavaElement.METHOD) {
        return (IMethod) elt;
    }
}
return null;

这里有趣的方法是codeSelect,它在给定的编译单元或类文件的上下文中解析当前选择.

实际代码将不同,因为您需要在许多地方检查null,但您不需要执行任何其他的instanceof测试.

猜你在找的Java相关文章