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
相关产品推荐
相关产品推荐

