轉:【Eclipse外掛開發】開啟編輯器
轉:【Eclipse外掛開發】開啟編輯器 http://www.blogjava.net/zhuxing/archive/2008/08/27/225041.html
//建立工程
IProject project = ResourcesPlugin.getWorkspace().getRoot()
.getProject("TestProject");
if (!project.exists())
project.create(null);
if (!project.isOpen())
project.open(null);
//建立檔案
IFile java_file = project.getFile(new Path("/java_file.java"));
InputStream inputStreamJava = new ByteArrayInputStream(
"class MyType{}".getBytes());
if (!java_file.exists())
java_file.create(inputStreamJava, false, null);
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IDE.openEditor(page, java_file);
注意要引入以下幾個:否則會找不到相應的類
org.eclipse.ui
org.eclipse.core.runtime
org.eclipse.core.resources
org.eclipse.core.varibles
org.eclipse.ui.ide
[@more@]今天終於可以閒一天,想來想去就亂寫點東西吧,說不定對有些新人有點幫助呢~_~ 用Eclipse API的方式來開啟編輯器,可能對任何一個外掛開發者都不是很陌生的操作了。但是,還是建議你忍著看一下,全當是複習吧~_~。 【開啟editor的介面討論】 先來看一下workbench吧,workbench從靜態劃分應該大致如下: 從結構圖我們大致就可以猜測出來,workbench page作為一個IWorkbenchPart(無論是eidtor part還是view part)的容器,肯定會接受workbench page的管理。看了一下,IWorkbenchPage介面定義中確實提供給瞭如下開啟編輯器的操作: 【IWokbenchPage提供的介面】 1 public interface IWorkbenchPage extends IPartService, ISelectionService,ICompatibleWorkbenchPage { 2 3 public IEditorPart openEdito(IEditorInput input, String editorId)throws PartInitException; 4 5 public IEditorPart openEdito(IEditorInput input, String editorId, boolean activate) throws PartInitException; 6 7 public IEditorPart openEditor(final IEditorInput input, final String editorId, final boolean activate, final int matchFlags)throws PartInitException; 8 } 那到這邊,可能很多人已經知道了怎麼呼叫這些介面了: PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().openEditor(...) (說明:PlatformUI可以看作是整個eclipse ui框架的門面類,當然最核心的作用就是讓使用者獲取到workbench。Eclipse中存在的其他一些門面類如:ResourcesPlugin、Platform、JavaCore、JavaUI等) 我們再仔細看一下IWorkbenchPage對應的實現類(org.eclipse.ui.internal.WorkbenchPage)中的以上介面的實現程式碼,真正在管理Editor的是一個叫做EditorManager的東東(同理,view part對應的管理器角色類是叫做ViewFactory的東東)。這裡的EditorManager和View Factory是workbench實現中非常精華的部分,看一下里面的實現就會很大程度上理解workbench所謂懶載入、懶初始化是如何實現的了,如何實現part 複用的...等等。 上圖就用來說明workbench是如何來管理各種part的,其中descriptor角色的核心作用是延遲載入擴充套件(延遲載入使用者透過editors或者views提供的擴充套件),reference角色的核心作用是用來延遲初時化具體的part(例如避免過早的建立對應的control等等)。再說下去有點偏離主題了,這部分,以後有時間再寫 【IDE工具類提供的介面】 上面IWorkbenchPage提供介面都需要使用者準備兩樣東西:一是建立IEditorInput例項,二是指定editor id。有些使用者可能不想幹這兩件事情,所以在工具類org.eclipse.ui.ide.IDE中提供了其他的介面: 1 public static IEditorPart openEditor(IWorkbenchPage page, IFile input) throws PartInitException { } 2 3 public static IEditorPart openEditor(IWorkbenchPage page, IFile input, boolean activate) throws PartInitException { } 4 5 public static IEditorPart openEditor(IWorkbenchPage page, IFile input, boolean activate, boolean determineContentType) { } 6 7 public static IEditorPart openEditor(IWorkbenchPage page, IFile input, String editorId) throws PartInitException { } 8 9 public static IEditorPart openEditor(IWorkbenchPage page, IFile input, String editorId, boolean activate) throws PartInitException { } 10 11 上面5個介面操作中, 對於上面的三個操作,Eclipse會自動為你準備IEditorInput例項,並動態繫結合適的編輯器型別。對於下面的兩個操作,Eclipse會為你自動準備IEditorInput例項,但是需要使用者自己指定editor id。 接下來我們看兩個問題,一是如何建立IEditorInput例項的;而是如何動態計算對應的editor id的。 【有關FileEditorInput】 在IDE工具類中提供的5個接受IFile物件的openEditor介面中,在對應的實現中都是預設構造了一個FileEditorInput(org.eclipse.ui.part.FileEditorInput)例項,這個例項也是org.eclipse.ui.IFileEditorInput介面的預設實現類(注意:Eclipse中很多地方都使用這種Interface/Default Impl的方式,Interface會暴露,Default Impl則根據情況選擇是否暴露,一般是如果Interface希望使用者來擴充套件繼承,則會暴露對應的Default Impl,如果Interface不希望使用者來擴充套件繼承,例如IResource系列介面,則一般會將Default Impl丟如對應的internal包中)。 我們看一下org.eclipse.ui.part.FileEditorInput中是如何實現IEditorInput.exists()介面的: 1 public class FileEditorInput implements IFileEditorInput,IPathEditorInput,IPersistableElement { 2 private IFile file; 3 4 public boolean exists() { 5 return file.exists(); 6 } 7 } 我們看到內部的實現是持有了IFile控制程式碼,如果IFile代表的資源沒有存在於工作區之內,那麼就會返回false。(疑問:如果我們開啟工作區外部的檔案呢???顯然,FileEditorInput並不合適,稍後看...) 【動態計算editor id】 下面,我們再來看一下IDE類是如何計算所謂的預設eidtor id的。追蹤實現,我們看到了IDE.getDefaultEditor 1 public static IEditorDescriptor getDefaultEditor(IFile file, boolean determineContentType) { 2 // Try file specific editor. 3 IEditorRegistry editorReg = PlatformUI.getWorkbench() 4 .getEditorRegistry(); 5 try { 6 String editorID = file.getPersistentProperty(EDITOR_KEY); 7 if (editorID != null) { 8 IEditorDescriptor desc = editorReg.findEditor(editorID); 9 if (desc != null) { 10 return desc; 11 } 12 } 13 } catch (CoreException e) { 14 // do nothing 15 } 16 17 IContentType contentType = null; 18 if (determineContentType) { 19 contentType = getContentType(file); 20 } 21 // Try lookup with filename 22 return editorReg.getDefaultEditor(file.getName(), contentType); 23 } 上面的程式碼大致趕了如下兩件事情: 1、如果對應的資源設定了一個特定的持久化屬性EDITOR_KEY,則會使用EDITOR_KEY屬性值所代表的編輯器(說明:有關Eclipse資源的屬性支援,請參閱其他文件)。那如果一個資源不在工作區之內,又如何設定EDITOR_KEY屬性呢??? (~_~確實沒法設定) 2、查詢對應的content type,使用者透過org.eclipse.core.runtime.contentTypes擴充套件點來註冊自定義的內容型別,在內容型別中會指定對應的副檔名和預設編碼,例如JDT中註冊瞭如下內容型別(摘自org.eclipse.jdt.core/plugin.xml):來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11419868/viewspace-1011023/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Eclipse外掛開發demoEclipse
- eclipse開發php的外掛EclipsePHP
- 開發unity外掛——一次搞定unity編輯器常用功能Unity
- 前端開發需要用到的幾款線編輯器外掛前端
- Eclipse外掛開發--聯絡方式Eclipse
- Chrome外掛——Markdown編輯器Chrome
- eclipse新增easyExport外掛,開啟本地檔案EclipseExport
- eclipse下開發winform的外掛WindowBuilderEclipseORMUI
- Eclipse的Lua開發外掛 LDT地址Eclipse
- Vue外掛-json編輯器VueJSON
- Eplan外掛 - 自由文字編輯器
- Eclipse外掛開發(原書第3版)Eclipse
- [外掛擴充套件]前臺編輯器外掛Editor套件
- Java中的編譯器外掛開發與應用Java編譯
- win10策略編輯器怎麼開啟 win10策略編輯器開啟的方法Win10
- Mac 用命令開啟 Sublime 編輯器Mac
- IE瀏覽器外掛開發瀏覽器
- UC瀏覽器外掛開發瀏覽器
- google瀏覽器外掛開發Go瀏覽器
- Unity3D編輯器外掛編寫教程Unity3D
- 使用編輯器裡的聲音外掛
- 輕量化web組態編輯器外掛Web
- JSjet可在Eclipse中編輯開發Javascript程式碼JSEclipseJavaScript
- Flutter外掛開發Flutter
- Mybatis外掛開發MyBatis
- Webstorm 外掛開發WebORM
- flutter 外掛開發Flutter
- 開發Rhino外掛
- chrome 外掛開發Chrome
- [外掛擴充套件]後臺編輯器0.2套件
- 本地組策略編輯器怎麼開啟win10 W10本地組策略編輯器怎麼開啟Win10
- 關於策略組編輯器無法開啟
- Flutter開發之Flutter外掛開發Flutter
- JMeter自定義取樣器外掛開發JMeter
- win7如何開啟組策略編輯器?Win7系統開啟組策略編輯器的操作步驟Win7
- win10怎麼開啟組策略編輯器 win10開啟本地組策略編輯器的2個方法Win10
- 快速開發,7個 Bootstrap 線上編輯器boot
- 地圖編輯器開發中的心得地圖