Eclipseのプラグイン開発のJDTでのツールチップの表示(テキストのホバー)について。
|
Javaエディターで独自のツールチップの表示(テキストのホバー)を行うことが出来る。
IJavaEditorTextHoverの定義をextensionで行う。
org.eclipse.jdt.ui.text.java.hover.IJavaEditorTextHoverの実装クラスを作成する。
実体としてはorg.eclipse.jdt.internal.ui.text.java.hover.AbstractJavaEditorTextHoverを使うのが便利だが、例によってこのクラスは非公開(Eclipseプラグインではたとえpublicであっても、明示的に“公開”が指定されているクラスでないと使用できない)。
でも警告を抑止して使用できる。
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で テキストホバーの指定を行う。
<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なので、省略するとテキストホバークラスが実体化されない。