Eclipse JDT的自定義跳轉(zhuǎn)功能
之前51CTO曾介紹過六大便捷Eclipse JDT特性,應(yīng)該說Eclipse JDT對(duì)于Java開發(fā)者而言是很方便的。下面將介紹其中的自定義跳轉(zhuǎn)功能。
在JDT中,可以在一個(gè)類上進(jìn)行跳轉(zhuǎn),或者是方法,或者是變量進(jìn)行跳轉(zhuǎn)。這個(gè)功能相當(dāng)方法,使用也很簡單:在欲跳轉(zhuǎn)的對(duì)象上按ctrl+鼠標(biāo)左鍵即可。
但是如果我們想提供一個(gè)自定義的跳轉(zhuǎn)功能怎么辦?這個(gè)功能可能有機(jī)會(huì)用的不多,但是如果我們需要,那我們就需要知道怎么用。對(duì)吧?
為了演示,這里我假定我想實(shí)現(xiàn)一個(gè)以下功能的跳轉(zhuǎn):
在方法或其他地方注釋里可以聲明一個(gè)“@super”標(biāo)簽,然后在這個(gè)標(biāo)簽上點(diǎn)鏈接的時(shí)候,會(huì)跳到這個(gè)類的父類里去。
為了實(shí)現(xiàn)跳轉(zhuǎn),首先我們需要知道擴(kuò)展哪個(gè)擴(kuò)展點(diǎn)才能實(shí)現(xiàn)這個(gè)功能:org.eclipse.ui.workbench.texteditor.hyperlinkDetectors
這個(gè)擴(kuò)展點(diǎn)就是用來擴(kuò)展鏈接功能的擴(kuò)展點(diǎn),當(dāng)然這后面的話就比較多,總體說來就是在editor的configuration里有一個(gè)getHyperlinkDetects()方法,用來得到所有的鏈接偵聽定義。
你可以直接在這個(gè)方法中返回你的定義,不過在jdt,它是通過讀取上面這個(gè)擴(kuò)展點(diǎn)的所有定義來實(shí)現(xiàn)的。這也給我們一個(gè)提示:如果我們要實(shí)現(xiàn)一個(gè)自已的鏈接,最好也是去讀這個(gè)擴(kuò)展點(diǎn)。
下面就是擴(kuò)展點(diǎn)的聲明了。下面是一個(gè)例子:
- < extension>
- < extension
- point="org.eclipse.ui.workbench.texteditor.hyperlinkDetectors">
- < hyperlinkDetector
- activate="true"
- class="#className"
- id="#id"
- name="Link Control"
- targetId="org.eclipse.jdt.ui.javaCode">
- < /hyperlinkDetector>
- < /extension>
這里要注意的就是這個(gè)targetId,表示這個(gè)鏈接偵聽是對(duì)誰來說的。否則真要把所有的擴(kuò)展都加到j(luò)ava上去了。所以如果想擴(kuò)展java,這個(gè)targetId就應(yīng)該像上面這樣寫。
最后剩下的就是實(shí)現(xiàn)那個(gè)類了。
這個(gè)類需要繼承:AbstractHyperlinkDetector,然后實(shí)現(xiàn)他的一個(gè)方法:
- detectHyperlinks(ITextViewer textViewer,
- IRegion region, boolean canShowMultipleHyperlinks)
在這個(gè)方法里返回一個(gè)IHyperLink[]對(duì)象,或者是返回空。你需要做的其實(shí)就是判斷你當(dāng)前選中的內(nèi)容范圍,然后判斷是否要起用一個(gè)鏈接。例如上面說的“@super”,當(dāng)前的內(nèi)容是“super”,你可以往前追加一個(gè),判斷是否是"@",然后再往最前和最后追加一個(gè),判斷是否是空格。如果是,那你就應(yīng)該返回一個(gè)IHyperLink[]對(duì)象。
如果返回空,那按ctrl+鼠標(biāo)左鍵時(shí)沒有反應(yīng),否則會(huì)出現(xiàn)一個(gè)手形和一條鏈接線,就像其他的鏈接一樣。
最后就是實(shí)現(xiàn)你的IHyperLink對(duì)象了,顯然,這個(gè)需要實(shí)現(xiàn)IHyperLink接口。
最后試試效果,如果你做的沒錯(cuò)的話,那就OK了。有需要的話,就試試看Eclipse JDT的自定義跳轉(zhuǎn)功能吧。
編輯推薦】