Xtextのツールチップ(ホバーテキスト)のメモ。
Xtextで作ったエディターでは、名前(ルール上のnameの箇所)にマウスカーソルを合わせると、ツールチップ(ホバーメッセージ)が出る。
これはデフォルト(DefaultEObjectHoverProvider)では「ルールクラス名 名前」(名前部分は太字)という表示になるが、カスタマイズすることが出来る。
ホバーメッセージを変えるにはIEObjectHoverProviderの実装クラスを用意する。
Xtext 2.4.2の場合、ホバーメッセージ用の雛形クラスは生成されないので、自分で作る必要がある。
このクラスはuiプロジェクト内に作る。
package jp.hishidama.xtext.dmdl_editor.ui.labeling;
import org.eclipse.emf.ecore.EObject; import org.eclipse.xtext.ui.editor.hover.html.DefaultEObjectHoverProvider;
public class DMDLHoverProvider extends DefaultEObjectHoverProvider {
@Override protected String getFirstLine(EObject o) { String label = getLabel(o); return (label != null) ? " <b>" + label + "</b>" : ""; }
@Override protected String getDocumentation(EObject o) { return super.getDocumentation(o); } }
getFirstLine()はホバーメッセージ内のタイトル行に相当するので、HTMLのbタグを使って太字にしている。
getLabel()は、デフォルトではLabelProviderを呼び出して該当オブジェクトの名前を取得する。
getDocumentation()はホバーメッセージ内の本文に相当する。
デフォルトでは、該当オブジェクトの直前にブロックコメント(複数行コメント:ML_COMMENT)があれば、その内容が表示される。
そして、独自ホバークラスを使うようUiModuleクラスに登録する。
UiModuleクラスは自動生成されているので、必要なメソッドを追加する。
import org.eclipse.xtext.ui.editor.hover.IEObjectHoverProvider;
public Class<? extends IEObjectHoverProvider> bindHoverProvider() { return DMDLHoverProvider.class; }
追加するメソッドは、メソッド名を「bind」で始め、Classを返すようにする。
こうしておくと、リフレクションによってメソッドを呼び出して初期化して使用してくれるようだ。
(親クラスのAbstractGenericModule#getBindings()の中で それっぽい事をやっている)