snuffkinの遊び場

IT関係、スポーツ、数学等に関することを、気が向いたときに書いてます。

ウィジット・インジェクションをチェック

Uruma Studio開発中です。
まずは、ソースコードに記述した要素が画面定義と対応しているかチェックする機能を開発中。以前にも書いたように、Irenkaを利用しています。

今回はUrumaのウィジット・インジェクションのチェック機能を作ってみました。
Irenka Queryが賢いため、以下のような雰囲気でチェックできる。簡単。
(雰囲気ですよ、このソースだけでは動かないし)

    /**
     * ウィジット・インジェクションに対応する画面定義の存在を確認するHack Action
     * 
     * @when
     *   action.simpleName =~ ".*Action"
     *   field.parent = action
     */
    public void validateWidgetInjection(
    		CtClass<?> action,
    		CtField<? extends Widget> field,
            Messager messager)
    {
    	String resourceName = HackUtil.getResourceName(action);
    	String id = field.getSimpleName();
    	
    	// 対応するidの存在チェック
    	String widget = Id2WidgetMapHolder.getWidgetName(resourceName, id);
    	if (widget == null) {
            messager.warn(field, "フィールドに対応するid(" + id + ")が画面定義(" + resourceName + ")に存在しません。");
    	}
    }

Irenkaのサンプル集を見てみたら「? extends Widget」でなく、「field.type <= {@link Widget}」を使っても良いですね。