Eclipse 原始碼閱讀筆記2 – Eclipse 文字編輯器

來源:互聯網
上載者:User

AbstractTextEditor是Eclipse中文字編輯器的基類,了類化它,實現對應的抽象方法就能得到具有一般文字編輯器功能的文字編輯器,但是它遠不止於此。

先看看它都實現了什麼介面,下面是申明部分的原始碼:

public abstract class AbstractTextEditor extends EditorPart implements ITextEditor, IReusableEditor, ITextEditorExtension, ITextEditorExtension2, ITextEditorExtension3, ITextEditorExtension4, ITextEditorExtension5, INavigationLocationProvider, ISaveablesSource, IPersistableEditor

哇,好長啊,一個一個看吧。

ITextEditor

 ITextEditor定義了編輯器的一般介面,包括開啟儲存,選擇、高亮文字等。

 

IReusableEditor

這個介面是用於編輯器響應輸入發生變化的,舉個例子,你在編輯一個Java檔案,但中途又用其它編輯器把這個檔案的內容更改並儲存了,這時你的編輯器裡的檔案就和檔案系統中的不一樣了,一般的編輯器不會有反應。但在Eclipse裡這種變化可以通過檔案系統監聽器通知IReusableEditor,進而進行處理。

 

ITextEditorExtension

主要提供尺規操作功能表管理。

 

ITextEditorExtension2

查詢文字編輯器狀態,是否可編輯,是否有效。

 

ITextEditorExtension3

插入模式及覆蓋模式的狀態管理,以及Smart Insert功能狀態。

 

ITextEditorExtension4

提供注釋間的快速跳轉

 

ITextEditorExtension5

塊選擇支援狀態管理

 

INavigationLocationProvider、

提供導航功能,即可以記住編輯器經過的位置(在工具列上用向前,向後閱讀代碼的功能)

 

ISaveablesSource

管理可儲存的源(檔案或URL或其它)

 

IPersistableEditor

表示該編輯器可以儲存狀態,以至於下一次開啟可以恢複關閉時的狀態。

 

Eclipse為了使編輯器(不一定是文字編輯器)適用於多種輸入(例如檔案,FTP,HTTP,資料庫……),將輸入抽象為IEditorInput

 

其具體的資源類型可以實現不同的IEditorInput,這樣就能使同一個編輯器編輯不同類型的資源。IEditorInput並不含有資源的內容,而僅僅是對資源的一種描述,當調用AbstractTextEditor中setInput()設定Input時,編輯器要先用這個所謂的Input建立一個DocumentProvider

DocumentProvider負責具體的資源載入和儲存。

 

當一個資源被載入之後(或者建立了一個文檔,記憶體中實際是由一個IDocument對象來表示文檔的)

 

IDocuent提供了很多方便訪問文檔的方法,看起來似乎都是基於文本的,但是我們知道如果沒有特殊限制,二進位檔案也可以轉換為文本進行處理。

 

有了上面的知識,現在可以具體分析一下TextEditor是怎麼工作的了。

Step1 編輯器建立時需要指定一個Input(這裡我覺得可以譯為位置),如果沒有,則編輯器自動關閉,也就是說Eclipse的編輯器是不允許開啟沒有位置的檔案,注意,並不是要求檔案存在,而是要有位置。

Step2 編輯器用這個Input建立對應的DocumentProvider,調用DocumentProvider的connect等方法使之與資源相關,然後調用DocumentProvider的getDocument方法得到一個編輯器可以操作的Document。

Step3 編輯器從此一直操作Document,直到響應使用者儲存或者關閉檔案,此時調用DocumentProvider的saveDocument方法儲存檔案。

 

AbstractTextEditor中的操作

編輯器中的操作在初始化編輯器時由setAction添加,添加的Action就能在編輯器初始化後使用,比如我們常用的Ctrl+C。

 

其它

AbstractTextEditor中還有其它功能,比如判斷是否可儲存等。可以參考原始碼。

 

在下一篇中,我將研究一下JDT或CDT中和具體語言相關的編輯器的原始碼。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.