-rules

Jackpotを予習してました。もっと早い段階でJackpotをじっくり見ていたら今のIrenkaのデザインは思いつかなかったんじゃないかな。「これでいいじゃんね」という気持ちで。だからこそIrenkaの強みが自信を持って言える。が、それもJackpotの上で実装可能なのだろうか。。。ほか未だ知らぬIDEAの同様機能をもって同じくIDEAの上で実装可能なのだろうか。もうしばらく調査と考察をしてみる。
今の時点でもいえることは、rule一発で終るような「($T)$a => $a::$a instanceof $T;」のようなものはJackpotのほうが手数が少ない。一方で、@Overrideアノテーションをコードに書き込むようなものは圧倒的にIrenkaのほうが楽だ。できることを説明した概要文からモノの質に類似性を感じたのだが、狙いどころが実は意外に根本から違う、ということなのだろうか。


追記:
Jackpotの例「($T)$a => $a::$a instanceof $T;」と同じ機能をIrenkaで書いてみた。

public class SampleHack {
  /**
   * @when
   */
  public void removeUnnecessaryCasts(CtCast<?> cast) {
    CtExpression<?> exp = cast.getExpression();
    if(cast.getType().isAssignableFrom(exp.getExpressionType())) {
      cast.substitute(exp);
    }
  }
}

今日時点の開発中バージョンで普通に動く。それはそれでちょっと感動した。同時に楽しみなのはこれがベストな解答かがまだわからないということ。Irenkaの機能があまりに汎用的なので、もっとスマートな別解があるかもしれない。