转载请注明出处:
网上搜了一下,几乎没有实现的代码
自己摸索了两三天,知道实现org.eclipse.jdt.ui.javaEditorTextHovers接口
但是这个接口只有三个方法,只能满足普通的悬浮(悬浮框中加链接他就不能做)。
因此我的办法是看看eclipse自身是如何实现的,然后拿到源码自己改写
代码:
网上搜到开源代码
AnnotationHover.java
JavaEditorTextHover.java
BrowserInformationControlInput.java
JavadocHover.java // 扩展点的实现类 主要在这个代码中修改
JavaHoverMessages.java
JavaHoverMessages.properties
plugin.xml
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
org.eclipse.jdt,
org.eclipse.jface.text,
org.eclipse.ui.editors,
org.eclipse.jdt.core,
org.eclipse.jdt.ui
切记 扩展点属性 : activate="true"
很简单是吧
补充一下:下面是 org.eclipse.jdt.ui中plugin.xml的原话 其中Do not change the sequence of those hover contributions 一定要看一下,他告诉我们 鼠标移上去执行的先后顺序
<!-- Note: Do not change the sequence of those hover contributions -->
<extension
point="org.eclipse.jdt.ui.javaEditorTextHovers">
<hover
label="%sequentialHover"
description="%sequentialHoverDescription"
class="org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover"
id="org.eclipse.jdt.ui.BestMatchHover">
</hover>
<hover
label="%problemHover"
description="%problemHoverDescription"
class="org.eclipse.jdt.internal.ui.text.java.hover.ProblemHover"
id="org.eclipse.jdt.ui.ProblemHover">
</hover>
<hover
label="%nlsStringHover"
description="%nlsStringHoverDescription"
class="org.eclipse.jdt.internal.ui.text.java.hover.NLSStringHover"
id="org.eclipse.jdt.ui.NLSStringHover">
</hover>
<hover
label="%javadocHover"
description="%javadocHoverDescription"
class="org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover"
id="org.eclipse.jdt.ui.JavadocHover">
</hover>
<hover
label="%sourceHover"
description="%sourceHoverDescription"
class="org.eclipse.jdt.internal.ui.text.java.hover.JavaSourceHover"
id="org.eclipse.jdt.ui.JavaSourceHover">
</hover>
<hover
label="%annotationHover"
description="%annotationHoverDescription"
class="org.eclipse.jdt.internal.ui.text.java.hover.AnnotationHover"
id="org.eclipse.jdt.ui.AnnotationHover">
</hover>
</extension>
因此 在我们自己的插件开发中 也直接把如上的配置(6个hover)复制下来 (顺序不能变),然后针对某一个或者几个修改,总之就是顺序很重要
正确做法:
<extension
point="org.eclipse.jdt.ui.javaEditorTextHovers">
<hover
label="%sequentialHover"
description="%sequentialHoverDescription"
class="org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover"
id="org.eclipse.jdt.ui.BestMatchHover">
</hover>
<hover
label="%problemHover"
description="%problemHoverDescription"
class="org.eclipse.jdt.internal.ui.text.java.hover.ProblemHover"
id="org.eclipse.jdt.ui.ProblemHover">
</hover>
<hover
label="%nlsStringHover"
description="%nlsStringHoverDescription"
class="org.eclipse.jdt.internal.ui.text.java.hover.NLSStringHover"
id="org.eclipse.jdt.ui.NLSStringHover">
</hover>
<hover
label="%javadocHover"
description="%javadocHoverDescription"
class="com.my.test.JavadocHover"
id="com.my.test.JavadocHover"
activate="true">
</hover>
<hover
label="%sourceHover"
description="%sourceHoverDescription"
class="org.eclipse.jdt.internal.ui.text.java.hover.JavaSourceHover"
id="org.eclipse.jdt.ui.JavaSourceHover">
</hover>
<hover
label="%annotationHover"
description="%annotationHoverDescription"
class="org.eclipse.jdt.internal.ui.text.java.hover.AnnotationHover"
id="org.eclipse.jdt.ui.AnnotationHover">
</hover>
</extension>
错误做法
举例:如果我只复制了javadocHover 那么当这个关键字需要报错(例如没有导包),他就没法提示需要导包的错误
我一开始偷懒
只写成
<extension
point="org.eclipse.jdt.ui.javaEditorTextHovers">
<hover
label="%javadocHover"
description="%javadocHoverDescription"
class="com.my.test.JavadocHover"
id="com.my.test.JavadocHover"
activate="true">
</hover>
</extension>
结果悬浮实现了 但是需要报错(没导包)这个功能等却没了