Eclipse JDT的自定义跳转功能

开发 后端
本文介绍Eclipse JDT的自定义跳转功能,比如说从定义的跳转标签跳转到父类中去等等。这个功能通过org.eclipse.ui.workbench.texteditor.hyperlinkDetectors跳转点实现。

之前51CTO曾介绍过六大便捷Eclipse JDT特性,应该说Eclipse JDT对于Java开发者而言是很方便的。下面将介绍其中的自定义跳转功能。

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

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

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

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

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

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

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

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

  1. < extension>   
  2.    < extension 
  3.       point="org.eclipse.ui.workbench.texteditor.hyperlinkDetectors"> 
  4.    < hyperlinkDetector 
  5.          activate="true" 
  6.          class="#className" 
  7.          id="#id" 
  8.          name="Link Control" 
  9.          targetId="org.eclipse.jdt.ui.javaCode"> 
  10.    < /hyperlinkDetector> 
  11. < /extension>   

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

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

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

  1. detectHyperlinks(ITextViewer textViewer,  
  2.    IRegion region, boolean canShowMultipleHyperlinks)     

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

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

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

最后试试效果,如果你做的没错的话,那就OK了。有需要的话,就试试看Eclipse JDT的自定义跳转功能吧。

编辑推荐】

  1. 六大便捷Eclipse JDT特性一览
  2. 部署Eclipse RAP到Tomcat的步骤详解
  3. Eclipse 3.5插件安装与卸载的10个小窍门
  4. Eclipse平台应用与开发专题
  5. Eclipse 3.5年度稳定版现已公开测试
责任编辑:yangsai 来源: JavaEye博客
相关推荐

2009-06-08 20:13:36

Eclipse自定义控

2023-07-21 19:16:59

OpenAIChatGPT

2012-07-24 15:03:19

OpenStack架构

2009-07-27 16:43:51

自定义Eclipse菜

2015-01-15 16:45:05

iOS源码自定义画图

2009-04-23 09:05:08

IE8llq自定义功能

2009-06-17 14:13:10

Eclipse常用技巧

2015-02-12 15:33:43

微信SDK

2016-02-26 14:57:50

飞象网

2015-01-14 15:06:48

定义相机

2010-05-06 14:50:23

Unix系统功能键

2015-02-12 15:38:26

微信SDK

2013-03-28 11:32:07

微信菜单轻App

2016-11-16 21:55:55

源码分析自定义view androi

2016-12-26 15:25:59

Android自定义View

2011-06-23 10:49:13

Qt 自定义信号

2021-11-22 10:00:33

鸿蒙HarmonyOS应用

2022-06-06 09:01:16

SwiftUI自定义导航

2010-10-25 16:05:07

oracle自定义函数

2013-03-25 17:26:09

点赞
收藏

51CTO技术栈公众号