You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse插件开发:‘Run as’场景下多页编辑器内容与路径获取

解决Eclipse插件中获取项目根路径及编辑器内容的问题

嘿,我来帮你搞定这两个Eclipse插件开发里的小难题,刚好之前做类似的调试插件时踩过这些坑!


1. 从资源管理器的选中文件获取项目根路径

你已经能拿到选中的IFile了,要获取项目根路径其实很简单,通过IFile关联的IProject对象就能搞定。这里要区分工作空间内的逻辑路径和本地文件系统的物理路径,根据你的需求选就行:

IFile file = (IFile) ((IStructuredSelection) selection).getFirstElement();
IProject project = file.getProject();

// 工作空间内的项目根路径(格式:/你的项目名)
String workspaceProjectRoot = project.getFullPath().makeAbsolute().toString();

// 本地文件系统的项目根路径(格式:比如 D:\eclipse-workspace\你的项目名)
String localProjectRoot = project.getLocation().toString();

getFullPath()返回的是Eclipse工作空间内的相对路径,而getLocation()返回的是文件系统中的绝对路径,你可以根据脚本运行的需求选择合适的路径。


2. 从IEditorPart获取文件路径及编辑器页面内容

在编辑器右键触发“Run as”时,需要从IEditorPart入手,分两步走:先拿文件路径,再取当前页面的内容。

获取文件路径

首先通过IEditorPart.getEditorInput()拿到编辑器输入,判断是否是IFileEditorInput(脚本文件编辑器一般都是这个类型),然后就能拿到对应的IFile,后续获取路径的方式和第一个问题一样:

IEditorInput editorInput = editor.getEditorInput();
if (editorInput instanceof IFileEditorInput) {
    IFile file = ((IFileEditorInput) editorInput).getFile();
    String fileFullPath = file.getFullPath().makeAbsolute().toString();
    String projectRoot = file.getProject().getFullPath().toString();
    // 这里就拿到了文件路径和项目根路径
}

获取编辑器当前页面的内容

因为你用的是多页编辑器,必须先拿到当前激活的页面,再获取文本内容。需要判断编辑器是否是IMultiPageEditorPart,然后拿到选中的页面,再转换成ITextEditor来获取文档内容:

if (editor instanceof IMultiPageEditorPart) {
    IMultiPageEditorPart multiPageEditor = (IMultiPageEditorPart) editor;
    Object activePage = multiPageEditor.getSelectedPage();
    if (activePage instanceof ITextEditor) {
        ITextEditor textEditor = (ITextEditor) activePage;
        IDocumentProvider docProvider = textEditor.getDocumentProvider();
        IDocument document = docProvider.getDocument(textEditor.getEditorInput());
        String editorContent = document.get();
        // 这里就是当前激活页面的脚本内容了
    }
}
// 如果是单页文本编辑器的情况(以防万一)
else if (editor instanceof ITextEditor) {
    ITextEditor textEditor = (ITextEditor) editor;
    IDocument document = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput());
    String editorContent = document.get();
}

这里要注意:如果你的多页编辑器自定义了页面类型,可能需要调整类型判断,但一般基于模板的多页编辑器,文本页面都是ITextEditor的实现类。


内容的提问来源于stack exchange,提问作者Johan Witters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:50:19