eclipse实现javadoc悬浮

来源:互联网 发布:网络教育和函授区别 编辑:程序博客网 时间:2024/05/16 17:56

转载请注明出处:

 

网上搜了一下,几乎没有实现的代码

自己摸索了两三天,知道实现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>

 

结果悬浮实现了  但是需要报错(没导包)这个功能等却没了