like a snippet

今の時点でもいえることは、rule一発で終るような「($T)$a => $a::$a instanceof $T;」のようなものはJackpotのほうが手数が少ない。一方で、@Overrideアノテーションをコードに書き込むようなものは圧倒的にIrenkaのほうが楽だ。できることを説明した概要文からモノの質に類似性を感じたのだが、狙いどころが実は意外に根本から違う、ということなのだろうか。

-rules - まさたか日記

初期の案には、Jackpotからインスピレーションを得たこんなのがありました。

/**
 * @when
 *     cast = {@snippet ($T) $a}
 */
public void removeUnnecessaryCasts(CtCast<?> cast, CtExpression<?> a) {
  if (...) {
    cast.substitute(a);
  }
}

コードスニペット内にプレースホルダを作って、SQLのprepared statementみたいに扱うイメージです。結局スニペットは仮コンパイルされてDOMとして扱うことになるので、これまでの言語セット内で再表現も可能です。

/**
 * @when
 *     cast = {@link CtCast<?>}
 *     T = cast.type
 *     a = cast.expression
 */

ついでにJackpotのinstanceof制約も入れるとこんな感じでしょうか(現時点では動きませんが)

/**
 * @when
 *     cast = {@link CtCast<?>}
 *     T = cast.type
 *     a = cast.expression
 *     typeof a in T.superTypes
 */

Jackpotよりも、というより可能な限り低層にIrenkaは位置する。それがどこかで効いてくるといいなと。

ただ、クエリにスニペットを書くというのはどこかで使えそうなアイデアかも。