扩展Eclipse Java编辑器的链接功能

在JDT中,可以在一个类,或者是方法,或者是变量上进行跳转。这个功能相当方便、实用;使用也很简单:在欲跳转的对象上按ctrl+鼠标左键即可。

 

但是如果我们想提供一个自定义的跳转功能怎么办?这个功能可能用到的机会不多,但是如果我们需要,那我们就需要知道怎么用。对吧?

 

为了演示,这里我假定我想实现一个以下功能的跳转:

 

在方法或其他地方注释里可以声明一个“@super”标签,然后在这个标签上点链接的时候,会跳到这个类的父类里去。

 

为了实现跳转,首先我们需要知道扩展哪个扩展点才能实现这个功能:org.eclipse.ui.workbench.texteditor.hyperlinkDetectors

 

这个扩展点就是用来扩展链接功能的扩展点,当然这后面的话就比较多,总体说来就是在editor的configuration里有一个getHyperlinkDetects()方法,用来得到所有的链接侦听定义。

 

你可以直接在这个方法中返回你的定义,不过在jdt,它是通过读取上面这个扩展点的所有定义来实现的。这也给我们一个提示:如果我们要实现一个自已的链接,最好也是去读这个扩展点。

 

下面就是扩展点的声明了。下面是一个例子:

 

   </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>

 

这里要注意的就是这个targetId,表示这个链接侦听是对谁来说的。否则真要把所有的扩展都加到java上去了。所以如果想扩展java,这个targetId就应该像上面这样写。

 

最后剩下的就是实现那个类了。

 

这个类需要继承:AbstractHyperlinkDetector,然后实现他的一个方法:

detectHyperlinks(ITextViewer textViewer,
			IRegion region, boolean canShowMultipleHyperlinks) 

 

在这个方法里返回一个IHyperLink[]对象,或者是返回空。你需要做的其实就是判断你当前选中的内容范围,然后判断是否要起用一个链接。例如上面说的“@super”,当前的内容是“super”,你可以往前追加一个,判断是否是"@",然后再往最前和最后追加一个,判断是否是空格。如果是,那你就应该返回一个IHyperLink[]对象。

 

如果返回空,那按ctrl+鼠标左键时没有反应,否则会出现一个手形和一条链接线,就像其他的链接一样。

 

最后就是实现你的IHyperLink对象了,显然,这个需要实现IHyperLink接口。

 

最后试试效果,如果你做的没错的话,那就OK了。

 

当然你要有什么疑问,欢迎咨询!

你可能感兴趣的:(java,eclipse,UI,咨询)