S-JIS[2013-02-23] 変更履歴

Eclipse JDT テキストホバー

Eclipseプラグイン開発JDTでのツールチップの表示(テキストのホバー)について。


概要

Javaエディターで独自のツールチップの表示(テキストのホバー)を行うことが出来る。

IJavaEditorTextHoverの定義をextensionで行う。


org.eclipse.jdt.ui.text.java.hover.IJavaEditorTextHoverの実装クラスを作成する。
実体としてはorg.eclipse.jdt.internal.ui.text.java.hover.AbstractJavaEditorTextHoverを使うのが便利だが、例によってこのクラスは非公開(Eclipseプラグインではたとえpublicであっても、明示的に“公開”が指定されているクラスでないと使用できない)。
でも警告を抑止して使用できる。

MyHyperlinkDetector.java:

import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.internal.ui.text.java.hover.AbstractJavaEditorTextHover;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextViewer;
@SuppressWarnings("restriction")
public class ExampleJavaEditorTextHover extends AbstractJavaEditorTextHover {
	@Override
	public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
		IJavaElement[] elements = super.getJavaElementsAt(textViewer, hoverRegion);
		if (elements == null) {
			return null;
		}
		for (IJavaElement code : elements) {
			// コードの種類毎に分岐
			int elementType = code.getElementType();
			switch (elementType) {
			case IJavaElement.TYPE: // クラス
				IType type = (IType) code;
				return "<b>" + type.getFullyQualifiedName() + "</b>";
			default:
				break;
			}
		}

		return null;
	}
}

getHoverInfo()で返した文字列(HTML)がツールチップとして表示される。
nullを返すと何も表示されない(デフォルトのテキストホバークラスが返したものが表示される)。

※IJavaElementを使わず、直接ASTNodeを使えば、例えば文字列等でも判定することが出来る。


マニフェストファイルのextensionで テキストホバーの指定を行う。

plugin.xml:

   <extension point="org.eclipse.jdt.ui.javaEditorTextHovers">
      <hover
            id="jp.hishidama.example.ExampleJavaEditorTextHover"
            class="jp.hishidama.example.ExampleJavaEditorTextHover"
            label="Example JavaEditor TextHover"
            activate="true">
      </hover>
   </extension>

activate属性のデフォルト値はfalseなので、省略するとテキストホバークラスが実体化されない。


JDTへ戻る / Eclipseプラグインへ戻る / Eclipseへ戻る / 技術メモへ戻る
メールの送信先:ひしだま